Skip to content

Commit 81be8fd

Browse files
Refactor boot/zephyr/CMakeLists.txt for includes
The Zephyr build system expects CMakeLists.txt to be only in directories beneath the module-level CMakeLists.txt. The solution most consistent with Zephyr led to putting the subsystem-specific build logic within the `zephyr/` subdirectory. This also led to relocating the `boot/bootutil/zephyr/CMakelists.txt`. It also led to adding an explicit `name:` setting in `module.yml` to ensure files can consistently reference the module independent of where the module is mounted. Created a module-level CMakeLists.txt for extending the include paths to find "mcuboot-mbedtls-cfg.h" within the boot/zephyr component. Incremental verification: 1. (Pass) west build -p always -b nrf52840dk_nrf52840 mcuboot/boot/zephyr/ 2. (Pass) ./zephyr/scripts/twister --testsuite-root mcuboot/boot/zephyr/ 3. (Pass) ./zephyr/scripts/twister --testsuite-root zephyr/samples/tfm_integration/psa_crypto/ 4. (Pass) ./zephyr/scripts/twister --testsuite-root zephyr/tests/subsys/dfu/ 5. (Pass) ./zephyr/scripts/twister --testsuite-root zephyr/samples/subsys/mgmt/mcumgr/smp_svr/ Signed-off-by: Gregory Shue <[email protected]> Fixes
1 parent 42068ca commit 81be8fd

File tree

6 files changed

+294
-276
lines changed

6 files changed

+294
-276
lines changed

boot/zephyr/CMakeLists.txt

Lines changed: 4 additions & 269 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# CMakeLists.txt for building mcuboot as a Zephyr project
22
#
33
# Copyright (c) 2017 Open Source Foundries Limited
4+
# Copyright (c) 2022 Legrand North America, LLC.
45
#
56
# SPDX-License-Identifier: Apache-2.0
67

@@ -31,230 +32,10 @@ endmacro()
3132
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
3233
project(NONE)
3334

34-
# Path to "boot" subdirectory of repository root.
35-
get_filename_component(BOOT_DIR ${APPLICATION_SOURCE_DIR} DIRECTORY)
36-
# Path to top-level repository root directory.
37-
get_filename_component(MCUBOOT_DIR ${BOOT_DIR} DIRECTORY)
38-
# Path to tinycrypt library source subdirectory of MCUBOOT_DIR.
39-
set(TINYCRYPT_DIR "${MCUBOOT_DIR}/ext/tinycrypt/lib")
40-
assert_exists(TINYCRYPT_DIR)
41-
set(TINYCRYPT_SHA512_DIR "${MCUBOOT_DIR}/ext/tinycrypt-sha512/lib")
42-
assert_exists(TINYCRYPT_SHA512_DIR)
43-
# Path to crypto-fiat
44-
set(FIAT_DIR "${MCUBOOT_DIR}/ext/fiat")
45-
assert_exists(FIAT_DIR)
46-
# Path to mbed-tls' asn1 parser library.
47-
set(MBEDTLS_ASN1_DIR "${MCUBOOT_DIR}/ext/mbedtls-asn1")
48-
assert_exists(MBEDTLS_ASN1_DIR)
49-
set(NRF_DIR "${MCUBOOT_DIR}/ext/nrf")
50-
51-
if(CONFIG_BOOT_USE_NRF_CC310_BL)
52-
set(NRFXLIB_DIR ${ZEPHYR_BASE}/../nrfxlib)
53-
if(NOT EXISTS ${NRFXLIB_DIR})
54-
message(FATAL_ERROR "
55-
------------------------------------------------------------------------
56-
No such file or directory: ${NRFXLIB_DIR}
57-
The current configuration enables nRF CC310 crypto accelerator hardware
58-
with the `CONFIG_BOOT_USE_NRF_CC310_BL` option. Please follow
59-
`ext/nrf/README.md` guide to fix your setup or use tinycrypt instead of
60-
the HW accelerator.
61-
To use the tinycrypt set `CONFIG_BOOT_ECDSA_TINYCRYPT` to y.
62-
------------------------------------------------------------------------")
63-
endif()
64-
# Don't include this if we are using west
65-
add_subdirectory(${NRFXLIB_DIR} ${PROJECT_BINARY_DIR}/nrfxlib)
66-
endif()
67-
68-
zephyr_library_include_directories(
69-
include
70-
targets
71-
)
72-
if(EXISTS targets/${BOARD}.h)
73-
zephyr_library_compile_definitions(MCUBOOT_TARGET_CONFIG="${BOARD}.h")
74-
endif()
75-
76-
# Zephyr port-specific sources.
77-
zephyr_library_sources(
78-
main.c
79-
flash_map_extended.c
80-
os.c
35+
target_sources(app PRIVATE
8136
keys.c
8237
)
8338

84-
if(DEFINED CONFIG_ENABLE_MGMT_PERUSER)
85-
zephyr_library_sources(
86-
boot_serial_extensions.c
87-
)
88-
endif()
89-
90-
if(NOT DEFINED CONFIG_FLASH_PAGE_LAYOUT)
91-
zephyr_library_sources(
92-
flash_map_legacy.c
93-
)
94-
endif()
95-
96-
# Generic bootutil sources and includes.
97-
zephyr_library_include_directories(${BOOT_DIR}/bootutil/include)
98-
zephyr_library_sources(
99-
${BOOT_DIR}/bootutil/src/image_validate.c
100-
${BOOT_DIR}/bootutil/src/tlv.c
101-
${BOOT_DIR}/bootutil/src/encrypted.c
102-
${BOOT_DIR}/bootutil/src/image_rsa.c
103-
${BOOT_DIR}/bootutil/src/image_ec256.c
104-
${BOOT_DIR}/bootutil/src/image_ed25519.c
105-
${BOOT_DIR}/bootutil/src/bootutil_misc.c
106-
${BOOT_DIR}/bootutil/src/fault_injection_hardening.c
107-
)
108-
109-
# library which might be common source code for MCUBoot and an application
110-
zephyr_link_libraries(MCUBOOT_BOOTUTIL)
111-
112-
if(CONFIG_BOOT_FIH_PROFILE_HIGH)
113-
zephyr_library_sources(
114-
${BOOT_DIR}/bootutil/src/fault_injection_hardening_delay_rng_mbedtls.c
115-
)
116-
endif()
117-
118-
if(CONFIG_SINGLE_APPLICATION_SLOT)
119-
zephyr_library_sources(
120-
${BOOT_DIR}/zephyr/single_loader.c
121-
)
122-
zephyr_library_include_directories(${BOOT_DIR}/bootutil/src)
123-
else()
124-
zephyr_library_sources(
125-
${BOOT_DIR}/bootutil/src/loader.c
126-
${BOOT_DIR}/bootutil/src/swap_misc.c
127-
${BOOT_DIR}/bootutil/src/swap_scratch.c
128-
${BOOT_DIR}/bootutil/src/swap_move.c
129-
${BOOT_DIR}/bootutil/src/caps.c
130-
)
131-
endif()
132-
133-
if(CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256 OR CONFIG_BOOT_ENCRYPT_EC256 OR CONFIG_BOOT_SERIAL_ENCRYPT_EC256)
134-
zephyr_library_include_directories(
135-
${MBEDTLS_ASN1_DIR}/include
136-
)
137-
zephyr_library_sources(
138-
# Additionally pull in just the ASN.1 parser from mbedTLS.
139-
${MBEDTLS_ASN1_DIR}/src/asn1parse.c
140-
${MBEDTLS_ASN1_DIR}/src/platform_util.c
141-
)
142-
if(CONFIG_BOOT_USE_TINYCRYPT)
143-
# When using ECDSA signatures, pull in our copy of the tinycrypt library.
144-
zephyr_library_include_directories(
145-
${BOOT_DIR}/zephyr/include
146-
${TINYCRYPT_DIR}/include
147-
)
148-
zephyr_include_directories(${TINYCRYPT_DIR}/include)
149-
150-
zephyr_library_sources(
151-
${TINYCRYPT_DIR}/source/ecc.c
152-
${TINYCRYPT_DIR}/source/ecc_dsa.c
153-
${TINYCRYPT_DIR}/source/sha256.c
154-
${TINYCRYPT_DIR}/source/utils.c
155-
)
156-
elseif(CONFIG_BOOT_USE_NRF_CC310_BL)
157-
zephyr_library_sources(${NRF_DIR}/cc310_glue.c)
158-
zephyr_library_include_directories(${NRF_DIR})
159-
zephyr_link_libraries(nrfxlib_crypto)
160-
endif()
161-
162-
# Since here we are not using Zephyr's mbedTLS but rather our own, we need
163-
# to set MBEDTLS_CONFIG_FILE ourselves. When using Zephyr's copy, this
164-
# variable is set by its Kconfig in the Zephyr codebase.
165-
zephyr_library_compile_definitions(
166-
MBEDTLS_CONFIG_FILE="${CMAKE_CURRENT_LIST_DIR}/include/mcuboot-mbedtls-cfg.h"
167-
)
168-
elseif(CONFIG_BOOT_SIGNATURE_TYPE_NONE)
169-
zephyr_library_include_directories(
170-
${BOOT_DIR}/zephyr/include
171-
${TINYCRYPT_DIR}/include
172-
)
173-
174-
zephyr_library_sources(
175-
${TINYCRYPT_DIR}/source/sha256.c
176-
${TINYCRYPT_DIR}/source/utils.c
177-
)
178-
elseif(CONFIG_BOOT_SIGNATURE_TYPE_RSA)
179-
# Use mbedTLS provided by Zephyr for RSA signatures. (Its config file
180-
# is set using Kconfig.)
181-
zephyr_include_directories(include)
182-
if(CONFIG_BOOT_ENCRYPT_RSA)
183-
set_source_files_properties(
184-
${BOOT_DIR}/bootutil/src/encrypted.c
185-
PROPERTIES
186-
INCLUDE_DIRECTORIES ${ZEPHYR_MBEDTLS_MODULE_DIR}/library
187-
)
188-
endif()
189-
elseif(CONFIG_BOOT_SIGNATURE_TYPE_ED25519 OR CONFIG_BOOT_ENCRYPT_X25519)
190-
if(CONFIG_BOOT_USE_TINYCRYPT)
191-
zephyr_library_include_directories(
192-
${MBEDTLS_ASN1_DIR}/include
193-
${BOOT_DIR}/zephyr/include
194-
${TINYCRYPT_DIR}/include
195-
${TINYCRYPT_SHA512_DIR}/include
196-
)
197-
zephyr_library_sources(
198-
${TINYCRYPT_DIR}/source/sha256.c
199-
${TINYCRYPT_DIR}/source/utils.c
200-
${TINYCRYPT_SHA512_DIR}/source/sha512.c
201-
# Additionally pull in just the ASN.1 parser from mbedTLS.
202-
${MBEDTLS_ASN1_DIR}/src/asn1parse.c
203-
${MBEDTLS_ASN1_DIR}/src/platform_util.c
204-
)
205-
zephyr_library_compile_definitions(
206-
MBEDTLS_CONFIG_FILE="${CMAKE_CURRENT_LIST_DIR}/include/mcuboot-mbedtls-cfg.h"
207-
)
208-
else()
209-
zephyr_include_directories(include)
210-
endif()
211-
212-
zephyr_library_include_directories(
213-
${BOOT_DIR}/zephyr/include
214-
${FIAT_DIR}/include/
215-
)
216-
217-
zephyr_library_sources(
218-
${FIAT_DIR}/src/curve25519.c
219-
)
220-
endif()
221-
222-
if(CONFIG_BOOT_ENCRYPT_EC256 OR CONFIG_BOOT_ENCRYPT_X25519 OR CONFIG_BOOT_SERIAL_ENCRYPT_EC256)
223-
zephyr_library_sources(
224-
${TINYCRYPT_DIR}/source/aes_encrypt.c
225-
${TINYCRYPT_DIR}/source/aes_decrypt.c
226-
${TINYCRYPT_DIR}/source/ctr_mode.c
227-
${TINYCRYPT_DIR}/source/hmac.c
228-
${TINYCRYPT_DIR}/source/ecc_dh.c
229-
)
230-
endif()
231-
232-
if(CONFIG_BOOT_ENCRYPT_EC256)
233-
zephyr_library_sources(
234-
${TINYCRYPT_DIR}/source/ecc_dh.c
235-
)
236-
endif()
237-
238-
if(CONFIG_MCUBOOT_SERIAL)
239-
zephyr_sources(${BOOT_DIR}/zephyr/serial_adapter.c)
240-
zephyr_sources(${BOOT_DIR}/boot_serial/src/boot_serial.c)
241-
zephyr_sources(${BOOT_DIR}/boot_serial/src/serial_recovery_cbor.c)
242-
zephyr_sources(${BOOT_DIR}/boot_serial/src/zcbor_decode.c)
243-
zephyr_sources(${BOOT_DIR}/boot_serial/src/zcbor_encode.c)
244-
zephyr_sources(${BOOT_DIR}/boot_serial/src/zcbor_common.c)
245-
246-
zephyr_sources_ifdef(CONFIG_BOOT_MGMT_ECHO ${BOOT_DIR}/boot_serial/src/serial_recovery_echo.c)
247-
248-
zephyr_include_directories(${BOOT_DIR}/bootutil/include)
249-
zephyr_include_directories(${BOOT_DIR}/boot_serial/include)
250-
zephyr_include_directories(include)
251-
252-
zephyr_include_directories_ifdef(
253-
CONFIG_BOOT_ERASE_PROGRESSIVELY
254-
${BOOT_DIR}/bootutil/src
255-
)
256-
endif()
257-
25839
if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
25940
# CONF_FILE points to the KConfig configuration files of the bootloader.
26041
foreach (filepath ${CONF_FILE})
@@ -275,7 +56,7 @@ if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
27556
(EXISTS ${CONF_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE}))
27657
set(KEY_FILE ${CONF_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE})
27758
else()
278-
set(KEY_FILE ${MCUBOOT_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE})
59+
set(KEY_FILE ${ZEPHYR_MCUBOOT_MODULE_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE})
27960
endif()
28061
message("MCUBoot bootloader key file: ${KEY_FILE}")
28162

@@ -284,7 +65,7 @@ if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
28465
OUTPUT ${GENERATED_PUBKEY}
28566
COMMAND
28667
${PYTHON_EXECUTABLE}
287-
${MCUBOOT_DIR}/scripts/imgtool.py
68+
${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts/imgtool.py
28869
getpub
28970
-k
29071
${KEY_FILE}
@@ -293,49 +74,3 @@ if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
29374
)
29475
zephyr_library_sources(${GENERATED_PUBKEY})
29576
endif()
296-
297-
if(CONFIG_BOOT_ENCRYPTION_KEY_FILE AND NOT CONFIG_BOOT_ENCRYPTION_KEY_FILE STREQUAL "")
298-
# CONF_FILE points to the KConfig configuration files of the bootloader.
299-
unset(CONF_DIR)
300-
foreach(filepath ${CONF_FILE})
301-
file(READ ${filepath} temp_text)
302-
string(FIND "${temp_text}" ${CONFIG_BOOT_ENCRYPTION_KEY_FILE} match)
303-
if(${match} GREATER_EQUAL 0)
304-
if(NOT DEFINED CONF_DIR)
305-
get_filename_component(CONF_DIR ${filepath} DIRECTORY)
306-
else()
307-
message(FATAL_ERROR "Encryption key file defined in multiple conf files")
308-
endif()
309-
endif()
310-
endforeach()
311-
312-
if(IS_ABSOLUTE ${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
313-
set(KEY_FILE ${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
314-
elseif((DEFINED CONF_DIR) AND
315-
(EXISTS ${CONF_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE}))
316-
set(KEY_FILE ${CONF_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
317-
else()
318-
set(KEY_FILE ${MCUBOOT_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
319-
endif()
320-
message("MCUBoot bootloader encryption key file: ${KEY_FILE}")
321-
322-
set(GENERATED_ENCKEY ${ZEPHYR_BINARY_DIR}/autogen-enckey.c)
323-
add_custom_command(
324-
OUTPUT ${GENERATED_ENCKEY}
325-
COMMAND
326-
${PYTHON_EXECUTABLE}
327-
${MCUBOOT_DIR}/scripts/imgtool.py
328-
getpriv
329-
-k
330-
${KEY_FILE}
331-
> ${GENERATED_ENCKEY}
332-
DEPENDS ${KEY_FILE}
333-
)
334-
zephyr_library_sources(${GENERATED_ENCKEY})
335-
endif()
336-
337-
if(CONFIG_MCUBOOT_CLEANUP_ARM_CORE)
338-
zephyr_library_sources(
339-
${BOOT_DIR}/zephyr/arm_cleanup.c
340-
)
341-
endif()

zephyr/CMakeLists.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Copyright (c) 2022 Legrand North America, LLC.
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
6+
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
7+
8+
9+
# Detect the platform reliably
10+
if(NOT ZEPHYR_BASE)
11+
message(FATAL_ERROR "ZEPHYR_BASE needs to be defined for Zephyr builds")
12+
endif()
13+
14+
# Verify the module name is set correctly
15+
set(expected_module_name "mcuboot")
16+
if(NOT "${module_name}" STREQUAL ${expected_module_name})
17+
message(FATAL_ERROR "
18+
------------------------------------------------------------------------
19+
A module configuration error has occurred.
20+
21+
This module is named '${module_name}' when '${expected_module_name}' is expected.
22+
Verify `module.yml` contains the line 'name: ${expected_module_name}'.
23+
------------------------------------------------------------------------")
24+
endif()
25+
unset(expected_module_name)
26+
27+
# Do not allow in source builds
28+
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
29+
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
30+
31+
32+
#
33+
# Module options managed through Kconfig and use names CONFIG_*
34+
#
35+
36+
zephyr_include_directories(../boot/zephyr/include)
37+
38+
add_subdirectory(subsys)

zephyr/module.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ name: mcuboot
77
samples:
88
- boot/zephyr
99
build:
10-
cmake: ./boot/bootutil/zephyr
10+
cmake: ./zephyr
1111
kconfig: ./zephyr/Kconfig

zephyr/subsys/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Copyright (c) 2022 Legrand North America, LLC.
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
6+
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
7+
8+
add_subdirectory_ifdef(CONFIG_MCUBOOT_BOOTUTIL_LIB mcuboot_util)
9+
add_subdirectory_ifdef(CONFIG_MCUBOOT_APP mcuboot_app)

0 commit comments

Comments
 (0)