Skip to content

Commit 6591736

Browse files
massonalfpistm
authored andcommitted
feat: Implemented board selection
Including: - parsing boards.txt on-demand - generating a CMake "database" - wrapping the use of the database for easy use - acting in the core on the result of the selected board
1 parent f701aee commit 6591736

File tree

528 files changed

+28495
-48
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

528 files changed

+28495
-48
lines changed

CI/update/templates/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,10 @@ target_include_directories({{ target }} PUBLIC
1010
{{ includedir }}
1111
)
1212
{% endif %}
13+
14+
target_link_libraries({{ target }} PUBLIC
15+
core_config
16+
{% for lib in extra_libs%}
17+
{{ lib }}
18+
{% endfor %}
19+
)

CI/update/templates/boards_db.cmake

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{% for pnum, config in allcfg | dictsort %}
2+
# {{pnum}}
3+
# -----------------------------------------------------------------------------
4+
5+
set({{pnum}}_VARIANT_PATH "${CMAKE_CURRENT_LIST_DIR}/../variants/{{config.build.variant}}")
6+
set({{pnum}}_MAXSIZE {{config.upload.maximum_size}})
7+
set({{pnum}}_MAXDATASIZE {{config.upload.maximum_data_size}})
8+
set({{pnum}}_MCU {{config.build.mcu}})
9+
add_library({{pnum}} INTERFACE)
10+
target_compile_options({{pnum}} INTERFACE
11+
"SHELL:{{config.build.extra_flags}}"
12+
"SHELL:{{config.build.peripheral_pins}}"
13+
"SHELL:{{config.build.startup_file}}"
14+
"SHELL:{{config.build.flags.fp}}"
15+
"SHELL:{{config.build.startup_file}}"
16+
-mcpu={{ "${" }}{{pnum}}_MCU{{ "}" }}
17+
)
18+
target_compile_definitions({{pnum}} INTERFACE
19+
"{{config.build.series}}"
20+
"ARDUINO_{{config.build.board}}"
21+
"BOARD_NAME=\"{{config.build.board}}\""
22+
"BOARD_ID={{config.build.board}}"
23+
"VARIANT_H=\"{{config.build.variant_h or "variant_generic.h"}}\""
24+
)
25+
target_include_directories({{pnum}} INTERFACE
26+
${CMAKE_CURRENT_LIST_DIR}/../system/{{config.build.series}}
27+
${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/{{config.build.series}}_HAL_Driver/Inc
28+
${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/{{config.build.series}}_HAL_Driver/Src
29+
${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/CMSIS/Device/ST/{{config.build.series}}/Include/
30+
${CMAKE_CURRENT_LIST_DIR}/../system/Drivers/CMSIS/Device/ST/{{config.build.series}}/Source/Templates/gcc/
31+
{{ "${" }}{{pnum}}_VARIANT_PATH{{ "}" }}
32+
)
33+
34+
target_link_options({{pnum}} INTERFACE
35+
"LINKER:--default-script={{ "${" }}{{pnum}}_VARIANT_PATH{{ "}" }}/{{config.build.ldscript or "ldscript.ld"}}"
36+
"LINKER:--defsym=LD_FLASH_OFFSET={{config.build.flash_offset or "0"}}"
37+
"LINKER:--defsym=LD_MAX_SIZE={{config.upload.maximum_size}}"
38+
"LINKER:--defsym=LD_MAX_DATA_SIZE={{config.upload.maximum_data_size}}"
39+
"SHELL:{{config.build.flags.fp}}"
40+
-mcpu={{ "${" }}{{pnum}}_MCU{{ "}" }}
41+
)
42+
target_link_libraries({{pnum}} INTERFACE
43+
{{config.build.cmsis_lib_gcc}}
44+
)
45+
46+
{% endfor %}

CMakeLists.txt

+7-48
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,6 @@ include(ensure_CMSIS)
66

77
project("Arduino_Core_STM32" CXX C ASM)
88

9-
set(BOARD_SERIE "STM32L4xx" CACHE STRING "")
10-
set(BOARD_PRODUCTLINE "STM32L433xx" CACHE STRING "")
11-
set(BOARD_VARIANT "L433RCTxP" CACHE STRING "")
12-
set(BOARD_ID "NUCLEO_L433RC_P" CACHE STRING "")
13-
set(BOARD_MAXSIZE 262144 CACHE STRING "Program space size")
14-
set(BOARD_MAXDATASIZE 65536 CACHE STRING "Dynamic memory size")
15-
set(FLASH_OFFSET 0 CACHE STRING "ld flash offset")
169

1710
set(FEAT_XSERIAL "GENERIC" CACHE STRING "USART support")
1811
set(FEAT_USB "NONE" CACHE STRING "USB support")
@@ -28,18 +21,13 @@ set(BUILD_DBG OFF CACHE BOOL "Enable debug symbols")
2821
set(BUILD_LTO OFF CACHE BOOL "Enable Link-Time-Optimisations")
2922
set(BUILD_RELPATH ON CACHE BOOL "make __FILE__ be relative instead of absolute")
3023

31-
set(USB_PID 0 CACHE STRING "")
32-
set(USB_VID 0 CACHE STRING "")
33-
3424
set(USB_PID 0)
3525
set(USB_VID 0)
3626

3727

38-
set(BUILD_SOURCE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/sketch" CACHE STRING "")
3928
set(BUILD_CORE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cores/arduino")
4029
set(BUILD_SYSTEM_PATH "${CMAKE_CURRENT_SOURCE_DIR}/system")
4130
set(BUILD_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries")
42-
set(BUILD_VARIANT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/variants/${BOARD_SERIE}/${BOARD_VARIANT}")
4331
set(CMSIS5_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5" CACHE STRING "Path to CMSIS_5")
4432

4533
option(AUTODL_CMSIS OFF)
@@ -138,7 +126,7 @@ elseif (${FEAT_VIRTIO} STREQUAL "GENERIC")
138126
target_compile_definitions(core_config INTERFACE
139127
VIRTIOCON
140128
NO_ATOMIC_64_SUPPORT
141-
DMETAL_INTERNAL
129+
METAL_INTERNAL
142130
METAL_MAX_DEVICE_REGIONS=2
143131
VIRTIO_SLAVE_ONLY
144132
VIRTIO_LOG
@@ -153,7 +141,7 @@ elseif (${FEAT_VIRTIO} STREQUAL "ENABLED")
153141
target_compile_definitions(core_config INTERFACE
154142
VIRTIOCON
155143
NO_ATOMIC_64_SUPPORT
156-
DMETAL_INTERNAL
144+
METAL_INTERNAL
157145
METAL_MAX_DEVICE_REGIONS=2
158146
VIRTIO_SLAVE_ONLY
159147
VIRTIO_LOG
@@ -180,7 +168,7 @@ else ()
180168
)
181169
endif()
182170

183-
if (${BUILD_OPT} MATCHES "[0-3gs]")
171+
if (${BUILD_OPT} MATCHES "^[0-3gs]$")
184172
target_compile_options(core_config INTERFACE
185173
-O${BUILD_OPT}
186174
)
@@ -204,36 +192,14 @@ if (${BUILD_LTO})
204192
endif()
205193

206194
# generic compilation options
207-
target_compile_definitions(core_config INTERFACE
208-
"${BOARD_SERIE}"
209-
"ARDUINO_${BOARD_ID}"
210-
"BOARD_NAME=\"${BOARD_ID}\""
211-
"BOARD_ID=${BOARD_ID}"
212-
"VARIANT_H=\"variant_${BOARD_ID}.h\""
213-
"${BOARD_PRODUCTLINE}"
214-
)
215-
target_compile_options(core_config INTERFACE
216-
-mcpu=cortex-m4
217-
-mfpu=fpv4-sp-d16
218-
-mfloat-abi=hard
219-
)
220-
195+
target_link_libraries(core_config INTERFACE board)
221196
target_link_options(core_config INTERFACE
222-
-mcpu=cortex-m4
223-
-mfpu=fpv4-sp-d16
224-
-mfloat-abi=hard
225-
226-
LINKER:--defsym=LD_FLASH_OFFSET=${FLASH_OFFSET}
227-
LINKER:--defsym=LD_MAX_SIZE=${BOARD_MAXSIZE}
228-
LINKER:--defsym=LD_MAX_DATA_SIZE=${BOARD_MAXDATASIZE}
229-
LINKER:--default-script=${BUILD_VARIANT_PATH}/ldscript.ld
230197
LINKER:--script=${BUILD_SYSTEM_PATH}/ldscript.ld
231198
)
232199
target_link_directories(core_config INTERFACE
233200
"${CMSIS5_PATH}/CMSIS/DSP/Lib/GCC"
234201
)
235202
target_include_directories(core_config INTERFACE
236-
"${BUILD_SOURCE_PATH}"
237203
"${BUILD_CORE_PATH}"
238204
"${BUILD_CORE_PATH}/avr"
239205
"${BUILD_CORE_PATH}/stm32"
@@ -242,25 +208,16 @@ target_include_directories(core_config INTERFACE
242208
"${BUILD_CORE_PATH}/stm32/OpenAMP"
243209
"${BUILD_CORE_PATH}/stm32/usb/hid"
244210
"${BUILD_CORE_PATH}/stm32/usb/cdc"
245-
"${BUILD_SYSTEM_PATH}/${BOARD_SERIE}"
246-
"${BUILD_SYSTEM_PATH}/Drivers/${BOARD_SERIE}_HAL_Driver/Inc"
247-
"${BUILD_SYSTEM_PATH}/Drivers/${BOARD_SERIE}_HAL_Driver/Src"
248211
"${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Inc"
249212
"${BUILD_SYSTEM_PATH}/Middlewares/ST/STM32_USB_Device_Library/Core/Src"
250-
"${BUILD_SYSTEM_PATH}/Drivers/CMSIS/Device/ST/${BOARD_SERIE}/Include/"
251-
"${BUILD_SYSTEM_PATH}/Drivers/CMSIS/Device/ST/${BOARD_SERIE}/Source/Templates/gcc/"
252213
"${CMSIS5_PATH}/CMSIS/DSP/Include"
253214
"${CMSIS5_PATH}/CMSIS/DSP/PrivateInclude"
254215
"${CMSIS5_PATH}/CMSIS/Core/Include/"
255216
"${CMSIS5_PATH}/CMSIS"
256-
"${BUILD_VARIANT_PATH}"
257217

258218
"${BUILD_LIB_PATH}/SrcWrapper/src"
259219
)
260220

261-
# propagate config to all the parts of the core
262-
link_libraries(core_config)
263-
264221
add_subdirectory(${BUILD_CORE_PATH})
265222
add_subdirectory(${BUILD_VARIANT_PATH})
266223
add_subdirectory(${BUILD_LIB_PATH})
@@ -273,12 +230,14 @@ target_link_libraries(stm32_runtime INTERFACE
273230
# but SrcWrapper is an object library, not an archive, so it isn't necessary
274231
# (this means the linker takes all the object unconditionally, as opposed to an archive where it picks what it needs)
275232
# note: SrcWrapper in particular MUST be an object library, due to possible weak+strong symbols (cf. library.properties)
233+
core_config
234+
276235
SrcWrapper
277236
$<TARGET_OBJECTS:SrcWrapper>
278237
core
279238
variant
280239

281-
arm_cortexM4lf_math
240+
${CMSIS_LIB}
282241
m
283242
stdc++
284243
c

0 commit comments

Comments
 (0)