#!/bin/python3 import parse_cmake.parsing as cmp import glob import pprint import re import os __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) serial_regex = r"(\D\D\D\d):(/dev/ttyS\d+)" io_regex = r"IO (.*)" romfs_regex = r"ROMFSROOT (.*)" arch_regex = r"ARCHITECTURE (.*)" toolchain_regex = r"TOOLCHAIN (.*)" def stripComments(code): code = str(code) return re.sub(r'(?m) *#.*\n?', '', code) lut = {} with open(os.path.join(__location__, "cmake_kconfig_lut.txt"),'r') as lookup: for line in lookup: if ',' in line: key, value = line.strip().split(',') lut[key] = value #for name in glob.glob('boards/*/*/*.cmake'): px4_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')) for name in glob.glob(px4_dir + '/boards/*/*/*.cmake'): print(name) with open(name, 'r') as f: romfs_set = False w = open(name.replace(".cmake",".px4board"), "w") for line in f: clean_line = stripComments(line.strip()) value = lut.get(clean_line) if value is not None: print(value, file=w) print(value) else: matches = re.finditer(serial_regex, clean_line, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print("CONFIG_BOARD_SERIAL_" + match.groups()[0] + "=\"" + match.groups()[1] + "\"") print("CONFIG_BOARD_SERIAL_" + match.groups()[0] + "=\"" + match.groups()[1] + "\"", file=w) matches = re.finditer(io_regex, clean_line, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print("CONFIG_BOARD_IO=\"" + match.groups()[0] + "\"") print("CONFIG_BOARD_IO=\"" + match.groups()[0] + "\"", file=w) matches = re.finditer(romfs_regex, clean_line, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print("CONFIG_BOARD_ROMFSROOT=\"" + match.groups()[0] + "\"") print("CONFIG_BOARD_ROMFSROOT=\"" + match.groups()[0] + "\"", file=w) romfs_set = True matches = re.finditer(arch_regex, clean_line, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print("CONFIG_BOARD_ARCHITECTURE=\"" + match.groups()[0] + "\"") print("CONFIG_BOARD_ARCHITECTURE=\"" + match.groups()[0] + "\"", file=w) matches = re.finditer(toolchain_regex, clean_line, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print("CONFIG_BOARD_TOOLCHAIN=\"" + match.groups()[0] + "\"") print("CONFIG_BOARD_TOOLCHAIN=\"" + match.groups()[0] + "\"", file=w) if(romfs_set == False): print("CONFIG_BOARD_ROMFSROOT=\"\"", file=w) w.close()