Skip to content

Commit e580897

Browse files
committed
cleaned CMakeLists.txt, removed .elf from elf file (now is without extension), select debug or release from command line, updated readme
1 parent a9ea024 commit e580897

File tree

3 files changed

+37
-45
lines changed

3 files changed

+37
-45
lines changed

CMakeLists.txt

+23-33
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,33 @@
11
cmake_minimum_required(VERSION 3.0)
22

33
# project name
4-
project(bare_metal)
4+
project(baremetal)
55

66
# select linker script
77
set(LINKER_SCRIPT "ld/stm32f031x6.ld")
88

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+
915
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>
1024
-Wall
1125
-pedantic
1226
-Wextra
1327
-fstrict-volatile-bitfields
1428
-ffunction-sections
1529
)
1630

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-
4731
include_directories(
4832
${CMAKE_SOURCE_DIR}
4933
)
@@ -53,13 +37,19 @@ link_directories(
5337
)
5438

5539
# list of modules to build final firmware (without extension .c or .cpp)
56-
add_executable(${PROJECT_NAME}.elf
40+
add_executable(${PROJECT_NAME}
5741
src/main
5842
src/startup/startup
5943
src/startup/stack
6044
src/startup/handlers_cm
6145
)
6246

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})
6454

6555
include("cmake/flash.cmake")

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ Presented example is very simple "Hello blinky" program for STM32F0xx which blin
3636
```
3737
mkdir _build
3838
cd _build
39-
cmake -D CMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake ..
39+
cmake -D CMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake -D CMAKE_BUILD_TYPE=Release ..
4040
make
4141
```
4242

43-
or use `make bin`, `srec`, `hex`, `flash`, ...
43+
change `CMAKE_BUILD_TYPE=Debug` to build debug version.
44+
45+
You can use also `make bin`, `srec`, `hex`, `flash`, ...
4446

4547
## Change architecture
4648

cmake/flash.cmake

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# cmake script for generating binary and hex format and for flashing
22

33
add_custom_command(OUTPUT ${PROJECT_NAME}.srec
4-
DEPENDS ${PROJECT_NAME}.elf
5-
COMMAND ${CMAKE_OBJCOPY} -Osrec ${PROJECT_NAME}.elf ${PROJECT_NAME}.srec
4+
DEPENDS ${PROJECT_NAME}
5+
COMMAND ${CMAKE_OBJCOPY} -Osrec ${PROJECT_NAME} ${PROJECT_NAME}.srec
66
)
77
add_custom_command(OUTPUT ${PROJECT_NAME}.hex
8-
DEPENDS ${PROJECT_NAME}.elf
9-
COMMAND ${CMAKE_OBJCOPY} -Oihex ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex
8+
DEPENDS ${PROJECT_NAME}
9+
COMMAND ${CMAKE_OBJCOPY} -Oihex ${PROJECT_NAME} ${PROJECT_NAME}.hex
1010
)
1111
add_custom_command(OUTPUT ${PROJECT_NAME}.bin
12-
DEPENDS ${PROJECT_NAME}.elf
13-
COMMAND ${CMAKE_OBJCOPY} -Obinary ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin
12+
DEPENDS ${PROJECT_NAME}
13+
COMMAND ${CMAKE_OBJCOPY} -Obinary ${PROJECT_NAME} ${PROJECT_NAME}.bin
1414
)
1515
add_custom_command(OUTPUT ${PROJECT_NAME}.lst
16-
DEPENDS ${PROJECT_NAME}.elf
17-
COMMAND ${CMAKE_OBJDUMP} -S ${PROJECT_NAME}.elf > ${PROJECT_NAME}.lst
16+
DEPENDS ${PROJECT_NAME}
17+
COMMAND ${CMAKE_OBJDUMP} -S ${PROJECT_NAME} > ${PROJECT_NAME}.lst
1818
)
1919
add_custom_command(OUTPUT ${PROJECT_NAME}.sym
20-
DEPENDS ${PROJECT_NAME}.elf
21-
COMMAND ${CMAKE_NM} -C -l -n -S ${PROJECT_NAME}.elf > ${PROJECT_NAME}.sym
20+
DEPENDS ${PROJECT_NAME}
21+
COMMAND ${CMAKE_NM} -C -l -n -S ${PROJECT_NAME} > ${PROJECT_NAME}.sym
2222
)
2323

2424
add_custom_target(srec

0 commit comments

Comments
 (0)