forked from Monstatek/M1
-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
145 lines (118 loc) · 4.2 KB
/
Copy pathCMakeLists.txt
File metadata and controls
145 lines (118 loc) · 4.2 KB
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
137
138
139
140
141
142
143
144
145
# See COPYING.txt for license details.
cmake_minimum_required(VERSION 3.22)
#
# This file is generated only once,
# and is not re-generated if converter is called multiple times.
#
# User is free to modify the file as much as necessary
#
# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
# Define the build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
# Set the project name
set(CMAKE_PROJECT_NAME M1_v0800_C3.12)
# C3 fork revision — must match M1_C3_REVISION in m1_fw_update_bl.h
set(M1_C3_REVISION 12)
# Include toolchain file
include("cmake/gcc-arm-none-eabi.cmake")
# Enable compile command to ease indexing with e.g. clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
# Core project settings
project(${CMAKE_PROJECT_NAME})
# Resolve toolchain utilities to full paths so post-build steps work
# regardless of PATH at build time (bare names from toolchain file fail
# inside nested cmd.exe / ninja subprocesses)
get_filename_component(_TC_BIN "${CMAKE_C_COMPILER}" DIRECTORY)
find_program(TOOL_SIZE ${TOOLCHAIN_PREFIX}size HINTS "${_TC_BIN}" REQUIRED)
find_program(TOOL_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy HINTS "${_TC_BIN}" REQUIRED)
find_program(TOOL_OBJDUMP ${TOOLCHAIN_PREFIX}objdump HINTS "${_TC_BIN}" REQUIRED)
set(CMAKE_SIZE "${TOOL_SIZE}")
set(CMAKE_OBJCOPY "${TOOL_OBJCOPY}")
set(CMAKE_OBJDUMP "${TOOL_OBJDUMP}")
# Python is needed for the CRC injection post-build step
find_package(Python3 COMPONENTS Interpreter REQUIRED)
# Enable CMake support for ASM and C languages
enable_language(C ASM)
message("Build type: " ${CMAKE_BUILD_TYPE})
# Create an executable object type
add_executable(${CMAKE_PROJECT_NAME})
# Add STM32CubeMX generated sources
add_subdirectory(cmake/m1_01)
# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
# Add user defined library search paths
)
# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
# Add user sources here
)
# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
# Add user defined include paths
)
# Add project symbols (macros)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
# Add user defined symbols
)
# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}
m1_01
# Add user defined libraries
)
# Specify the output ELF file
set(TARGET_ELF "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf")
# Specify the output BIN file
set(TARGET_BIN "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.bin")
# Command to display memory usage
add_custom_command(
COMMAND ${CMAKE_COMMAND} -E echo "Memory usage:"
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_SIZE} ${TARGET_ELF}
#COMMENT "Memory usage:"
)
# Command to generate .list file
add_custom_command(
COMMAND ${CMAKE_COMMAND} -E echo "Generating list file ${CMAKE_PROJECT_NAME}.list"
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_OBJDUMP}
-h -S ${TARGET_ELF} > ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.list
#COMMENT "Generating .list file"
)
# Command to generate .bin file
add_custom_command(
COMMAND ${CMAKE_COMMAND} -E echo "Generating bin file ${CMAKE_PROJECT_NAME}.bin"
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY}
-O binary ${TARGET_ELF} ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.bin
#COMMENT "Generating .bin file"
)
# Command to generate .hex file
add_custom_command(
COMMAND ${CMAKE_COMMAND} -E echo "Generating hex file ${CMAKE_PROJECT_NAME}.hex"
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY}
-O ihex ${TARGET_ELF} ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.hex
#COMMENT "Generating .hex file"
)
# Command to inject CRC32 + C3 metadata into the .bin file
# Also generates a stock-compatible SD card binary (_sdcard.bin)
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Injecting CRC + C3 metadata into ${CMAKE_PROJECT_NAME}_wCRC.bin"
COMMAND ${Python3_EXECUTABLE}
${CMAKE_SOURCE_DIR}/tools/append_crc32.py
${TARGET_BIN}
--output ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}_wCRC.bin
--c3-revision ${M1_C3_REVISION}
--verbose
)