1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #
- # Copyright (c) 2006-2023, RT-Thread Development Team
- #
- # SPDX-License-Identifier: Apache-2.0
- #
- # Change Logs:
- # Date Author Notes
- # 2023-06-27 dejavudwh the first version
- #
- import subprocess
- import logging
- import os
- CONFIG_BSP_USING_X = ["CONFIG_BSP_USING_UART", "CONFIG_BSP_USING_I2C", "CONFIG_BSP_USING_SPI", "CONFIG_BSP_USING_ADC", "CONFIG_BSP_USING_DAC"]
- def init_logger():
- log_format = "[%(filename)s %(lineno)d %(levelname)s] %(message)s "
- date_format = '%Y-%m-%d %H:%M:%S %a '
- logging.basicConfig(level=logging.INFO,
- format=log_format,
- datefmt=date_format,
- )
- def diff():
- result = subprocess.run(['git', 'diff', '--name-only', 'HEAD', 'origin/master', '--diff-filter=ACMR', '--no-renames', '--full-index'], stdout = subprocess.PIPE)
- file_list = result.stdout.decode().strip().split('\n')
- logging.info(file_list)
- bsp_paths = set()
- for file in file_list:
- if "bsp/" in file:
- logging.info("Modifed file: {}".format(file))
- bsp_paths.add(file)
-
- dirs = set()
- for dir in bsp_paths:
- dir = os.path.dirname(dir)
- while "bsp/" in dir:
- files = os.listdir(dir)
- if ".config" in files and "rt-thread.elf" not in files and not dir.endswith("bsp"):
- logging.info("Found bsp path: {}".format(dir))
- dirs.add(dir)
- break
- new_dir = os.path.dirname(dir)
- dir = new_dir
- return dirs
- def check_config_in_line(line):
- for config in CONFIG_BSP_USING_X:
- if config in line and '#' in line:
- logging.info("Found in {}".format(line))
- return config
-
- return ""
- def check_config_in_file(file_path):
- configs = set()
- found = False
- try:
- with open(file_path, 'r') as file:
- for line in file:
- line.strip()
- if found:
- res = check_config_in_line(line)
- if res:
- configs.add(res)
- elif "On-chip Peripheral Drivers" in line:
- logging.info("Found On-chip Peripheral Drivers")
- found = True
- except FileNotFoundError:
- logging.error("The .config file does not exist for this BSP, please recheck the file directory!")
- return configs
- def modify_config(file_path, configs):
- with open(file_path + "/rtconfig.h", 'a') as file:
- for item in configs:
- define1 = item.replace("CONFIG_BSP", "BSP")
- define2 = item.replace("CONFIG_BSP", "RT")
- file.write("#define " + define1 + "\n")
- file.write("#define " + define2 + "\n")
- def recompile_bsp(dir):
- logging.info("recomplie bsp: {}".format(dir))
- os.system("scons -C " + dir)
- if __name__ == '__main__':
- init_logger()
- recompile_bsp_dirs = diff()
- for dir in recompile_bsp_dirs:
- dot_config_path = dir + "/" + ".config"
- configs = check_config_in_file(dot_config_path)
- logging.info("add config:")
- logging.info(configs)
- logging.info("Add configurations and recompile!")
- modify_config(dir, configs)
- recompile_bsp(dir)
|