From c49665cedcf70d1c71491290480f6e8063803d83 Mon Sep 17 00:00:00 2001 From: WeaveFeather Date: Mon, 10 Nov 2025 19:36:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0starm-clang=E5=92=8Carm-none-?= =?UTF-8?q?eabi=E5=B7=A5=E5=85=B7=E9=93=BE=E6=A3=80=E6=B5=8B=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E7=A7=BB=E9=99=A4CMakePresets.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- CMakeLists.txt | 3 ++ CMakePresets.json | 38 ----------------- cmake/DetectToolchain.cmake | 12 ++++++ cmake/Toolchain/gcc-arm-none-eabi.cmake | 55 +++++++++++++++++++++++++ cmake/{ => Toolchain}/starm-clang.cmake | 0 6 files changed, 73 insertions(+), 39 deletions(-) delete mode 100644 CMakePresets.json create mode 100644 cmake/DetectToolchain.cmake create mode 100644 cmake/Toolchain/gcc-arm-none-eabi.cmake rename cmake/{ => Toolchain}/starm-clang.cmake (100%) diff --git a/.gitignore b/.gitignore index fc60861..72d4fe8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ cmake-build-debug-stm32cube /compile_commands.json -.idea \ No newline at end of file +.idea + +cmake-build* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b17923..3d65c69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,7 @@ cmake_minimum_required(VERSION 3.22) + +include(cmake/DetectToolchain.cmake) + project(TronOneH7_Scaffold) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) diff --git a/CMakePresets.json b/CMakePresets.json deleted file mode 100644 index 5324542..0000000 --- a/CMakePresets.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "version": 3, - "configurePresets": [ - { - "name": "default", - "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/${presetName}", - "toolchainFile": "${sourceDir}/cmake/starm-clang.cmake", - "cacheVariables": { - } - }, - { - "name": "Debug", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - { - "name": "Release", - "inherits": "default", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - } - ], - "buildPresets": [ - { - "name": "Debug", - "configurePreset": "Debug" - }, - { - "name": "Release", - "configurePreset": "Release" - } - ] -} \ No newline at end of file diff --git a/cmake/DetectToolchain.cmake b/cmake/DetectToolchain.cmake new file mode 100644 index 0000000..3cf6b67 --- /dev/null +++ b/cmake/DetectToolchain.cmake @@ -0,0 +1,12 @@ +if(NOT CMAKE_TOOLCHAIN_FILE) + # 检查 starm-clang 是否可用 + find_program(STARM_CLANG starm-clang) + + if(STARM_CLANG) + set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchain/starm-clang.cmake) + message(STATUS "已找到 starm-clang, 使用 starm-clang 工具链") + else() + set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Toolchain/gcc-arm-none-eabi.cmake) + message(STATUS "未找到 starm-clang 工具链, 使用 gcc-arm-none-eabi 工具链") + endif() +endif() \ No newline at end of file diff --git a/cmake/Toolchain/gcc-arm-none-eabi.cmake b/cmake/Toolchain/gcc-arm-none-eabi.cmake new file mode 100644 index 0000000..f07a7f2 --- /dev/null +++ b/cmake/Toolchain/gcc-arm-none-eabi.cmake @@ -0,0 +1,55 @@ +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) + +#set(CMAKE_C_COMPILER_FORCED TRUE) +#set(CMAKE_CXX_COMPILER_FORCED TRUE) +#set(CMAKE_C_COMPILER_ID GNU) +#set(CMAKE_CXX_COMPILER_ID GNU) + +# Some default GCC settings +# arm-none-eabi- must be part of path environment +set(TOOLCHAIN_PREFIX arm-none-eabi-) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}g++) +set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) +set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) + +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# MCU specific flags +set(TARGET_FLAGS "-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard ") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wpedantic -fdata-sections -ffunction-sections") +if (CMAKE_BUILD_TYPE MATCHES "Debug") + set(CMAKE_C_FLAGS_DEBUG "-O0 -g") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") +elseif (CMAKE_BUILD_TYPE MATCHES "Release") + set(CMAKE_C_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_FLAGS_RELEASE "-O3") +elseif (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") +elseif (CMAKE_BUILD_TYPE MATCHES "MinSizeRel") + set(CMAKE_C_FLAGS_MINSIZEREL "-Os") + set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os") +endif () + +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp -MMD -MP") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") + +set(CMAKE_C_LINK_FLAGS "${TARGET_FLAGS}") +set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --specs=nano.specs") + +set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Wl,--gc-sections") +set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--start-group -lc -lm -Wl,--end-group") +set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--print-memory-usage") + +set(CMAKE_CXX_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--start-group -lstdc++ -lsupc++ -Wl,--end-group") \ No newline at end of file diff --git a/cmake/starm-clang.cmake b/cmake/Toolchain/starm-clang.cmake similarity index 100% rename from cmake/starm-clang.cmake rename to cmake/Toolchain/starm-clang.cmake