diff --git a/.gitignore b/.gitignore index b532495df2aedb0b2e957d5d86b6844fa68f3c1b..4e6126542cb35536435970f6fbc63a80b6bcef4f 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ ncscope.* #ctag files tags +.idea +CMakeLists.txt +cmake-build-debug diff --git a/tools/building.py b/tools/building.py index 00a9f04107adcf5e4419dce95c4c51c763546e07..ae67adb415919a50d8e921c4ca43dcefa163d94c 100644 --- a/tools/building.py +++ b/tools/building.py @@ -208,7 +208,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ AddOption('--target', dest = 'target', type = 'string', - help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite') + help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite/cmake') AddOption('--stackanalysis', dest = 'stackanalysis', action = 'store_true', @@ -877,6 +877,10 @@ def GenTargetProject(program = None): from codelite import TargetCodelite TargetCodelite(Projects, program) + if GetOption('target') == 'cmake': + from cmake import CMakeProject + CMakeProject(Env,Projects) + def EndBuilding(target, program = None): import rtconfig diff --git a/tools/cmake.py b/tools/cmake.py new file mode 100644 index 0000000000000000000000000000000000000000..09ebefdbbfe2be03b38789a583d8b2a41277245a --- /dev/null +++ b/tools/cmake.py @@ -0,0 +1,73 @@ +""" +Utils for CMake +""" + +import os +import re +import utils +import rtconfig + + +def GenerateCFiles(env,project): + """ + Generate CMakeLists.txt files + """ + + info = utils.ProjectInfo(env) + + CC = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC) + AS = os.path.join(rtconfig.EXEC_PATH, rtconfig.AS) + AR = os.path.join(rtconfig.EXEC_PATH, rtconfig.AR) + LINK = os.path.join(rtconfig.EXEC_PATH, rtconfig.LINK) + SIZE = os.path.join(rtconfig.EXEC_PATH, rtconfig.SIZE) + OBJDUMP = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJDUMP) + OBJCOPY = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJCPY) + + cm_file = open('CMakeLists.txt', 'w') + if cm_file: + cm_file.write("CMAKE_MINIMUM_REQUIRED(VERSION 3.10)\n\n") + + cm_file.write("PROJECT(rtthread C ASM)\n") + cm_file.write("SET(CMAKE_SYSTEM_NAME Generic)\n") + cm_file.write("#SET(CMAKE_VERBOSE_MAKEFILE ON)\n\n") + + cm_file.write("SET(CMAKE_C_COMPILER \""+ CC + "\")\n") + cm_file.write("SET(CMAKE_ASM_COMPILER \""+ AS + "\")\n") + cm_file.write("SET(CMAKE_OBJCOPY \""+ OBJCOPY + "\")\n") + cm_file.write("SET(CMAKE_SIZE \""+ SIZE + "\")\n\n") + + + cm_file.write("SET(CMAKE_C_FLAGS \""+ rtconfig.CFLAGS + "\")\n") + cm_file.write("SET(CMAKE_ASM_FLAGS \""+ rtconfig.AFLAGS + "\")\n") + cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub('-T(\s*)', '-T ${CMAKE_SOURCE_DIR}/',rtconfig.LFLAGS) + "\")\n\n") + + cm_file.write("INCLUDE_DIRECTORIES(\n") + for i in info['CPPPATH']: + cm_file.write( "\t" +i + "\n") + cm_file.write(")\n\n") + + + cm_file.write("ADD_DEFINITIONS(\n") + for i in info['CPPDEFINES']: + cm_file.write("\t-D" + i + "\n") + cm_file.write(")\n\n") + + cm_file.write("SET(PROJECT_SOURCES\n") + for group in project: + for f in group['src']: + cm_file.write( "\t"+os.path.normpath(f.rfile().abspath)+"\n" ) + cm_file.write(")\n\n") + + cm_file.write("ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES})\n") + cm_file.write("ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME}.elf POST_BUILD \nCOMMAND ${CMAKE_OBJCOPY} -O binary ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin COMMAND ${CMAKE_SIZE} ${CMAKE_PROJECT_NAME}.elf)") + + cm_file.close() + + return + +def CMakeProject(env,project): + print('Update setting files for CMakeLists.txt...') + GenerateCFiles(env,project) + print('Done!') + + return \ No newline at end of file