diff options
| author | Fabien Poussin <fabien.poussin@gmail.com> | 2018-03-15 12:51:14 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-15 12:51:14 +0100 | 
| commit | 3add406135c78d44ebc38d810b22af5da19cd296 (patch) | |
| tree | fd42297388ca04dc8ff202e40d491b73ff4c21d6 /tools/update_configs.py | |
| parent | 345e218afd4f8009729dddc6eb541d8ec6a91565 (diff) | |
| parent | dabdfca04e5f470d1eb83f72f18269bd294031b6 (diff) | |
| download | ChibiOS-Contrib-3add406135c78d44ebc38d810b22af5da19cd296.tar.gz ChibiOS-Contrib-3add406135c78d44ebc38d810b22af5da19cd296.tar.bz2 ChibiOS-Contrib-3add406135c78d44ebc38d810b22af5da19cd296.zip  | |
Merge branch 'master' into update_tests
Diffstat (limited to 'tools/update_configs.py')
| -rw-r--r-- | tools/update_configs.py | 104 | 
1 files changed, 104 insertions, 0 deletions
diff --git a/tools/update_configs.py b/tools/update_configs.py new file mode 100644 index 0000000..6bc69b9 --- /dev/null +++ b/tools/update_configs.py @@ -0,0 +1,104 @@ +#!/usr/bin/python3
 +# -*- coding: utf-8 -*-
 +__author__ = 'Fabien Poussin'
 +__version__ = '0.1'
 +
 +import os
 +import re
 +from argparse import ArgumentParser
 +from traceback import print_exc
 +from shutil import copy
 +
 +parser = ArgumentParser(description='Generate ChibiOS-Contrib config and make files from ChibiOS')
 +parser.add_argument('-s', '--src', default='../../ChibiOS-RT', type=str, help="ChibiOS folder")
 +parser.add_argument('-d', '--dst', default='..', type=str, help='ChibiOS-Contrib folder')
 +
 +
 +def makefile(lines):
 +
 +    for l in range(len(lines)):
 +
 +        if 'CHIBIOS =' in lines[l]:
 +            lines[l] = lines[l][:-1] + '/../ChibiOS-RT\n'
 +            lines.insert(l + 1, 'CHIBIOS_CONTRIB = $(CHIBIOS)/../ChibiOS-Contrib\n')
 +
 +        if '$(CHIBIOS)/os/hal/hal.mk' in lines[l] \
 +                or '$(CHIBIOS)/os/hal/ports/' in lines[l] \
 +                or '$(CHIBIOS)/os/various' in lines[l]            :
 +            lines[l] = lines[l].replace('CHIBIOS', 'CHIBIOS_CONTRIB')
 +
 +    return "".join(lines)
 +
 +
 +def halconf(lines):
 +
 +    idx_end = lines.index('#endif /* HALCONF_H */\n')
 +    lines.insert(idx_end - 1, '\n')
 +    lines.insert(idx_end - 1, '#include "halconf_community.h"')
 +    lines.insert(idx_end - 1, '\n')
 +
 +    return "".join(lines)
 +
 +
 +def mcuconf(lines):
 +
 +    idx_end = lines.index('#endif /* MCUCONF_H */\n')
 +    lines.insert(idx_end - 1, '\n')
 +    lines.insert(idx_end - 1, '#include "mcuconf_community.h"')
 +    lines.insert(idx_end - 1, '\n')
 +
 +    return "".join(lines)
 +
 +
 +if __name__ == '__main__':
 +
 +    args = parser.parse_args()
 +    sources = {}
 +
 +    for folder in ['testhal']:
 +
 +        for family in os.scandir(args.src + '/{}/STM32/'.format(folder)):
 +            if not family.name[0].isupper() or not family.is_dir():
 +                continue
 +
 +            for test in os.scandir(family.path):
 +                try:
 +                    sources[family.name] = {'makefile': None, 'halconf': None, 'mcuconf': None}
 +
 +                    with open(test.path + '/Makefile', 'r') as file:
 +                        sources[family.name]['makefile'] = makefile(file.readlines())
 +
 +                    with open(test.path + '/halconf.h', 'r') as file:
 +                        sources[family.name]['halconf'] = halconf(file.readlines())
 +
 +                    with open(test.path + '/mcuconf.h', 'r') as file:
 +                        sources[family.name]['mcuconf'] = mcuconf(file.readlines())
 +
 +                except Exception as e:
 +                    print(test.path, e)
 +                    del sources[family.name]
 +                    continue
 +
 +                break
 +
 +        for family in os.scandir(args.dst + '/{}/STM32/'.format(folder)):
 +            if not family.name[0].isupper() or not family.is_dir():
 +                continue
 +
 +            for test in os.scandir(family.path):
 +                copy('templates/halconf_community.h', test.path)
 +                copy('templates/mcuconf_community.h', test.path)
 +
 +                try:
 +                    with open(test.path + '/Makefile', 'w') as file:
 +                        file.write(sources[family.name]['makefile'])
 +
 +                    with open(test.path + '/halconf.h', 'w') as file:
 +                        file.write(sources[family.name]['halconf'])
 +
 +                    with open(test.path + '/mcuconf.h', 'w') as file:
 +                        file.write(sources[family.name]['mcuconf'])
 +
 +                    print('updated', test.path)
 +                except KeyError as e:
 +                    print('Missing family data', e)
  | 
