air32_cmake/CMakeLists.txt

106 lines
3.7 KiB
CMake
Raw Normal View History

2023-11-06 00:34:43 +08:00
cmake_minimum_required(VERSION 3.20)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_policy(SET CMP0123 NEW)
# 项目名称
set(PROJECT_NAME demo)
# 设定芯片类型
set(CMAKE_SYSTEM_PROCESSOR Cortex-M3)
set(CMAKE_SYSTEM_ARCH Cortex-M3)
# 设置语言标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)
# 设置编译器 C 的编译器
set(CMAKE_C_COMPILER armclang.exe)
set(CMAKE_C_COMPILER_WORKS TRUE)
# 设置编译器 C++ 的编译器
set(CMAKE_CXX_COMPILER armclang.exe)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
# 设置 ASM 的编译器(不设置配合 -masm=auto 使用)
set(CMAKE_ASM_COMPILER armclang.exe)
# 指明 ASM 编译器,配合 第二种 CMAKE_ASM_FLAGS_INIT 方式使用
#set(CMAKE_ASM_COMPILER armasm.exe)
#set(CMAKE_ASM_COMPILER_WORKS TRUE)
# 设置链接器
set(CMAKE_C_LINK_EXECUTABLE armlink.exe)
set(CMAKE_ASM_LINK_EXECUTABLE armlink.exe)
set(CMAKE_CXX_LINK_EXECUTABLE armlink.exe)
# 设置分散加载文件由keil生成
set(SECTIONS_SCRIPT_PATH ${CMAKE_HOME_DIRECTORY}/air32.sct)
# 设置与芯片对应的 --target 编译选项
set(C_TARGET_FLAG --target=arm-arm-none-eabi)
set(ASM_TARGET_FLAG --target=arm-arm-none-eabi)
# 设置与芯片对应的 cpu 编译选项
set(LINKER_TARGET_FLAG --cpu=${CMAKE_SYSTEM_PROCESSOR})
set(COMPILE_RULE_FLAG "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
# 设置 C 编译器选项(这里就把MDK中的 C/C++ 分页里最下边一栏的属性贴进来)
# 参数 -w 表示忽略所有警告,不然要配具体忽略哪些警告,尽管贴过来也行,但是太乱
# 优化选项 -O 有 1~3 -Os 是平衡 -Oz 是最小体积
#set(CMAKE_C_FLAGS_INIT "${C_TARGET_FLAG} ${COMPILE_RULE_FLAG} \
# -xc -std=c99 -fno-rtti -funsigned-char -fshort-enums -fshort-wchar \
# -gdwarf-4 -O0 -ffunction-sections")
set(CMAKE_C_FLAGS_INIT "${C_TARGET_FLAG} ${COMPILE_RULE_FLAG} \
-xc -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -O0 -ffunction-sections")
# 设置 C++ 编译器选项(没有用到 c++ 所以不用配置)
#set(CMAKE_CXX_FLAGS_INIT ${CMAKE_C_FLAGS_INIT})
# 设置ASM编译器选项
set(CMAKE_ASM_FLAGS_INIT "${ASM_TARGET_FLAG} ${COMPILE_RULE_FLAG} -masm=auto -gdwarf-4 ")
# 设置链接器选项
# 使用忽略所有警告的配置时没有 --map 及其之后的内容, 这里根据需要保留了一些信息,在 demo.map 中可以看到
set(CMAKE_EXE_LINKER_FLAGS_INIT " \
${LINKER_TARGET_FLAG} \
--library_type=microlib \
--strict \
--scatter ${SECTIONS_SCRIPT_PATH} \
--info sizes --info totals --info unused --info veneers \
--summary_stderr \
--info summarysizes"
)
# 头文件搜索路径
include_directories(src/bsp src/Libraries/AIR32F10xLib/inc src/Libraries/CMSIS/Include
D:/Keil_v5/Packs/Keil/AIR32F103_DFP/1.1.9/Device/Include
)
# 宏定义
add_definitions(-DAIR32F10X_MD -D__MICROLIB)
# 源文件
file(GLOB_RECURSE SOURCES src/bsp/*.* src/Libraries/AIR32F10xLib/*.*)
file(GLOB_RECURSE SOURCES ${SOURCES} src/Libraries/STARTUP/arm/startup_air32f10x.s)
#file(GLOB_RECURSE SOURCES ${SOURCES} src/Libraries/STARTUP/gcc/startup_air32f10x.s)
project(${PROJECT_NAME} C CXX ASM)
# 生成目标
add_executable(${PROJECT_NAME} ${SOURCES} ${LINKER_SCRIPT})
# 生成hex和bin文件
set(ARMCC_FROMELF fromelf.exe)
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
set(ELF_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.elf)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${ARMCC_FROMELF} --i32 --output=${HEX_FILE} ${ELF_FILE}
COMMAND ${ARMCC_FROMELF} --bin --output=${BIN_FILE} ${ELF_FILE}
#COMMENT "Building ${HEX_FILE} and ${BIN_FILE}"
)