diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d74715..67bd893 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.22) -include("cmake/gcc-arm-none-eabi.cmake") project(TronOneH7_Scaffold) +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) + # 启用编译命令以便于使用例如 clangd 进行索引 set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) # 启用对 ASM 和 C 语言的 CMake 支持 @@ -41,6 +42,8 @@ message("Build type: ${CMAKE_BUILD_TYPE}") # 创建可执行对象 add_executable(${CMAKE_PROJECT_NAME}) +include(CompileOptions) + # Add STM32CubeMX generated sources add_subdirectory(cmake/stm32cubemx) @@ -49,33 +52,6 @@ target_link_libraries(${CMAKE_PROJECT_NAME} stm32cubemx ) - -# 添加编译选项 -add_compile_options(-pipe -Wall -fmessage-length=0 # basic options - -ffunction-sections -fdata-sections -fno-common # optimize options -) -add_link_options(-pipe -Wl,--no-warn-rwx-segments # close RWX warning - -lc -lstdc++ -lm -lnosys # lib options - -Wl,--gc-sections -flto -specs=nano.specs -specs=nosys.specs # optimize options -) - -# 添加全局宏定义 -add_definitions( - -DUSE_HAL_DRIVER - -DARM_MATH_CM7 - -DARM_MATH_MATRIX_CHECK - -DARM_MATH_ROUNDING - -DARM_MATH_LOOPUNROLL - -DDISABLEFLOAT16 -) -# 添加目标编译选项 -target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE - -mthumb - # -mthumb-interwork - -mfpu=fpv5-d16 - -mfloat-abi=hard -) - # Add sources to executable target_sources(${CMAKE_PROJECT_NAME} PRIVATE User_Code/bsp/fdcan/bsp_fdcan.c diff --git a/cmake/CompileOptions.cmake b/cmake/CompileOptions.cmake new file mode 100644 index 0000000..bb836bd --- /dev/null +++ b/cmake/CompileOptions.cmake @@ -0,0 +1,26 @@ +add_compile_options( + -pipe -Wall -fmessage-length=0 # basic options + -ffunction-sections -fdata-sections -fno-common # optimize options +) +add_link_options( + -pipe -Wl,--no-warn-rwx-segments # close RWX warning + -lc -lstdc++ -lm -lnosys # lib options + -Wl,--gc-sections -flto -specs=nano.specs -specs=nosys.specs # optimize options +) + +# 添加宏定义 +target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE + -DUSE_HAL_DRIVER + -DARM_MATH_CM7 + -DARM_MATH_MATRIX_CHECK + -DARM_MATH_ROUNDING + -DARM_MATH_LOOPUNROLL + -DDISABLEFLOAT16 +) +# 添加目标编译选项 +target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE + -mthumb + # -mthumb-interwork + -mfpu=fpv5-d16 + -mfloat-abi=hard +) \ No newline at end of file diff --git a/cmake/Modules/.gitkeep b/cmake/Modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/cmake/gcc-arm-none-eabi.cmake b/cmake/gcc-arm-none-eabi.cmake deleted file mode 100644 index fb42d44..0000000 --- a/cmake/gcc-arm-none-eabi.cmake +++ /dev/null @@ -1,60 +0,0 @@ -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} -T \"${CMAKE_SOURCE_DIR}/MY_FLASH.ld\"") - - -set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --specs=nano.specs") - -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32H723XG_FLASH.ld\"") - -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