1import os 2import re 3import utils 4from utils import _make_path_relative 5 6def GenerateCFiles(env,project): 7 """ 8 Generate CMakeLists.txt files 9 """ 10 info = utils.ProjectInfo(env) 11 init_export = [] 12 13 main_component_dir = os.path.join(os.getcwd(), 'main') 14 cm_file = open(os.path.join(main_component_dir, 'CMakeLists.txt'), 'w') 15 if cm_file: 16 cm_file.write("idf_component_register(\n") 17 18 cm_file.write("\tSRCS\n") 19 for group in project: 20 for f in group['src']: 21 path = _make_path_relative(main_component_dir, os.path.normpath(f.rfile().abspath)) 22 cm_file.write( "\t" + path.replace("\\", "/") + "\n" ) 23 src = open(f.rfile().abspath, 'r') 24 for line in src.readlines(): 25 if re.match(r'INIT_(BOARD|PREV|DEVICE|COMPONENT|ENV|APP)_EXPORT\(.+\)', line): 26 init_export.append(re.search(r'\(.+\)', line).group(0)[1:-1]) 27 src.close() 28 29 cm_file.write("\n") 30 31 cm_file.write("\tINCLUDE_DIRS\n") 32 for i in info['CPPPATH']: 33 path = _make_path_relative(main_component_dir, i) 34 cm_file.write( "\t" + path.replace("\\", "/") + "\n") 35 cm_file.write(")\n\n") 36 37 n = len(init_export) 38 if n: 39 cm_file.write("target_link_libraries(${COMPONENT_LIB}\n") 40 for i in range(n): 41 cm_file.write("\tINTERFACE \"-u __rt_init_" + init_export[i] + "\"\n") 42 cm_file.write(")\n") 43 cm_file.close() 44 45 cm_file = open('CMakeLists.txt', 'w') 46 if cm_file: 47 cm_file.write("cmake_minimum_required(VERSION 3.16)\n") 48 cm_file.write("set(COMPONENTS esptool_py main)\n") 49 cm_file.write("include($ENV{IDF_PATH}/tools/cmake/project.cmake)\n") 50 freertos_root = os.getcwd().replace('\\', '/') + '/packages/FreeRTOS_Wrapper-latest/FreeRTOS' 51 cm_file.write("set(freertos_root " + freertos_root + ')\n') 52 cm_file.write("project(rtthread)\n") 53 cm_file.close() 54 55def ESPIDFProject(env,project): 56 print('Update setting files for CMakeLists.txt...') 57 GenerateCFiles(env,project) 58 print('Done!') 59