From 9776fa5021b56f8847127138a37c7b5824305ba0 Mon Sep 17 00:00:00 2001 From: iysheng Date: Fri, 4 Jun 2021 23:53:29 +0800 Subject: [tools] Optimization the EXTERN_LIB variable use --- tools/makefile.py | 8 ++++++++ tools/rtthread.mk | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'tools') diff --git a/tools/makefile.py b/tools/makefile.py index 655e294575..97001892c9 100644 --- a/tools/makefile.py +++ b/tools/makefile.py @@ -51,6 +51,14 @@ def TargetMakefile(env): if 'CXXFLAGS' in dir(rtconfig): make.write('CXXFLAGS :=%s' % (rtconfig.CXXFLAGS)) make.write('\n') + if env.has_key('LIBS'): + make.write('EXTERN_LIB := ') + for tlib in env['LIBS']: + make.write('-l%s ' % (tlib)) + if env.has_key('LIBPATH'): + for tlibpath in env['LIBPATH']: + make.write('-L%s ' % (tlibpath)) + make.write('\n') make.write('\n') diff --git a/tools/rtthread.mk b/tools/rtthread.mk index 7cf018cb52..4bb3e2754d 100644 --- a/tools/rtthread.mk +++ b/tools/rtthread.mk @@ -122,10 +122,10 @@ $(TARGET): $(OBJS) @echo ar $(TARGET) @$(CROSS_COMPILE)ar -rv $@ $(OBJS) else -$(TARGET): $(OBJS) $(EXTERN_LIB) +$(TARGET): $(OBJS) @echo ------------------------------------------------ @echo link $(TARGET) - @$(CROSS_COMPILE)g++ -o $@ $(LFLAGS) $(OBJS) $(EXTERN_LIB) -lc -lm + @$(CROSS_COMPILE)g++ -o $@ $(LFLAGS) $(OBJS) $(EXTERN_LIB) @echo ------------------------------------------------ @$(CROSS_COMPILE)objcopy -O binary $@ rtthread.bin @$(CROSS_COMPILE)size $@ -- cgit v1.3.1 From 115ec7cf49650e3206510b63e2a527d0ddc626ea Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 7 Jun 2021 12:58:17 +0800 Subject: [tools] remove formatting --- tools/formatting.py | 135 ---------------------------------------------------- 1 file changed, 135 deletions(-) delete mode 100644 tools/formatting.py (limited to 'tools') diff --git a/tools/formatting.py b/tools/formatting.py deleted file mode 100644 index 0b63e031fa..0000000000 --- a/tools/formatting.py +++ /dev/null @@ -1,135 +0,0 @@ -# -# File : formatting.py -# This file is part of RT-Thread RTOS -# COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Change Logs: -# Date Author Notes -# 2021-03-02 Meco Man The first version -# 2021-03-04 Meco Man 增加统一转换成UTF-8编码格式功能 - - -#本文件会自动对指定路径下的所有文件包括子文件夹的文件(仅针对.c.h)进行扫描 -# 1)将源文件编码统一为UTF-8; -# 2)将TAB键替换为空格; -# 3)将每行末尾多余的空格删除,并统一换行符为'\n'; -#使用时只需要双击本文件,输入要扫描的文件夹路径即可 -#不能保证100%全部成功转换为UTF-8,有一些编码特殊或识别不准确会在终端打印信息,需人工转换 - -#欢迎对本文件的功能继续做出补充,欢迎提交PR - -import os -import chardet - -#用空格代替TAB键 -#这里并不是简单的将TAB替换成4个空格 -#空格个数到底是多少需要计算,因为TAB制表本身有自动对齐的功能 -def tab2spaces(line): - list_str = list(line) #字符串打散成列表,放边操作 - i = list_str.count('\t') - - while i > 0: - ptr = list_str.index('\t') - del list_str[ptr] - space_need_to_insert = 4 - (ptr%4) - j = 0 - while j < space_need_to_insert: - list_str.insert(ptr,' ') - j = j+1 - - i = i-1 - - line = ''.join(list_str) #列表恢复成字符串 - return line - -#删除每行末尾多余的空格 统一使用\n作为结尾 -def formattail(line): - line = line.rstrip() - line = line + '\n' - return line - -#对单个文件进行格式整理 -def format_codes(filename): - try: - file=open(filename,'r',encoding = 'utf-8') - file_temp=open('temp','w',encoding = 'utf-8') - for line in file: - line = tab2spaces(line) - line = formattail(line) - file_temp.write(line) - file_temp.close() - file.close() - os.remove(filename) - os.rename('temp',filename) - -def get_encode_info(file): - with open(file, 'rb') as f: - code = chardet.detect(f.read())['encoding'] - #charde库有一定几率对当前文件的编码识别不准确 - if code == 'EUC-JP': #容易将含着少量中文的英文字符文档识别为日语编码格式 - code = 'GB2312' - elif code == 'ISO-8859-1': #部分文件GB2312码会被识别成ISO-8859-1 - code = 'GB2312' - - if not (code == 'ascii' or code == 'utf-8' or code == 'GB2312' #编码识别正确 - or code == 'Windows-1252'): # Windows-1252 是由于意法半导体是法国企业's的'是法语的'导致的 - if code != None: - print('未处理,需人工确认:'+code+':'+file) #需要人工确认 - code = None - - return code - -#将单个文件转为UTF-8编码 -def conver_to_utf_8 (path): - try: - info = get_encode_info(path) - if info == None: - return 0 #0 失败 - - file=open(path,'rb+') - data = file.read() - string = data.decode(info) - utf = string.encode('utf-8') - file.seek(0) - file.write(utf) - file.close() - return 1 #1成功 - except UnicodeDecodeError: - print("UnicodeDecodeError未处理,需人工确认"+path) - return 0 - except UnicodeEncodeError: - print("UnicodeEncodeError未处理,需人工确认"+path) - return 0 - -# 递归扫描目录下的所有文件 -def traversalallfile(path): - filelist=os.listdir(path) - for file in filelist: - filepath=os.path.join(path,file) - if os.path.isdir(filepath): - traversalallfile(filepath) - elif os.path.isfile(filepath): - if filepath.endswith(".c") == True or filepath.endswith(".h") == True: #只处理.c和.h文件 - if conver_to_utf_8(filepath) == 1: #先把这个文件转为UTF-8编码,1成功 - format_codes(filepath) #再对这个文件进行格式整理 - -def formatfiles(): - workpath = input('enter work path: ') - traversalallfile(workpath) - -if __name__ == '__main__': - formatfiles() -- cgit v1.3.1 From d65ecb91f154cc3cc71df2a63cb36392e1e66bc1 Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Wed, 9 Jun 2021 16:54:48 +0800 Subject: [tools] update eclipse project after dist. --- tools/mkdist.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/mkdist.py b/tools/mkdist.py index a29db7b080..e2c2b8da50 100644 --- a/tools/mkdist.py +++ b/tools/mkdist.py @@ -176,7 +176,8 @@ def bs_update_ide_project(bsp_root, rtt_root, rttide = None): 'iar':('iar', 'iar'), 'vs':('msvc', 'cl'), 'vs2012':('msvc', 'cl'), - 'cdk':('gcc', 'gcc')} + 'cdk':('gcc', 'gcc'), + 'eclipse':('eclipse', 'gcc')} else: item = 'eclipse --project-name=' + rttide['project_name'] tgt_dict = {item:('gcc', 'gcc')} -- cgit v1.3.1 From 7a52944051338961e671f078cfbf5971ffc70887 Mon Sep 17 00:00:00 2001 From: thread-liu Date: Thu, 17 Jun 2021 14:42:54 +0800 Subject: [update] support windows cmake tool. --- tools/cmake.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'tools') diff --git a/tools/cmake.py b/tools/cmake.py index 645bdbb229..5b43c39409 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -4,6 +4,7 @@ Author: https://github.com/klivelinux """ import os +import sys import re import utils import rtconfig @@ -13,17 +14,26 @@ def GenerateCFiles(env,project): """ Generate CMakeLists.txt files """ - info = utils.ProjectInfo(env) - - CC = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC) - CXX = os.path.join(rtconfig.EXEC_PATH, rtconfig.CXX) - 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) + + CC = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC).replace('\\', "/") + CXX = os.path.join(rtconfig.EXEC_PATH, rtconfig.CXX).replace('\\', "/") + AS = os.path.join(rtconfig.EXEC_PATH, rtconfig.AS).replace('\\', "/") + AR = os.path.join(rtconfig.EXEC_PATH, rtconfig.AR).replace('\\', "/") + LINK = os.path.join(rtconfig.EXEC_PATH, rtconfig.LINK).replace('\\', "/") + SIZE = os.path.join(rtconfig.EXEC_PATH, rtconfig.SIZE).replace('\\', "/") + OBJDUMP = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJDUMP).replace('\\', "/") + OBJCOPY = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJCPY).replace('\\', "/") + + if "win32" in sys.platform: + CC += ".exe" + CXX += ".exe" + AS += ".exe" + AR += ".exe" + LINK += ".exe" + SIZE += ".exe" + OBJDUMP += ".exe" + OBJCOPY += ".exe" cm_file = open('CMakeLists.txt', 'w') if cm_file: @@ -49,7 +59,7 @@ def GenerateCFiles(env,project): cm_file.write("INCLUDE_DIRECTORIES(\n") for i in info['CPPPATH']: - cm_file.write( "\t" +i + "\n") + cm_file.write( "\t" + i.replace("\\", "/") + "\n") cm_file.write(")\n\n") @@ -61,21 +71,21 @@ def GenerateCFiles(env,project): 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( "\t" + os.path.normpath(f.rfile().abspath).replace("\\", "/") + "\n" ) cm_file.write(")\n\n") cm_file.write("LINK_DIRECTORIES(\n") for group in project: if 'LIBPATH' in group.keys(): for f in group['LIBPATH']: - cm_file.write( "\t"+ f + "\n" ) + cm_file.write( "\t"+ f.replace("\\", "/") + "\n" ) cm_file.write(")\n\n") cm_file.write("LINK_LIBRARIES(\n") for group in project: if 'LIBS' in group.keys(): for f in group['LIBS']: - cm_file.write( "\t"+ "{}\n".format(f)) + cm_file.write( "\t"+ "{}\n".format(f.replace("\\", "/"))) cm_file.write(")\n\n") cm_file.write("ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}.elf ${PROJECT_SOURCES})\n") -- cgit v1.3.1 From b67e6bbafdf236afa41700c595d8362d543061a3 Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Fri, 25 Jun 2021 21:04:48 +0800 Subject: [cmake] fix path issue. --- tools/cmake.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tools') diff --git a/tools/cmake.py b/tools/cmake.py index 5b43c39409..88a95ecad8 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -49,10 +49,10 @@ def GenerateCFiles(env,project): cm_file.write("SET(CMAKE_SIZE \""+ SIZE + "\")\n\n") - cm_file.write("SET(CMAKE_C_FLAGS \""+ rtconfig.CFLAGS + "\")\n") - cm_file.write("SET(CMAKE_CXX_FLAGS \""+ rtconfig.CXXFLAGS + "\")\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("SET(CMAKE_C_FLAGS \""+ rtconfig.CFLAGS.replace('\\', "/") + "\")\n") + cm_file.write("SET(CMAKE_CXX_FLAGS \""+ rtconfig.CXXFLAGS.replace('\\', "/") + "\")\n") + cm_file.write("SET(CMAKE_ASM_FLAGS \""+ rtconfig.AFLAGS.replace('\\', "/") + "\")\n") + cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub('-T(\s*)', '-T ${CMAKE_SOURCE_DIR}/',rtconfig.LFLAGS.replace('\\', "/")) + "\")\n\n") cm_file.write("SET(CMAKE_CXX_STANDARD 14)\n") cm_file.write("PROJECT(rtthread C CXX ASM)\n") -- cgit v1.3.1 From 194e33a7929be86e541af5172977135ce9c0f8e1 Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Wed, 30 Jun 2021 19:36:24 +0800 Subject: [tools] add scons --target=cmake-armclang --- bsp/stm32/stm32l475-atk-pandora/rtconfig.py | 3 +- tools/building.py | 3 +- tools/cmake.py | 95 ++++++++++++++++++++--------- 3 files changed, 69 insertions(+), 32 deletions(-) (limited to 'tools') diff --git a/bsp/stm32/stm32l475-atk-pandora/rtconfig.py b/bsp/stm32/stm32l475-atk-pandora/rtconfig.py index 9314a28375..b13849bb9f 100644 --- a/bsp/stm32/stm32l475-atk-pandora/rtconfig.py +++ b/bsp/stm32/stm32l475-atk-pandora/rtconfig.py @@ -105,7 +105,7 @@ elif PLATFORM == 'armclang': TARGET_EXT = 'axf' DEVICE = ' --cpu Cortex-M4.fp ' - CFLAGS = ' -xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m4 ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' CFLAGS += ' -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 ' CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' CFLAGS += ' -gdwarf-3 -ffunction-sections ' @@ -125,6 +125,7 @@ elif PLATFORM == 'armclang': CFLAGS += ' -O2' CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' diff --git a/tools/building.py b/tools/building.py index 32ce449622..e078c1626c 100644 --- a/tools/building.py +++ b/tools/building.py @@ -258,6 +258,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ 'eclipse':('gcc', 'gcc'), 'ses' : ('gcc', 'gcc'), 'cmake':('gcc', 'gcc'), + 'cmake-armclang':('keil', 'armclang'), 'codelite' : ('gcc', 'gcc')} tgt_name = GetOption('target') @@ -883,7 +884,7 @@ def GenTargetProject(program = None): from codelite import TargetCodelite TargetCodelite(Projects, program) - if GetOption('target') == 'cmake': + if GetOption('target') == 'cmake' or GetOption('target') == 'cmake-armclang': from cmake import CMakeProject CMakeProject(Env,Projects) diff --git a/tools/cmake.py b/tools/cmake.py index 88a95ecad8..2c27c96a18 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -21,9 +21,12 @@ def GenerateCFiles(env,project): AS = os.path.join(rtconfig.EXEC_PATH, rtconfig.AS).replace('\\', "/") AR = os.path.join(rtconfig.EXEC_PATH, rtconfig.AR).replace('\\', "/") LINK = os.path.join(rtconfig.EXEC_PATH, rtconfig.LINK).replace('\\', "/") - SIZE = os.path.join(rtconfig.EXEC_PATH, rtconfig.SIZE).replace('\\', "/") - OBJDUMP = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJDUMP).replace('\\', "/") - OBJCOPY = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJCPY).replace('\\', "/") + if rtconfig.PLATFORM == 'gcc': + SIZE = os.path.join(rtconfig.EXEC_PATH, rtconfig.SIZE).replace('\\', "/") + OBJDUMP = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJDUMP).replace('\\', "/") + OBJCOPY = os.path.join(rtconfig.EXEC_PATH, rtconfig.OBJCPY).replace('\\', "/") + elif rtconfig.CROSS_TOOL == 'keil': + FROMELF = os.path.join(rtconfig.EXEC_PATH, 'fromelf').replace('\\', "/") if "win32" in sys.platform: CC += ".exe" @@ -31,28 +34,56 @@ def GenerateCFiles(env,project): AS += ".exe" AR += ".exe" LINK += ".exe" - SIZE += ".exe" - OBJDUMP += ".exe" - OBJCOPY += ".exe" + if rtconfig.PLATFORM == 'gcc': + SIZE += ".exe" + OBJDUMP += ".exe" + OBJCOPY += ".exe" + elif rtconfig.CROSS_TOOL == 'keil': + FROMELF += ".exe" + + if not os.path.exists(CC) or not os.path.exists(CXX) or not os.path.exists(AS) or not os.path.exists(AR) or not os.path.exists(LINK): + print("'Cannot found toolchain directory, please check RTT_CC and RTT_EXEC_PATH'") + sys.exit(-1) cm_file = open('CMakeLists.txt', 'w') if cm_file: cm_file.write("CMAKE_MINIMUM_REQUIRED(VERSION 3.10)\n\n") cm_file.write("SET(CMAKE_SYSTEM_NAME Generic)\n") + cm_file.write("set(CMAKE_SYSTEM_PROCESSOR " + rtconfig.CPU +")\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_CXX_COMPILER \""+ CXX + "\")\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.replace('\\', "/") + "\")\n") - cm_file.write("SET(CMAKE_CXX_FLAGS \""+ rtconfig.CXXFLAGS.replace('\\', "/") + "\")\n") - cm_file.write("SET(CMAKE_ASM_FLAGS \""+ rtconfig.AFLAGS.replace('\\', "/") + "\")\n") - cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub('-T(\s*)', '-T ${CMAKE_SOURCE_DIR}/',rtconfig.LFLAGS.replace('\\', "/")) + "\")\n\n") + cm_file.write("set(CMAKE_C_COMPILER_WORKS TRUE)\n") + cm_file.write("set(CMAKE_CXX_COMPILER_WORKS TRUE)\n\n") + + if rtconfig.PLATFORM == 'gcc': + cm_file.write("SET(CMAKE_OBJCOPY \""+ OBJCOPY + "\")\n") + cm_file.write("SET(CMAKE_SIZE \""+ SIZE + "\")\n\n") + elif rtconfig.CROSS_TOOL == 'keil': + cm_file.write("SET(CMAKE_FROMELF \""+ FROMELF + "\")\n") + + cm_file.write("SET(CMAKE_C_FLAGS \""+ rtconfig.CFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") + cm_file.write("SET(CMAKE_CXX_FLAGS \""+ rtconfig.CXXFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") + cm_file.write("SET(CMAKE_ASM_FLAGS \""+ rtconfig.AFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") + + LINKER_FLAGS = '' + LINKER_LIBS = '' + if rtconfig.PLATFORM == 'gcc': + LINKER_FLAGS += '-T' + elif rtconfig.CROSS_TOOL == 'keil': + LINKER_FLAGS += '--scatter' + for group in project: + if 'LIBPATH' in group.keys(): + for f in group['LIBPATH']: + LINKER_LIBS += ' --userlibpath ' + f.replace("\\", "/") + for group in project: + if 'LIBS' in group.keys(): + for f in group['LIBS']: + LINKER_LIBS += ' ' + f.replace("\\", "/") + '.lib' + cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub(LINKER_FLAGS + '(\s*)', LINKER_FLAGS + ' ${CMAKE_SOURCE_DIR}/',rtconfig.LFLAGS.replace('\\', "/").replace('\"', "\\\"")) + LINKER_LIBS + "\")\n\n") cm_file.write("SET(CMAKE_CXX_STANDARD 14)\n") cm_file.write("PROJECT(rtthread C CXX ASM)\n") @@ -74,22 +105,26 @@ def GenerateCFiles(env,project): cm_file.write( "\t" + os.path.normpath(f.rfile().abspath).replace("\\", "/") + "\n" ) cm_file.write(")\n\n") - cm_file.write("LINK_DIRECTORIES(\n") - for group in project: - if 'LIBPATH' in group.keys(): - for f in group['LIBPATH']: - cm_file.write( "\t"+ f.replace("\\", "/") + "\n" ) - cm_file.write(")\n\n") - - cm_file.write("LINK_LIBRARIES(\n") - for group in project: - if 'LIBS' in group.keys(): - for f in group['LIBS']: - cm_file.write( "\t"+ "{}\n".format(f.replace("\\", "/"))) - 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)") + if rtconfig.PLATFORM == 'gcc': + cm_file.write("LINK_DIRECTORIES(\n") + for group in project: + if 'LIBPATH' in group.keys(): + for f in group['LIBPATH']: + cm_file.write( "\t"+ f.replace("\\", "/") + "\n" ) + cm_file.write(")\n\n") + + cm_file.write("LINK_LIBRARIES(\n") + for group in project: + if 'LIBS' in group.keys(): + for f in group['LIBS']: + cm_file.write( "\t"+ "{}\n".format(f.replace("\\", "/"))) + 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)") + elif rtconfig.CROSS_TOOL == 'keil': + cm_file.write("ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${PROJECT_SOURCES})\n") + cm_file.write("ADD_CUSTOM_COMMAND(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD \nCOMMAND ${CMAKE_FROMELF} --bin ${CMAKE_PROJECT_NAME}.elf --output ${CMAKE_PROJECT_NAME}.bin COMMAND ${CMAKE_FROMELF} -z ${CMAKE_PROJECT_NAME}.elf)") cm_file.close() -- cgit v1.3.1 From d500f2dae686265bcd91b123a9badae5e6f63fa5 Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Thu, 1 Jul 2021 08:13:57 +0800 Subject: [tools] cmake-clang compatible with bsp that does not support C++. --- tools/cmake.py | 57 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 21 deletions(-) (limited to 'tools') diff --git a/tools/cmake.py b/tools/cmake.py index 2c27c96a18..811b6693cb 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -17,7 +17,10 @@ def GenerateCFiles(env,project): info = utils.ProjectInfo(env) CC = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC).replace('\\', "/") - CXX = os.path.join(rtconfig.EXEC_PATH, rtconfig.CXX).replace('\\', "/") + if 'CXX' in dir(rtconfig): + CXX = os.path.join(rtconfig.EXEC_PATH, rtconfig.CXX).replace('\\', "/") + else: + CXX = '' AS = os.path.join(rtconfig.EXEC_PATH, rtconfig.AS).replace('\\', "/") AR = os.path.join(rtconfig.EXEC_PATH, rtconfig.AR).replace('\\', "/") LINK = os.path.join(rtconfig.EXEC_PATH, rtconfig.LINK).replace('\\', "/") @@ -28,9 +31,18 @@ def GenerateCFiles(env,project): elif rtconfig.CROSS_TOOL == 'keil': FROMELF = os.path.join(rtconfig.EXEC_PATH, 'fromelf').replace('\\', "/") + CFLAGS = rtconfig.CFLAGS.replace('\\', "/").replace('\"', "\\\"") + if 'CXXFLAGS' in dir(rtconfig): + CXXFLAGS = rtconfig.CXXFLAGS.replace('\\', "/").replace('\"', "\\\"") + else: + CXXFLAGS = CFLAGS + AFLAGS = rtconfig.AFLAGS.replace('\\', "/").replace('\"', "\\\"") + LFLAGS = rtconfig.LFLAGS.replace('\\', "/").replace('\"', "\\\"") + if "win32" in sys.platform: CC += ".exe" - CXX += ".exe" + if CXX != '': + CXX += ".exe" AS += ".exe" AR += ".exe" LINK += ".exe" @@ -41,7 +53,7 @@ def GenerateCFiles(env,project): elif rtconfig.CROSS_TOOL == 'keil': FROMELF += ".exe" - if not os.path.exists(CC) or not os.path.exists(CXX) or not os.path.exists(AS) or not os.path.exists(AR) or not os.path.exists(LINK): + if not os.path.exists(CC) or not os.path.exists(AS) or not os.path.exists(AR) or not os.path.exists(LINK): print("'Cannot found toolchain directory, please check RTT_CC and RTT_EXEC_PATH'") sys.exit(-1) @@ -50,24 +62,25 @@ def GenerateCFiles(env,project): cm_file.write("CMAKE_MINIMUM_REQUIRED(VERSION 3.10)\n\n") cm_file.write("SET(CMAKE_SYSTEM_NAME Generic)\n") - cm_file.write("set(CMAKE_SYSTEM_PROCESSOR " + rtconfig.CPU +")\n") + cm_file.write("SET(CMAKE_SYSTEM_PROCESSOR " + rtconfig.CPU +")\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_CXX_COMPILER \""+ CXX + "\")\n") cm_file.write("SET(CMAKE_ASM_COMPILER \""+ AS + "\")\n") - cm_file.write("set(CMAKE_C_COMPILER_WORKS TRUE)\n") - cm_file.write("set(CMAKE_CXX_COMPILER_WORKS TRUE)\n\n") + cm_file.write("SET(CMAKE_C_FLAGS \""+ CFLAGS + "\")\n") + cm_file.write("SET(CMAKE_ASM_FLAGS \""+ AFLAGS + "\")\n") + cm_file.write("SET(CMAKE_C_COMPILER_WORKS TRUE)\n\n") + + if CXX != '': + cm_file.write("SET(CMAKE_CXX_COMPILER \""+ CXX + "\")\n") + cm_file.write("SET(CMAKE_CXX_FLAGS \""+ CXXFLAGS + "\")\n") + cm_file.write("SET(CMAKE_CXX_COMPILER_WORKS TRUE)\n\n") if rtconfig.PLATFORM == 'gcc': cm_file.write("SET(CMAKE_OBJCOPY \""+ OBJCOPY + "\")\n") cm_file.write("SET(CMAKE_SIZE \""+ SIZE + "\")\n\n") elif rtconfig.CROSS_TOOL == 'keil': - cm_file.write("SET(CMAKE_FROMELF \""+ FROMELF + "\")\n") - - cm_file.write("SET(CMAKE_C_FLAGS \""+ rtconfig.CFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") - cm_file.write("SET(CMAKE_CXX_FLAGS \""+ rtconfig.CXXFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") - cm_file.write("SET(CMAKE_ASM_FLAGS \""+ rtconfig.AFLAGS.replace('\\', "/").replace('\"', "\\\"") + "\")\n") + cm_file.write("SET(CMAKE_FROMELF \""+ FROMELF + "\")\n\n") LINKER_FLAGS = '' LINKER_LIBS = '' @@ -83,20 +96,22 @@ def GenerateCFiles(env,project): if 'LIBS' in group.keys(): for f in group['LIBS']: LINKER_LIBS += ' ' + f.replace("\\", "/") + '.lib' - cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub(LINKER_FLAGS + '(\s*)', LINKER_FLAGS + ' ${CMAKE_SOURCE_DIR}/',rtconfig.LFLAGS.replace('\\', "/").replace('\"', "\\\"")) + LINKER_LIBS + "\")\n\n") - - cm_file.write("SET(CMAKE_CXX_STANDARD 14)\n") - cm_file.write("PROJECT(rtthread C CXX ASM)\n") - + cm_file.write("SET(CMAKE_EXE_LINKER_FLAGS \""+ re.sub(LINKER_FLAGS + '(\s*)', LINKER_FLAGS + ' ${CMAKE_SOURCE_DIR}/', LFLAGS) + LINKER_LIBS + "\")\n\n") + + if CXX != '': + cm_file.write("SET(CMAKE_CXX_STANDARD 14)\n") + cm_file.write("PROJECT(rtthread C CXX ASM)\n") + else: + cm_file.write("PROJECT(rtthread C ASM)\n") + cm_file.write("INCLUDE_DIRECTORIES(\n") for i in info['CPPPATH']: - cm_file.write( "\t" + i.replace("\\", "/") + "\n") + cm_file.write( "\t" + i.replace("\\", "/") + "\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("\t-D" + i + "\n") cm_file.write(")\n\n") cm_file.write("SET(PROJECT_SOURCES\n") @@ -104,7 +119,7 @@ def GenerateCFiles(env,project): for f in group['src']: cm_file.write( "\t" + os.path.normpath(f.rfile().abspath).replace("\\", "/") + "\n" ) cm_file.write(")\n\n") - + if rtconfig.PLATFORM == 'gcc': cm_file.write("LINK_DIRECTORIES(\n") for group in project: -- cgit v1.3.1