From b173ebde9849b6eeb77af83763ba643e7bead8e4 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Thu, 18 Mar 2021 00:10:52 +0800 Subject: [PATCH] =?UTF-8?q?[tools]=20=E5=A2=9E=E5=8A=A0cmake=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++ tools/building.py | 6 +++- tools/cmake.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 tools/cmake.py diff --git a/.gitignore b/.gitignore index b532495df2..4e6126542c 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 00a9f04107..ae67adb415 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 0000000000..09ebefdbbf --- /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