Skip to content

Commit b35a491

Browse files
boot: zephyr: boot/zephyr/CMakeLists.txt under zephyr/subsys/
Refactor `boot/zephyr/CMakeLists.txt` and `boot/bootutil/zephyr/CMakeLists.txt` into more standard subsystems beneath `$mcuboot/zephyr/`. This required changing which CMake file was pointed to by `module.yml`. Verified by: 1. building `$mcuboot/boot/zephyr` for mimxrt1064_evk and verifying the map file reported the same output and the same functions exist. (Since they are linked in a different order the sizes may be different by a few padding bytes. 2. Further verified that the following testcases still pass with mcuboot options on twister: mcuboot/boot/zephyr zephyr/tests/subsys/dfu zephyr/samples/subsys/mgmt/mcumgr/smp_svr Signed-off-by: Gregory SHUE <[email protected]>
1 parent 24e16f8 commit b35a491

File tree

6 files changed

+285
-274
lines changed

6 files changed

+285
-274
lines changed

boot/zephyr/CMakeLists.txt

Lines changed: 3 additions & 269 deletions
Original file line numberDiff line numberDiff line change
@@ -45,230 +45,10 @@ endmacro()
4545
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
4646
project(NONE)
4747

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

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

@@ -298,7 +78,7 @@ if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
29878
OUTPUT ${GENERATED_PUBKEY}
29979
COMMAND
30080
${PYTHON_EXECUTABLE}
301-
${MCUBOOT_DIR}/scripts/imgtool.py
81+
${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts/imgtool.py
30282
getpub
30383
-k
30484
${KEY_FILE}
@@ -307,49 +87,3 @@ if(NOT CONFIG_BOOT_SIGNATURE_KEY_FILE STREQUAL "")
30787
)
30888
zephyr_library_sources(${GENERATED_PUBKEY})
30989
endif()
310-
311-
if(CONFIG_BOOT_ENCRYPTION_KEY_FILE AND NOT CONFIG_BOOT_ENCRYPTION_KEY_FILE STREQUAL "")
312-
# CONF_FILE points to the KConfig configuration files of the bootloader.
313-
unset(CONF_DIR)
314-
foreach(filepath ${CONF_FILE})
315-
file(READ ${filepath} temp_text)
316-
string(FIND "${temp_text}" ${CONFIG_BOOT_ENCRYPTION_KEY_FILE} match)
317-
if(${match} GREATER_EQUAL 0)
318-
if(NOT DEFINED CONF_DIR)
319-
get_filename_component(CONF_DIR ${filepath} DIRECTORY)
320-
else()
321-
message(FATAL_ERROR "Encryption key file defined in multiple conf files")
322-
endif()
323-
endif()
324-
endforeach()
325-
326-
if(IS_ABSOLUTE ${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
327-
set(KEY_FILE ${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
328-
elseif((DEFINED CONF_DIR) AND
329-
(EXISTS ${CONF_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE}))
330-
set(KEY_FILE ${CONF_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
331-
else()
332-
set(KEY_FILE ${MCUBOOT_DIR}/${CONFIG_BOOT_ENCRYPTION_KEY_FILE})
333-
endif()
334-
message("MCUBoot bootloader encryption key file: ${KEY_FILE}")
335-
336-
set(GENERATED_ENCKEY ${ZEPHYR_BINARY_DIR}/autogen-enckey.c)
337-
add_custom_command(
338-
OUTPUT ${GENERATED_ENCKEY}
339-
COMMAND
340-
${PYTHON_EXECUTABLE}
341-
${MCUBOOT_DIR}/scripts/imgtool.py
342-
getpriv
343-
-k
344-
${KEY_FILE}
345-
> ${GENERATED_ENCKEY}
346-
DEPENDS ${KEY_FILE}
347-
)
348-
zephyr_library_sources(${GENERATED_ENCKEY})
349-
endif()
350-
351-
if(CONFIG_MCUBOOT_CLEANUP_ARM_CORE)
352-
zephyr_library_sources(
353-
${BOOT_DIR}/zephyr/arm_cleanup.c
354-
)
355-
endif()

zephyr/CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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(ZEPHYR_BASE)
11+
else()
12+
message(FATAL_ERROR "ZEPHYR_BASE needs to be defined for Zephyr builds")
13+
endif()
14+
15+
# Verify the module name is set correctly
16+
set(expected_module_name "mcuboot")
17+
if(NOT "${module_name}" STREQUAL ${expected_module_name})
18+
message(FATAL_ERROR "A module configuration error has occurred.
19+
This module is named '${module_name}' when '${expected_module_name}' \
20+
is expected.
21+
Verify `module.yml` contains the line 'name: ${expected_module_name}'.")
22+
endif()
23+
unset(expected_module_name)
24+
25+
#Do not allow in source builds
26+
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
27+
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
28+
29+
30+
#
31+
# Module options managed through Kconfig and use names CONFIG_*
32+
#
33+
34+
zephyr_include_directories(include)
35+
36+
add_subdirectory(subsys)

zephyr/module.yml

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

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 mcuboot_svc)

0 commit comments

Comments
 (0)