generated from hulk/gd32e23x_template_cmake_vscode
工程编译与开发环境(参照 gd32e23x_template_cmake_vscode 模板) - cmake/arm-none-eabi-gcc.cmake:硬编码工具链路径改为 GD32_GCC_BIN 环境变量 / -DTOOLCHAIN_DIRECTORY 参数,与模板逐字一致 - .vscode:launch/tasks/settings/extensions 对齐模板,烧录与调试全部 读取 GD32_GCC_BIN / GD32_OPENOCD_BIN / GD32_OPENOCD_SCRIPTS 环境变量; 新增 J-Link 调试配置与 flash/reset/erase.jlink 脚本 - CMakeLists.txt:POST_BUILD 增加 Application/Application.hex 生成 (J-Link 烧录脚本 loadfile 依赖) - 验证:Debug / Release 编译通过(本机 ARM GCC 15.2.1) Bootloader 布局适配(与旧版独立镜像不兼容,升级需整片烧录一次) - LD/gd32e23x_flash.ld:FLASH ORIGIN=0x08002000, LENGTH=54K - Src/system_gd32e23x.c:VECT_TAB_OFFSET=0x2000——Bootloader 不写 VTOR,APP 必须自设向量表,否则中断落回 Bootloader 向量表 - 验证:.vectors 链接于 0x08002000,固件 12164B(54KB 上限 22%) 驱动修复 - Src/ldc1612.c:ldc1612_config_single_channel 各步骤 I2C 写入检查 返回值,失败立即返回错误(原审查项 L3) 文档 - README:重写本地编译/烧录/调试说明,新增"固件布局与 Bootloader"章节
95 lines
3.3 KiB
CMake
95 lines
3.3 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/GD32E23x_standard_peripheral)
|
|
|
|
# 业务代码源文件
|
|
set(TARGET_SRC
|
|
# Core
|
|
Src/gd32e23x_it.c
|
|
Src/main.c
|
|
Src/systick.c
|
|
Src/system_gd32e23x.c
|
|
|
|
# Startup
|
|
SDK/CMSIS/startup/startup_gd32e23x.S
|
|
|
|
# User
|
|
Src/syscalls.c
|
|
|
|
# Add new source files here
|
|
Src/uart.c
|
|
Src/led.c
|
|
Src/uart_ring_buffer.c
|
|
Src/command.c
|
|
Src/i2c.c
|
|
Src/ldc1612.c
|
|
Src/tmp112.c
|
|
Src/board_config.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
|
|
|
|
)
|
|
|
|
# 链接脚本
|
|
target_link_options(${PROJECT_NAME} PRIVATE
|
|
-T${CMAKE_SOURCE_DIR}/LD/gd32e23x_flash.ld -Xlinker
|
|
-L${CMAKE_SOURCE_DIR}/LD
|
|
)
|
|
|
|
# 生成 map 文件等
|
|
target_link_options(${PROJECT_NAME} PRIVATE
|
|
-Wl,-Map=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Application.map
|
|
)
|
|
|
|
# 链接SDK库
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE GD32E23x_standard_peripheral)
|
|
|
|
# 生成 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.
|
|
# ========================= |