Files
lishanpi/CMakeLists.txt
T
hm 851c3db56e refactor: 工程清理,打造基础模板
- 删除冗余文件:main_backup/main_minimal/main_full、GD32F4xx_AddOn_Temp/、GD32F4xx_Custom_Backup/、GD32F4xx_Official/
- 删除无关工具:read_pdf.py、openocd_test.txt、version.txt
- 重构 main.cpp:去除 STEP 机制,简化为线性启动流程
- 清理 CMakeLists.txt:移除 usart0.c 引用、死代码、冗余 REMOVE_ITEM
- 修正 config.h SystemCoreClock 为 168MHz
- 修复 gd32f4xx_it.cpp 中已删除的 main.h 引用
2026-04-26 16:38:14 +08:00

153 lines
4.6 KiB
CMake

cmake_minimum_required(VERSION 3.16)
# Cross-compilation settings
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project(LSPi_Project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(MCU_TYPE GD32F470ZGT6)
# Define MCU for GD32 library
add_definitions(-DGD32F470)
set(CPU_FLAGS "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
set(COMMON_FLAGS "${CPU_FLAGS} -Wall -Wextra -Wno-unused-parameter -ffunction-sections -fdata-sections -fno-common")
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -std=gnu11")
set(CMAKE_CXX_FLAGS "${COMMON_FLAGS} -std=gnu++14")
set(CMAKE_ASM_FLAGS "${CPU_FLAGS} -x assembler-with-cpp")
set(CMAKE_EXE_LINKER_FLAGS "${CPU_FLAGS} -Wl,--gc-sections -specs=nano.specs -specs=nosys.specs -T${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Ld/Link.ld")
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
# Library check macro (from download-lib skill template)
macro(check_required_library lib_name lib_path)
if(NOT EXISTS ${lib_path})
message(WARNING "Missing library: ${lib_name}")
message(STATUS "Please run: download-lib --chip-type gd32 --chip-series GD32F470")
set(${lib_name}_FOUND FALSE)
else()
set(${lib_name}_FOUND TRUE)
message(STATUS "Found library: ${lib_name}")
endif()
endmacro()
# Check GD32 library
check_required_library(GD32F4XX_LIB "${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx")
include_directories(
app
app/tasks
bsp
config
drv/adc
drv/i2c
drv/spi
drv/uart
drv/timer
drv/exmc
drv/bus
drv/gpio
drv/system
bsp/device/sdcard
bsp/device/led
bsp/device/lcd
bsp/device/touch
bsp/device/sdram
bsp/device/flash
libs/common
libs/CMSIS
libs/thirdparty
)
if(GD32F4XX_LIB_FOUND)
# Add GD32 library include paths
include_directories(
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Include
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/CMSIS
)
message(STATUS "GD32 library include path added")
else()
message(FATAL_ERROR "GD32F4xx library not found. Cannot continue.")
endif()
# Application sources (both .c and .cpp)
file(GLOB_RECURSE APP_SOURCES
app/*.cpp
bsp/*.cpp
drv/adc/*.cpp
drv/i2c/*.cpp
drv/spi/*.cpp
drv/uart/*.cpp
drv/timer/*.cpp
drv/exmc/*.cpp
drv/bus/*.cpp
drv/gpio/*.cpp
drv/system/*.cpp
bsp/device/sdcard/*.cpp
bsp/device/led/*.cpp
bsp/device/lcd/*.cpp
bsp/device/touch/*.cpp
bsp/device/sdram/*.cpp
bsp/device/flash/*.cpp
)
# GD32 standard peripheral library sources
file(GLOB GD32_SOURCES
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Source/*.c
)
# Assembly startup file
set(ASSEMBLY_SOURCES
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Startup/startup_gd32f450_470.S
)
# Combine all sources
set(ALL_SOURCES ${APP_SOURCES} ${GD32_SOURCES} ${ASSEMBLY_SOURCES})
add_executable(${PROJECT_NAME} ${ALL_SOURCES})
target_compile_options(${PROJECT_NAME} PRIVATE -Os)
set_target_properties(${PROJECT_NAME} PROPERTIES
SUFFIX ".elf"
OUTPUT_NAME "${PROJECT_NAME}"
)
# Generate .hex and .bin files after linking
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND arm-none-eabi-objcopy -O ihex ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex
COMMAND arm-none-eabi-objcopy -O binary -S ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin
COMMAND ${CMAKE_COMMAND} -E echo "Generated: ${PROJECT_NAME}.hex ${PROJECT_NAME}.bin"
COMMENT "Generating .hex and .bin files"
)
# Flash programming option
set(FLASH_TOOL "auto" CACHE STRING "Programming tool to use (openocd, jlink, pyocd, auto)")
set_property(CACHE FLASH_TOOL PROPERTY STRINGS "openocd" "jlink" "pyocd" "auto")
# Custom target for flashing
add_custom_target(flash
DEPENDS ${PROJECT_NAME}
COMMAND ${CMAKE_COMMAND} -E echo "Flashing ${PROJECT_NAME}.elf using ${FLASH_TOOL}..."
COMMAND python ${CMAKE_SOURCE_DIR}/tools/flash.py --tool ${FLASH_TOOL} --elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf --hex ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.hex --bin ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin
COMMENT "Programming ${PROJECT_NAME} to GD32F470ZGT6"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
# Custom target for flashing with OpenOCD directly
add_custom_target(flash-openocd
DEPENDS ${PROJECT_NAME}
COMMAND ${CMAKE_COMMAND} -E echo "Flashing ${PROJECT_NAME}.elf with OpenOCD..."
COMMAND openocd -f ${CMAKE_SOURCE_DIR}/tools/openocd_gd32f470.cfg -c "program_elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf" -c "shutdown"
COMMENT "Programming ${PROJECT_NAME} via OpenOCD"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)