1
1
cmake_minimum_required (VERSION 3.0)
2
2
3
3
# project name
4
- project (bare_metal )
4
+ project (baremetal )
5
5
6
6
# select linker script
7
7
set (LINKER_SCRIPT "ld/stm32f031x6.ld" )
8
8
9
+ # optimizations (-O0 -O1 -O2 -O3 -Os -Ofast -Og -flto)
10
+ set (CMAKE_C_FLAGS_DEBUG "-Og -g -DDEBUG" )
11
+ set (CMAKE_CXX_FLAGS_DEBUG "-Og -g" )
12
+ set (CMAKE_C_FLAGS_RELEASE "-Os -flto" )
13
+ set (CMAKE_CXX_FLAGS_RELEASE "-Os -flto" )
14
+
9
15
add_compile_options (
16
+ -mthumb -mcpu=cortex-m0 # define CPU type
17
+ $<$<COMPILE_LANGUAGE:C>:-std=c11>
18
+ $<$<COMPILE_LANGUAGE:CXX>:-std=c++14>
19
+ $<$<COMPILE_LANGUAGE:CXX>:-fms-extensions>
20
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
21
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
22
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-use-cxa-atexit>
23
+ $<$<COMPILE_LANGUAGE:CXX>:-fno-threadsafe-statics>
10
24
-Wall
11
25
-pedantic
12
26
-Wextra
13
27
-fstrict-volatile-bitfields
14
28
-ffunction-sections
15
29
)
16
30
17
- # define compiler options more info in: gcc-arm directory: share/doc/gcc-arm-none-eabi/readme.txt
18
- set (CPU_OPTIONS "${CPU_OPTIONS} -mthumb -mcpu=cortex-m0" )
19
-
20
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CPU_OPTIONS} " )
21
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11" )
22
-
23
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_OPTIONS} " )
24
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14" )
25
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fms-extensions" )
26
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions" )
27
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti" )
28
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-use-cxa-atexit" )
29
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics" )
30
-
31
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${LINKER_SCRIPT} " )
32
- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostartfiles" )
33
- # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostdlib")
34
-
35
- # optimizations (-O0 -O1 -O2 -O3 -Os -Ofast -Og -flto)
36
- set (OPTIMIZATION_DEBUG "-Og" )
37
- set (OPTIMIZATION_RELEASE "-O2 -flto" )
38
-
39
- set (CMAKE_C_FLAGS_DEBUG "${OPTIMIZATION_DEBUG} -g -DDEBUG" )
40
- set (CMAKE_CXX_FLAGS_DEBUG "${OPTIMIZATION_DEBUG} -g -DDEBUG" )
41
- set (CMAKE_C_FLAGS_RELEASE "${OPTIMIZATION_RELEASE} " )
42
- set (CMAKE_CXX_FLAGS_RELEASE "${OPTIMIZATION_RELEASE} " )
43
-
44
- # select build type, can be Debug, Release
45
- set (CMAKE_BUILD_TYPE Debug)
46
-
47
31
include_directories (
48
32
${CMAKE_SOURCE_DIR}
49
33
)
@@ -53,13 +37,19 @@ link_directories(
53
37
)
54
38
55
39
# list of modules to build final firmware (without extension .c or .cpp)
56
- add_executable (${PROJECT_NAME} .elf
40
+ add_executable (${PROJECT_NAME}
57
41
src/main
58
42
src/startup/startup
59
43
src/startup/stack
60
44
src/startup/handlers_cm
61
45
)
62
46
63
- set_target_properties (${PROJECT_NAME} .elf PROPERTIES LINK_DEPENDS ${CMAKE_SOURCE_DIR} /${LINKER_SCRIPT} )
47
+ target_link_libraries (${PROJECT_NAME}
48
+ -T${LINKER_SCRIPT}
49
+ -nostartfiles
50
+ # -nostdlib
51
+ )
52
+
53
+ set_property (TARGET ${PROJECT_NAME} PROPERTY LINK_DEPENDS ${CMAKE_SOURCE_DIR} /${LINKER_SCRIPT} )
64
54
65
55
include ("cmake/flash.cmake" )
0 commit comments