176 lines
7.9 KiB
CMake
176 lines
7.9 KiB
CMake
# 指定CMake最低版本 [5,7](@ref)
|
|
cmake_minimum_required(VERSION 3.22)
|
|
|
|
# Setup compiler settings
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
set(CMAKE_C_EXTENSIONS ON)
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS ON)
|
|
|
|
# Define the build type
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Debug")
|
|
endif()
|
|
|
|
# 定义项目名称(可指定语言)[3,8](@ref)
|
|
set(CMAKE_PROJECT_NAME CMakeDemo)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
|
|
|
|
# 核心工程设置
|
|
project(${CMAKE_PROJECT_NAME})
|
|
message("Build type: " ${CMAKE_BUILD_TYPE})
|
|
|
|
# 允许使用C, C++和ASM
|
|
enable_language(C CXX ASM)
|
|
|
|
# 工程宏定义
|
|
set(Defines_Syms
|
|
GD32H7XX
|
|
$<$<CONFIG:Debug>:DEBUG>
|
|
)
|
|
|
|
# 创建可执行对象
|
|
add_executable(${CMAKE_PROJECT_NAME})
|
|
|
|
# 源文件
|
|
set(ASM_SOURCE_FILES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS/GD/GD32H7xx/Source/GCC/startup_gd32h7xx.S
|
|
)
|
|
|
|
set(APP_SOURCE_FILES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS/GD/GD32H7xx/Source/system_gd32h7xx.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/App/Src/gd32h7xx_it.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/App/Src/systick.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/App/Src/main.c
|
|
)
|
|
|
|
################################ Firmware ################################
|
|
set(FIRMWARE_SOURCE_FILE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_adc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_adc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_can.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cau_aes.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cau.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cau_des.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cau_tdes.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cmp.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_cpdm.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_crc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_ctc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_dac.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_dbg.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_dci.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_dma.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_edout.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_efuse.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_enet.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_exmc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_exti.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_fac.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_fmc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_fwdgt.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_gpio.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_hau.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_hau_sha_md5.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_hpdf.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_hwsem.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_i2c.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_ipa.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_lpdts.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_mdio.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_mdma.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_misc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_ospi.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_ospim.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_pmu.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_rameccmu.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_rcu.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_rspdif.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_rtc.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_rtdec.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_sai.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_sdio.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_spi.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_syscfg.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_timer.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_tli.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_tmu.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_trigsel.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_trng.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_usart.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_vref.c
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Source/gd32h7xx_wwdgt.c
|
|
)
|
|
|
|
# 包含路径
|
|
set(APP_INCLUDE_DIR
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/GD32H7xx_standard_peripheral/Include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS/GD/GD32H7xx/Include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/Firmware/CMSIS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/App/Inc
|
|
)
|
|
|
|
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
|
${FIRMWARE_INCLUDE_DIR}
|
|
${APP_INCLUDE_DIR}
|
|
)
|
|
|
|
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
|
|
${ASM_SOURCE_FILES}
|
|
${APP_SOURCE_FILES}
|
|
${FIRMWARE_SOURCE_FILE}
|
|
)
|
|
|
|
|
|
# 链接库目录
|
|
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
|
)
|
|
|
|
|
|
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
|
|
${Defines_Syms}
|
|
)
|
|
|
|
|
|
# 构建后反汇编
|
|
add_custom_command(
|
|
TARGET ${CMAKE_PROJECT_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_OBJDUMP} -d -S $<TARGET_FILE:${CMAKE_PROJECT_NAME}> > ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.asm
|
|
COMMENT "反汇编中..."
|
|
VERBATIM
|
|
)
|
|
|
|
# 构建后导出符号表
|
|
add_custom_command(
|
|
TARGET ${CMAKE_PROJECT_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_NM} -n $<TARGET_FILE:${CMAKE_PROJECT_NAME}> > ${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}_symbol_table.txt
|
|
COMMENT "导出符号表中..."
|
|
VERBATIM
|
|
)
|
|
|
|
# 构建后输出Hex和bin
|
|
add_custom_command(
|
|
TARGET ${CMAKE_PROJECT_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.hex
|
|
COMMENT "输出Hex文件..."
|
|
VERBATIM
|
|
)
|
|
add_custom_command(
|
|
TARGET ${CMAKE_PROJECT_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.bin
|
|
COMMENT "输出Bin文件..."
|
|
VERBATIM
|
|
)
|
|
|
|
# Remove wrong libob.a library dependency when using cpp files
|
|
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob)
|
|
|