Skip to content

Commit 1abf736

Browse files
committed
CMake Improvements
1 parent be15345 commit 1abf736

25 files changed

+1375
-10
lines changed

.editorconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
insert_final_newline = true

.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,15 @@ lib/r_tsip_rx
255255
Debug/
256256
Release/
257257
language.settings.xml
258+
259+
# Backup files
260+
*.bak
261+
262+
# Any Visual Studio / VisualGDB
263+
/**/.vs
264+
/**/.visualgdb/*
265+
266+
# Any build directories
267+
/**/build
268+
/**/build-**
269+

CMakeLists.txt

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,38 @@ endif()
4242

4343
project(wolfBoot)
4444

45+
include(cmake/load_dot_config.cmake)
4546
include(cmake/utils.cmake)
4647
include(cmake/functions.cmake)
4748

4849
include_directories(include)
4950
include_directories(lib/wolfssl)
5051

52+
# Where should configuration values come from?
53+
# dot : parse .config via load_dot_config()
54+
# preset : use cacheVariables from CMakePresets.json
55+
set(WOLFBOOT_CONFIG_MODE "dot" CACHE STRING "Config source: dot or preset")
56+
set_property(CACHE WOLFBOOT_CONFIG_MODE PROPERTY STRINGS dot preset)
57+
58+
if(WOLFBOOT_CONFIG_MODE STREQUAL "dot")
59+
message(STATUS "Config mode: dot (.config cache)")
60+
include(cmake/load_dot_config.cmake)
61+
message(STATUS "Loading config from: ${CMAKE_SOURCE_DIR}")
62+
load_dot_config("${CMAKE_SOURCE_DIR}/.config")
63+
64+
elseif(WOLFBOOT_CONFIG_MODE STREQUAL "preset")
65+
message(STATUS "Config mode: preset (using cacheVariables; skipping .config)")
66+
67+
else()
68+
message(FATAL_ERROR "Invalid WOLFBOOT_CONFIG_MODE='${WOLFBOOT_CONFIG_MODE}'. Use 'dot' or 'preset'.")
69+
endif()
70+
71+
72+
if ("${WOLFBOOT_TARGET}" STREQUAL "")
73+
message(STATUS "Setting WOLFBOOT_TARGET from TARGET=${TARGET}")
74+
set(WOLFBOOT_TARGET "${TARGET}")
75+
endif()
76+
5177
if(NOT DEFINED WOLFBOOT_TARGET)
5278
message(FATAL_ERROR "WOLFBOOT_TARGET must be defined")
5379
else()
@@ -59,7 +85,7 @@ if(NOT DEFINED WOLFBOOT_SECTOR_SIZE)
5985
endif()
6086

6187
if(NOT DEFINED ARM_TARGETS)
62-
list(APPEND ARM_TARGETS cypsoc6 imx kinetis lpc54606j512 mcxa mcxw nrf52 nrf52840 nrf5340 nrf5340_net rp2350 sama5d3 same51 stm32c0 stm32f1 stm32f4 stm32f7 stm32g0 stm32h5 stm32h7 stm32l0 stm32l5 stm32u5 stm32wb ti zynqmp)
88+
list(APPEND ARM_TARGETS cypsoc6 imx kinetis lpc54606j512 mcxa mcxw nrf52 nrf52840 nrf5340 nrf5340_net rp2350 sama5d3 same51 stm32c0 stm32f1 stm32f4 stm32f7 stm32g0 stm32h5 stm32h7 stm32l0 stm32l4 stm32l5 stm32u5 stm32wb ti zynqmp)
6389
set(ARM_TARGETS
6490
"${ARM_TARGETS}"
6591
CACHE INTERNAL "")
@@ -654,7 +680,45 @@ target_compile_definitions(user_settings INTERFACE ${USER_SETTINGS} ${SIGN_OPTIO
654680
add_library(wolfboothal)
655681
target_sources(wolfboothal PRIVATE include/hal.h hal/${WOLFBOOT_TARGET}.c ${WOLFBOOT_FLASH_SOURCES}
656682
${PARTITION_SOURCE})
657-
target_link_libraries(wolfboothal target user_settings)
683+
684+
685+
# --- HAL for STM32L4 (only the pieces we need) ---
686+
if(WOLFBOOT_TARGET STREQUAL "stm32l4")
687+
set(HAL_BASE "/mnt/c/Users/gojimmypi/AppData/Local/VisualGDB/EmbeddedBSPs/arm-eabi/com.sysprogs.arm.stm32/STM32L4xxxx")
688+
set(HAL_DRV "${HAL_BASE}/STM32L4xx_HAL_Driver")
689+
set(HAL_CMSIS_DEV "${HAL_BASE}/CMSIS_HAL/Device/ST/STM32L4xx/Include")
690+
set(HAL_CMSIS_CORE "${HAL_BASE}/CMSIS_HAL/Include")
691+
set(HAL_TEMPLATE_INC "${HAL_BASE}/VendorSamples/L4/Projects/B-L475E-IOT01A/Templates/Inc")
692+
693+
add_library(stm32l4_hal STATIC
694+
${HAL_DRV}/Src/stm32l4xx_hal.c
695+
${HAL_DRV}/Src/stm32l4xx_hal_flash.c
696+
${HAL_DRV}/Src/stm32l4xx_hal_flash_ex.c
697+
# add more modules later if you get missing symbols, e.g. RCC/GPIO/etc:
698+
# ${HAL_DRV}/Src/stm32l4xx_hal_rcc.c
699+
# ${HAL_DRV}/Src/stm32l4xx_hal_gpio.c
700+
)
701+
702+
target_include_directories(stm32l4_hal PUBLIC
703+
${HAL_DRV}/Inc
704+
${HAL_CMSIS_DEV}
705+
${HAL_CMSIS_CORE}
706+
${HAL_TEMPLATE_INC}
707+
)
708+
709+
target_compile_definitions(stm32l4_hal PUBLIC
710+
USE_HAL_DRIVER
711+
STM32L475xx
712+
# If your stm32l4xx_hal_conf.h doesn’t enable FLASH, you can force it:
713+
# HAL_FLASH_MODULE_ENABLED
714+
)
715+
716+
# Link HAL into the HAL wrapper lib so the final image pulls symbols from a single archive
717+
target_link_libraries(wolfboothal PUBLIC target user_settings stm32l4_hal)
718+
else()
719+
target_link_libraries(wolfboothal target user_settings)
720+
endif()
721+
658722
target_compile_definitions(wolfboothal PRIVATE ${WOLFBOOT_DEFS})
659723
target_include_directories(wolfboothal PRIVATE ${WOLFBOOT_ROOT} include)
660724
target_compile_options(wolfboothal PRIVATE ${WOLFBOOT_COMPILE_OPTIONS} ${EXTRA_COMPILE_OPTIONS})

CMakePresets.json

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
{
2+
"version": 3,
3+
"configurePresets": [
4+
{
5+
"name": "base",
6+
"hidden": true,
7+
"binaryDir": "${sourceDir}/build-${presetName}"
8+
},
9+
{
10+
"name": "windows-stm32h7",
11+
"displayName": "Windows ARM (STM32H7)",
12+
"generator": "Ninja",
13+
"cacheVariables": {
14+
"WOLFBOOT_CONFIG_MODE": "preset",
15+
"CMAKE_TOOLCHAIN_FILE": "cmake/toolchain_arm-none-eabi.cmake",
16+
"WOLFBOOT_TARGET": "stm32h7",
17+
"BUILD_TEST_APPS": "yes"
18+
}
19+
},
20+
{
21+
"name": "vs-debug-trace",
22+
"displayName": "VS Debug Trace (STM32H7)",
23+
"inherits": [
24+
"linux-stm32h7"
25+
],
26+
"binaryDir": "${sourceDir}/out/build/${presetName}",
27+
"cacheVariables": {
28+
"WOLFBOOT_CONFIG_MODE": "preset",
29+
"CMAKE_BUILD_TYPE": "Debug",
30+
"CMAKE_VERBOSE_MAKEFILE": "ON",
31+
"CMAKE_FIND_DEBUG_MODE": "ON"
32+
}
33+
},
34+
{
35+
"name": "linux-stm32h7",
36+
"inherits": [ "base" ],
37+
"displayName": "Linux/WSL ARM (stm32h7)",
38+
"generator": "Ninja",
39+
"cacheVariables": {
40+
"WOLFBOOT_CONFIG_MODE": "preset",
41+
"ARCH": "ARM",
42+
"WOLFBOOT_TARGET": "stm32h7",
43+
"SIGN": "ECC256",
44+
"HASH": "SHA256",
45+
"DEBUG": "OFF",
46+
"DEBUG_UART": "OFF",
47+
"VTOR": "ON",
48+
"NO_ASM": "OFF",
49+
"EXT_FLASH": "OFF",
50+
"SPI_FLASH": "OFF",
51+
"QSPI_FLASH": "OFF",
52+
"OCTOSPI_FLASH": "OFF",
53+
"ALLOW_DOWNGRADE": "OFF",
54+
"NVM_FLASH_WRITEONCE": "OFF",
55+
"WOLFBOOT_VERSION": "ON",
56+
"V": "OFF",
57+
"SPMATH": "ON",
58+
"RAM_CODE": "OFF",
59+
"DUALBANK_SWAP": "OFF",
60+
"WOLFBOOT_PARTITION_SIZE": "0xD0000",
61+
"WOLFBOOT_SECTOR_SIZE": "0x20000",
62+
"WOLFBOOT_PARTITION_BOOT_ADDRESS": "0x8020000",
63+
"WOLFBOOT_PARTITION_UPDATE_ADDRESS": "0x80F0000",
64+
"WOLFBOOT_PARTITION_SWAP_ADDRESS": "0x81C0000",
65+
"CMAKE_TOOLCHAIN_FILE": "cmake/toolchain_arm-none-eabi.cmake",
66+
"BUILD_TEST_APPS": "ON"
67+
}
68+
},
69+
{
70+
"name": "linux-stm32l4",
71+
"inherits": [ "base" ],
72+
"displayName": "Linux/WSL ARM (stm32l4)",
73+
"generator": "Ninja",
74+
"cacheVariables": {
75+
"WOLFBOOT_CONFIG_MODE": "preset",
76+
"VISUALGDB": "ON",
77+
"VISUALGDB_BASE": "/mnt/c/Users/$env{USER}/AppData/Local/VisualGDB/EmbeddedBSPs/arm-eabi/com.sysprogs.arm.stm32/STM32L4xxxx",
78+
"CMAKE_C_STANDARD_INCLUDE_DIRECTORIES": "/mnt/c/Users/$env{USER}/AppData/Local/VisualGDB/EmbeddedBSPs/arm-eabi/com.sysprogs.arm.stm32/VendorSamples/L4/Projects/B-L475E-IOT01A/Templates/Inc",
79+
"WOLFBOOT_TARGET": "stm32l4",
80+
"STM32L4_PART": "STM32L475xx",
81+
"BOARD": "B-L475E-IOT01A",
82+
"ARCH": "ARM",
83+
"SIGN": "ECC256",
84+
"HASH": "SHA256",
85+
"DEBUG": "OFF",
86+
"VTOR": "ON",
87+
"CORTEX_M0": "OFF",
88+
"NO_ASM": "OFF",
89+
"EXT_FLASH": "OFF",
90+
"SPI_FLASH": "OFF",
91+
"ALLOW_DOWNGRADE": "OFF",
92+
"NVM_FLASH_WRITEONCE": "ON",
93+
"WOLFBOOT_VERSION": "OFF",
94+
"V": "OFF",
95+
"SPMATH": "ON",
96+
"RAM_CODE": "OFF",
97+
"DUALBANK_SWAP": "OFF",
98+
"IMAGE_HEADER_SIZE": "256",
99+
"WOLFBOOT_SECTOR_SIZE": "0x1000",
100+
"WOLFBOOT_PARTITION_SIZE": "0x7A000",
101+
"WOLFBOOT_PARTITION_BOOT_ADDRESS": "0x0800A000",
102+
"WOLFBOOT_PARTITION_UPDATE_ADDRESS": "0x08084000",
103+
"WOLFBOOT_PARTITION_SWAP_ADDRESS": "0x080FE000",
104+
"WOLFTPM": "OFF",
105+
"CMAKE_TOOLCHAIN_FILE": "cmake/toolchain_arm-none-eabi.cmake",
106+
"BUILD_TEST_APPS": "ON"
107+
}
108+
}
109+
],
110+
"buildPresets": [
111+
{
112+
"name": "windows-stm32h7",
113+
"configurePreset": "windows-stm32h7",
114+
"jobs": 0
115+
},
116+
{
117+
"name": "vs-debug-trace",
118+
"configurePreset": "vs-debug-trace",
119+
"jobs": 0
120+
},
121+
{
122+
"name": "linux-stm32h7",
123+
"configurePreset": "linux-stm32h7",
124+
"jobs": 0
125+
},
126+
{
127+
"name": "linux-stm32l4",
128+
"configurePreset": "linux-stm32l4",
129+
"jobs": 0
130+
}
131+
]
132+
}

CMakeSettings.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"configurations": [
3+
{
4+
"name": "x64-Debug",
5+
"generator": "Ninja",
6+
"configurationType": "Debug",
7+
"inheritEnvironments": [ "msvc_x64_x64" ],
8+
"buildRoot": "${projectDir}\\out\\build\\${name}",
9+
"installRoot": "${projectDir}\\out\\install\\${name}",
10+
"cmakeCommandArgs": "",
11+
"buildCommandArgs": "",
12+
"ctestCommandArgs": ""
13+
}
14+
]
15+
}

IDE/VSCode/.vscode/launch.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "STM32L4 - OpenOCD",
6+
"type": "cortex-debug",
7+
"request": "launch",
8+
"servertype": "openocd",
9+
"cwd": "${workspaceFolder:wolfBoot}",
10+
"executable": "${workspaceFolder:wolfBoot}/build-linux-stm32l4/wolfboot.elf",
11+
"device": "STM32L475VG",
12+
"configFiles": [
13+
"interface/stlink-dap.cfg",
14+
"target/stm32l4x.cfg"
15+
],
16+
"runToMain": true,
17+
"svdFile": "${workspaceFolder:wolfBoot}/hal/stm32l4/STM32L4x.svd",
18+
"preLaunchTask": "CMake: Build (linux-stm32l4)"
19+
}
20+
]
21+
}

IDE/VSCode/.vscode/settings.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"cmake.useCMakePresets": "always",
3+
"cmake.buildDirectory": "${workspaceFolder}/build-${buildPresetName}",
4+
"cmake.configureOnOpen": true,
5+
"cmake.generator": "Ninja",
6+
"cmake.loggingLevel": "info",
7+
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
8+
"files.encoding": "utf8",
9+
"files.eol": "\n"
10+
}

IDE/VSCode/.vscode/tasks.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"version": "2.0.0",
3+
"tasks": [
4+
{
5+
"label": "CMake: Configure (linux-stm32l4)",
6+
"command": "cmake",
7+
"args": [ "--preset", "linux-stm32l4" ],
8+
"options": { "cwd": "${workspaceFolder:wolfBoot}" },
9+
"problemMatcher": []
10+
},
11+
{
12+
"label": "CMake: Build (linux-stm32l4)",
13+
"command": "cmake",
14+
"args": [ "--build", "--preset", "linux-stm32l4" ],
15+
"options": { "cwd": "${workspaceFolder:wolfBoot}" },
16+
"group": "build",
17+
"problemMatcher": "$gcc"
18+
},
19+
{
20+
"label": "OpenOCD: Flash wolfBoot (linux-stm32l4)",
21+
"type": "shell",
22+
"command": "openocd",
23+
"args": [
24+
"-f",
25+
"interface/stlink-dap.cfg",
26+
"-f",
27+
"target/stm32l4x.cfg",
28+
"-c",
29+
"program ${workspaceFolder:wolfBoot}/build-linux-stm32l4/wolfboot.elf verify reset exit"
30+
],
31+
"options": { "cwd": "${workspaceFolder:wolfBoot}" },
32+
"problemMatcher": []
33+
}
34+
]
35+
}

IDE/VSCode/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# VS Code wolfBoot Project
2+

0 commit comments

Comments
 (0)