106 lines
3.7 KiB
CMake
106 lines
3.7 KiB
CMake
|
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}"
|
|||
|
)
|