generated from hulk/gd32f4xx_template_cmake_vscode
124 lines
4.8 KiB
CMake
124 lines
4.8 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
||
|
||
# 包含项目配置
|
||
include(${CMAKE_SOURCE_DIR}/cmake/project_config.cmake)
|
||
include(${CMAKE_SOURCE_DIR}/cmake/project.cmake)
|
||
|
||
project(${PROJECT_NAME} LANGUAGES C CXX ASM)
|
||
|
||
# Generate version header from CMake version variables
|
||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated)
|
||
configure_file(${CMAKE_SOURCE_DIR}/cmake/version.h.in ${CMAKE_BINARY_DIR}/generated/version.h @ONLY)
|
||
|
||
# 添加SDK库
|
||
add_subdirectory(SDK/CMSIS)
|
||
add_subdirectory(SDK/GD32F4xx_standard_peripheral)
|
||
add_subdirectory(SDK/SEGGER_RTT)
|
||
# USB 库默认不编译,需要时:cmake --preset Debug -DGD32_ENABLE_USB=ON,
|
||
# 并在下方链接区追加 target_link_libraries(${PROJECT_NAME} PRIVATE GD32F4xx_usb_library)
|
||
add_subdirectory(SDK/GD32F4xx_usb_library)
|
||
|
||
# 业务代码源文件
|
||
set(TARGET_SRC
|
||
# Core
|
||
Src/gd32f4xx_it.c
|
||
Src/main.c
|
||
Src/systick.c
|
||
Src/system_gd32f4xx.c
|
||
|
||
# Startup
|
||
SDK/CMSIS/startup/startup_gd32f405_425.S
|
||
|
||
# User
|
||
Src/syscalls.c
|
||
|
||
# Add new source files here
|
||
Src/uart.c
|
||
Src/led.c
|
||
Src/uart_ring_buffer.c
|
||
Src/rs485.c
|
||
Src/ntc.c
|
||
Src/command.c
|
||
|
||
# TODO: 待从 GD32E23x 工程移植后启用
|
||
# Src/i2c.c
|
||
)
|
||
|
||
# 设置输出目录
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Application)
|
||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Application)
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Application)
|
||
|
||
add_executable(${PROJECT_NAME} ${TARGET_SRC})
|
||
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Application)
|
||
project_add_target_properties(${PROJECT_NAME})
|
||
|
||
# 头文件路径
|
||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||
${CMAKE_SOURCE_DIR}/Inc
|
||
${CMAKE_BINARY_DIR}/generated
|
||
|
||
# Add new include directories here, e.g. ${CMAKE_SOURCE_DIR}/Application/User/Inc
|
||
|
||
)
|
||
|
||
# 按 GD32_FLASH_CAPACITY 选择链接脚本与容量宏(cmake/project_config.cmake 中定义)
|
||
if(GD32_FLASH_CAPACITY STREQUAL "xE")
|
||
set(GD32_FLASH_LD "gd32f405_407_xE_flash.ld")
|
||
set(GD32_FLASH_SIZE_KB 512)
|
||
elseif(GD32_FLASH_CAPACITY STREQUAL "xG")
|
||
set(GD32_FLASH_LD "gd32f405_407_xG_flash.ld")
|
||
set(GD32_FLASH_SIZE_KB 1024)
|
||
elseif(GD32_FLASH_CAPACITY STREQUAL "xK")
|
||
set(GD32_FLASH_LD "gd32f405_407_xK_flash.ld")
|
||
set(GD32_FLASH_SIZE_KB 2048)
|
||
else()
|
||
message(FATAL_ERROR "Invalid GD32_FLASH_CAPACITY='${GD32_FLASH_CAPACITY}', expected xE/xG/xK")
|
||
endif()
|
||
message(STATUS "Target flash capacity: ${GD32_FLASH_CAPACITY} (${GD32_FLASH_SIZE_KB} KB), LD: ${GD32_FLASH_LD}")
|
||
|
||
# 链接脚本
|
||
target_link_options(${PROJECT_NAME} PRIVATE
|
||
-T${CMAKE_SOURCE_DIR}/LD/${GD32_FLASH_LD} -Xlinker
|
||
-L${CMAKE_SOURCE_DIR}/LD
|
||
)
|
||
|
||
# 容量宏(代码中如需按容量分支使用 GD32_FLASH_SIZE_KB)
|
||
target_compile_definitions(${PROJECT_NAME} PRIVATE GD32_FLASH_SIZE_KB=${GD32_FLASH_SIZE_KB})
|
||
|
||
# 生成 map 文件等
|
||
target_link_options(${PROJECT_NAME} PRIVATE
|
||
-Wl,-Map=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Application.map
|
||
-Wl,--no-warn-rwx-segments
|
||
)
|
||
|
||
# 链接SDK库
|
||
target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS)
|
||
target_link_libraries(${PROJECT_NAME} PRIVATE GD32F4xx_standard_peripheral)
|
||
target_link_libraries(${PROJECT_NAME} PRIVATE SEGGER_RTT)
|
||
|
||
# 生成 bin/hex/list 文件名格式:[工程名_版本号_编译条件_编译日期]
|
||
set(OUTPUT_PREFIX "${PROJECT_NAME}_${VERSION}_${BUILD_VARIANT}_${BUILD_DATE}")
|
||
|
||
add_custom_command(TARGET ${PROJECT_NAME}
|
||
POST_BUILD
|
||
COMMAND echo -- Running Post Build Commands
|
||
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_PREFIX}.hex
|
||
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE_DIR:${PROJECT_NAME}>/Application.hex
|
||
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_PREFIX}.bin
|
||
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${PROJECT_NAME}>
|
||
COMMAND ${CMAKE_OBJDUMP} -h -S $<TARGET_FILE:${PROJECT_NAME}> > ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_PREFIX}.list
|
||
COMMAND ${CMAKE_SIZE} --format=berkeley $<TARGET_FILE:${PROJECT_NAME}> > ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_PREFIX}.bsz
|
||
COMMAND ${CMAKE_SIZE} --format=sysv -x $<TARGET_FILE:${PROJECT_NAME}> > ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_PREFIX}.ssz
|
||
)
|
||
|
||
# =========================
|
||
# Tips for project maintainers:
|
||
# 1. If you add new source files (e.g. Src/my_module.c), add them to TARGET_SRC above.
|
||
# 2. If you add new header files or directories, add them to target_include_directories above.
|
||
# 3. If you add new SDK modules, use add_subdirectory(SDK/YourModule) and link with target_link_libraries.
|
||
# 4. 换用其它型号时:修改 cmake/project.cmake 与 SDK/GD32F4xx_standard_peripheral/CMakeLists.txt 中的
|
||
# GD32F405 宏、TARGET_SRC 中的启动文件(startup_gd32f405_425.S / startup_gd32f407_427.S /
|
||
# startup_gd32f450_470.S)以及上面的链接脚本(LD/gd32f405_407_xE_flash.ld 等)。
|
||
# =========================
|