-
Notifications
You must be signed in to change notification settings - Fork 1
/
Cmakelists.txt
136 lines (113 loc) · 4.46 KB
/
Cmakelists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# #############################################################################
# ################# CMake Template (CUSTOM) ######################
# ################# Copyright (c) 2022 Hello World ######################
# #############################################################################
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.22)
# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# project settings
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
# ########################## USER CONFIG SECTION ##############################
# set up proj
project(infantry C CXX ASM) # TODO
set(CMSISDSP infantry) # if using DSP, modify your_dsp_path here
# e.g. set(CMSISDSP Drivers/CMSIS/DSP)
# ! rebuild or use command line `cmake .. -D` to switch option
# floating point settings
option(ENABLE_HARD_FP "enable hard floating point" OFF) # TODO
option(ENABLE_SOFT_FP "enable soft floating point" OFF) # TODO
option(USE_NEW_VERSION_DSP "DSP version >= 1.10.0" ON) # TODO
# add inc and src here
include_directories(
Core/Inc
Drivers/STM32F4xx_HAL_Driver/Inc
Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
Drivers/CMSIS/Device/ST/STM32F4xx/Include
Drivers/CMSIS/Include
if(ENABLE_HARD_FP)
if(USE_NEW_VERSION_DSP)
${CMSISDSP}/Include/dsp
${CMSISDSP}/Include
${CMSISDSP}/PrivateInclude
else()
${CMSISDSP}/Include
endif()
endif()
# TODO: 添加 .h 所在文件夹路径(直至最内层)
./infantry
)
# !! Keep only sub folders required to build and use CMSIS-DSP Library.
# !! If DSP version >= 1.10, for all paths including DSP folders, plz add [^a] to filter DSP files.
# !! e.g. your_dsp_path = Drivers/CMSIS/DSP, use "Drivers/[^a]*.*" "${CMSISDSP}/[^a]*.*"
file(GLOB_RECURSE SOURCES
"Core/*.*"
"Drivers/*.*"
# "${CMSISDSP}/*.*" # uncomment this line when using DSP
# TODO: 添加 自建 文件夹下的所有文件(主要是.c)
"./infantry/*.*"
)
# #############################################################################
if(ENABLE_HARD_FP)
message(STATUS "Use FPU")
if(USE_NEW_VERSION_DSP)
message(STATUS "DSP version >= 1.10.0")
add_compile_definitions(
ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
else()
message(STATUS "DSP version < 1.10.0")
add_compile_definitions(
ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING;__FPU_PRESENT=1U)
endif()
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
else()
message(STATUS "Unuse FPU")
endif()
if(ENABLE_SOFT_FP)
add_compile_options(-mfloat-abi=soft)
endif()
add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
# Enable assembler files preprocessing
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
message(STATUS "Maximum optimization for speed")
add_compile_options(-Ofast)
elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
message(STATUS "Maximum optimization for speed, debug info included")
add_compile_options(-Ofast -g)
elseif("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
message(STATUS "Maximum optimization for size")
add_compile_options(-Os)
else()
message(STATUS "Minimal optimization, debug info included")
add_compile_options(-Og -g)
endif()
add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F407xx)
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F407IGHX_FLASH.ld)
add_link_options(
-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map
)
add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(
TARGET ${PROJECT_NAME}.elf
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf>
${BIN_FILE}
COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")