Skip to content

Commit dfa52a3

Browse files
tejlmandcarlescufi
authored andcommitted
module: moving TFM CMakeLists.txt into Zephyr repo
This commit moves TFM CMakeLists.txt into Zephyr and relocates the Kconfig.tfm file under the modules/tfm folder. Updates the manifest to point to related TFM changes. Signed-off-by: Torsten Rasmussen <[email protected]>
1 parent acf42a2 commit dfa52a3

File tree

12 files changed

+227
-10
lines changed

12 files changed

+227
-10
lines changed

CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@
461461
/lib/cmsis_rtos_v1/ @nashif
462462
/lib/libc/ @nashif
463463
/modules/ @nashif
464-
/modules/Kconfig.tfm @ioannisg @microbuilder
464+
/modules/trusted-firmware-m/ @ioannisg @microbuilder
465465
/kernel/device.c @andyross @nashif
466466
/kernel/idle.c @andyross @nashif
467467
/samples/ @nashif

boards/arm/lpcxpresso55s69/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ if (CONFIG_BUILD_WITH_TFM)
2424
if (NOT CONFIG_TFM_BL2_FALSE)
2525
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2626
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
27-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
27+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2828
endif()
2929

3030
# Configure which format (full or hash) to include the public key in

boards/arm/mps2_an521/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if (CONFIG_BUILD_WITH_TFM)
2020

2121
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2222
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
23-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
23+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2424

2525
# Configure which format (full or hash) to include the public key in
2626
# the image manifest

boards/arm/nrf5340dk_nrf5340/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if (CONFIG_BUILD_WITH_TFM)
2020
if (NOT CONFIG_TFM_BL2_FALSE)
2121
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2222
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
23-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
23+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2424
endif()
2525

2626
# Configure which format (full or hash) to include the public key in

boards/arm/nrf9160dk_nrf9160/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ if (CONFIG_BUILD_WITH_TFM)
1818

1919
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2020
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
21-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
21+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2222

2323
# Configure which format (full or hash) to include the public key in
2424
# the image manifest

boards/arm/nucleo_l552ze_q/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ if (CONFIG_BUILD_WITH_TFM)
2222

2323
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2424
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
25-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
25+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2626

2727
# Configure which format (full or hash) to include the public key in
2828
# the image manifest

boards/arm/v2m_musca_b1/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if (CONFIG_BUILD_WITH_TFM)
2020

2121
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2222
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
23-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
23+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2424

2525
# Configure which format (full or hash) to include the public key in
2626
# the image manifest

boards/arm/v2m_musca_s1/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if (CONFIG_BUILD_WITH_TFM)
2020

2121
set(PREPROCESSED_FILE_S "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_s.dir/signing_layout_s.o")
2222
set(PREPROCESSED_FILE_NS "${CMAKE_BINARY_DIR}/tfm/bl2/ext/mcuboot/CMakeFiles/signing_layout_ns.dir/signing_layout_ns.o")
23-
set(TFM_MCUBOOT_DIR "${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
23+
set(TFM_MCUBOOT_DIR "${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/bl2/ext/mcuboot")
2424

2525
# Configure which format (full or hash) to include the public key in
2626
# the image manifest

modules/Kconfig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ source "modules/Kconfig.sof"
2929
source "modules/Kconfig.st"
3030
source "modules/Kconfig.stm32"
3131
source "modules/Kconfig.syst"
32-
source "modules/Kconfig.tfm"
3332
source "modules/Kconfig.tinycbor"
3433
source "modules/Kconfig.tinycrypt"
3534
source "modules/Kconfig.vega"
@@ -52,6 +51,9 @@ comment "Unavailable modules, please install those via the project manifest."
5251
comment "hal_nordic module not available."
5352
depends on !ZEPHYR_HAL_NORDIC_MODULE
5453

54+
comment "Trusted-firmware-m module not available."
55+
depends on !ZEPHYR_TRUSTED_FIRMWARE_M_MODULE
56+
5557
# This ensures that symbols are available in Kconfig for dependency checking
5658
# and referencing, while keeping the settings themselves unavailable when the
5759
# modules are not present in the workspace
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
# Copyright (c) 2019, 2020 Linaro
2+
# Copyright (c) 2020, Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
# Adds trusted-firmware-m as an external project.
7+
# Also creates a target called 'tfm_api'
8+
# which can be linked into the app.
9+
#
10+
# When called from a Zephyr module, the following input values can be provided
11+
# to configure the TF-M build:
12+
#
13+
# BINARY_DIR: The location where the build outputs will be written
14+
# BOARD: The string identifying the board target for TF-M (AN521, etc.)
15+
# CMAKE_BUILD_TYPE: The TF-M build type to use, (Debug, Release, etc.)
16+
# IPC: Build TFM IPC library. This library allows a non-secure application to
17+
# interface to secure domain using IPC.
18+
# ISOLATION_LEVEL: The TF-M isolation level to use
19+
# REGRESSION: Boolean if TF-M build includes building the TF-M regression tests
20+
# BL2: Boolean if the TF-M build uses MCUboot. Default: True
21+
#
22+
# Example usage:
23+
#
24+
# trusted_firmware_build(BINARY_DIR ${CMAKE_BINARY_DIR}/tfm
25+
# BOARD ${TFM_TARGET_PLATFORM}
26+
# CMAKE_BUILD_TYPE Release
27+
# IPC
28+
# ISOLATION_LEVEL 2
29+
# REGRESSION
30+
# BL2 True
31+
# BUILD_PROFILE profile_small)
32+
function(trusted_firmware_build)
33+
set(options IPC REGRESSION)
34+
set(oneValueArgs BINARY_DIR BOARD BL2 ISOLATION_LEVEL CMAKE_BUILD_TYPE BUILD_PROFILE)
35+
cmake_parse_arguments(TFM "${options}" "${oneValueArgs}" "" ${ARGN})
36+
37+
if(NOT DEFINED TFM_BL2)
38+
set(TFM_BL2 True)
39+
endif()
40+
set(TFM_BL2_ARG "-DBL2=${TFM_BL2}")
41+
42+
if(DEFINED TFM_IPC)
43+
set(TFM_IPC_ARG -DTFM_PSA_API=ON)
44+
# PSA API awareness for the Non-Secure application
45+
target_compile_definitions(app PRIVATE "TFM_PSA_API")
46+
endif()
47+
48+
if(DEFINED TFM_ISOLATION_LEVEL)
49+
set(TFM_ISOLATION_LEVEL_ARG -DTFM_ISOLATION_LEVEL=${TFM_ISOLATION_LEVEL})
50+
endif()
51+
52+
if(DEFINED TFM_REGRESSION)
53+
set(TFM_REGRESSION_ARG -DTEST_S=ON)
54+
endif()
55+
56+
if(DEFINED TFM_CMAKE_BUILD_TYPE)
57+
set(TFM_CMAKE_BUILD_TYPE_ARG -DCMAKE_BUILD_TYPE=${TFM_CMAKE_BUILD_TYPE})
58+
else()
59+
set(TFM_CMAKE_BUILD_TYPE_ARG -DCMAKE_BUILD_TYPE=RelWithDebInfo)
60+
endif()
61+
62+
if(DEFINED TFM_BUILD_PROFILE)
63+
set(TFM_PROFILE_ARG -DTFM_PROFILE=${TFM_BUILD_PROFILE})
64+
endif()
65+
66+
67+
set(VENEERS_FILE ${TFM_BINARY_DIR}/secure_fw/s_veneers.o)
68+
set(PSA_API_NS_PATH ${TFM_BINARY_DIR}/interface/libpsa_api_ns.a)
69+
set(TFM_GENERATED_INCLUDES ${TFM_BINARY_DIR}/generated/interface/include)
70+
71+
if(TFM_BL2)
72+
set(BL2_BIN_FILE ${TFM_BINARY_DIR}/bin/bl2.bin)
73+
set(BL2_HEX_FILE ${TFM_BINARY_DIR}/bin/bl2.hex)
74+
endif()
75+
set(TFM_S_BIN_FILE ${TFM_BINARY_DIR}/bin/tfm_s.bin)
76+
set(TFM_S_HEX_FILE ${TFM_BINARY_DIR}/bin/tfm_s.hex)
77+
set(TFM_NS_BIN_FILE ${TFM_BINARY_DIR}/bin/tfm_ns.bin)
78+
set(TFM_NS_HEX_FILE ${TFM_BINARY_DIR}/bin/tfm_ns.hex)
79+
set(TFM_S_SIGNED_BIN_FILE ${TFM_BINARY_DIR}/bin/tfm_s_signed.bin)
80+
set(TFM_NS_SIGNED_BIN_FILE ${TFM_BINARY_DIR}/bin/tfm_ns_signed.bin)
81+
set(TFM_S_NS_SIGNED_BIN_FILE ${TFM_BINARY_DIR}/bin/tfm_s_ns_signed.bin)
82+
83+
set(BUILD_BYPRODUCTS
84+
${VENEERS_FILE}
85+
${PSA_API_NS_PATH}
86+
${TFM_GENERATED_INCLUDES}/psa_manifest/sid.h
87+
${BL2_BIN_FILE}
88+
${BL2_HEX_FILE}
89+
${TFM_S_BIN_FILE}
90+
${TFM_S_HEX_FILE}
91+
${TFM_NS_BIN_FILE}
92+
${TFM_NS_HEX_FILE}
93+
${TFM_S_SIGNED_BIN_FILE}
94+
${TFM_NS_SIGNED_BIN_FILE}
95+
${TFM_S_NS_SIGNED_BIN_FILE}
96+
)
97+
98+
# Get the toolchain variant
99+
# TODO: Add support for cross-compile toolchain variant
100+
# TODO: Enforce GCC version check against TF-M compiler requirements
101+
if(${ZEPHYR_TOOLCHAIN_VARIANT} STREQUAL "zephyr")
102+
set(TFM_TOOLCHAIN_FILE "trusted-firmware-m/toolchain_GNUARM.cmake")
103+
set(TFM_TOOLCHAIN_PREFIX "arm-zephyr-eabi")
104+
set(TFM_TOOLCHAIN_PATH ${ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi/bin)
105+
elseif(${ZEPHYR_TOOLCHAIN_VARIANT} STREQUAL "gnuarmemb")
106+
set(TFM_TOOLCHAIN_FILE "trusted-firmware-m/toolchain_GNUARM.cmake")
107+
set(TFM_TOOLCHAIN_PREFIX "arm-none-eabi")
108+
set(TFM_TOOLCHAIN_PATH ${GNUARMEMB_TOOLCHAIN_PATH}/bin)
109+
else()
110+
message(FATAL_ERROR "Unsupported ZEPHYR_TOOLCHAIN_VARIANT: ${ZEPHYR_TOOLCHAIN_VARIANT}")
111+
endif()
112+
113+
include(ExternalProject)
114+
115+
ExternalProject_Add(
116+
tfm
117+
SOURCE_DIR ${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m
118+
BINARY_DIR ${TFM_BINARY_DIR}
119+
CMAKE_ARGS -DTFM_TOOLCHAIN_FILE=${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/${TFM_TOOLCHAIN_FILE}
120+
-DTFM_PLATFORM=${TFM_BOARD}
121+
-DCROSS_COMPILE=${TFM_TOOLCHAIN_PATH}/${TFM_TOOLCHAIN_PREFIX}
122+
${TFM_CMAKE_BUILD_TYPE_ARG}
123+
${TFM_BL2_ARG}
124+
${TFM_IPC_ARG}
125+
${TFM_ISOLATION_LEVEL_ARG}
126+
${TFM_REGRESSION_ARG}
127+
${TFM_PROFILE_ARG}
128+
-DTFM_TEST_REPO_PATH=${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/tf-m-tests
129+
-DMCUBOOT_PATH=${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/../tfm-mcuboot
130+
BUILD_ALWAYS True
131+
USES_TERMINAL_BUILD True
132+
BUILD_BYPRODUCTS ${BUILD_BYPRODUCTS}
133+
)
134+
135+
# Set BL2 (MCUboot) executable file paths as target properties on 'tfm'
136+
# These files are produced by the TFM build system.
137+
if(TFM_BL2)
138+
set_target_properties(tfm PROPERTIES
139+
BL2_BIN_FILE ${BL2_BIN_FILE}
140+
BL2_HEX_FILE ${BL2_HEX_FILE}
141+
)
142+
endif()
143+
144+
# Set TFM S/NS executable file paths as target properties on 'tfm'
145+
# These files are produced by the TFM build system.
146+
# Note that the Nonsecure FW is replaced by the Zephyr app in regular Zephyr
147+
# builds.
148+
set_target_properties(tfm PROPERTIES
149+
TFM_S_BIN_FILE ${TFM_S_BIN_FILE} # TFM Secure FW (unsigned)
150+
TFM_S_HEX_FILE ${TFM_S_HEX_FILE} # TFM Secure FW (unsigned)
151+
TFM_NS_BIN_FILE ${TFM_NS_BIN_FILE} # TFM Nonsecure FW (unsigned)
152+
TFM_NS_HEX_FILE ${TFM_NS_HEX_FILE} # TFM Nonsecure FW (unsigned)
153+
TFM_S_SIGNED_BIN_FILE ${TFM_S_SIGNED_BIN_FILE} # TFM Secure FW (signed)
154+
TFM_NS_SIGNED_BIN_FILE ${TFM_NS_SIGNED_BIN_FILE} # TFM Nonsecure FW (signed)
155+
TFM_S_NS_SIGNED_BIN_FILE ${TFM_S_NS_SIGNED_BIN_FILE} # Merged TFM Secure/Nonsecure FW (signed)
156+
)
157+
158+
add_library(tfm_api
159+
${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/tf-m-tests/app/os_wrapper_cmsis_rtos_v2.c
160+
)
161+
162+
target_include_directories(tfm_api
163+
PRIVATE
164+
${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/tf-m-tests/CMSIS/RTOS2/Include
165+
PUBLIC
166+
${ZEPHYR_TRUSTED_FIRMWARE_M_MODULE_DIR}/trusted-firmware-m/interface/include
167+
INTERFACE
168+
${TFM_GENERATED_INCLUDES}
169+
)
170+
171+
target_link_libraries(tfm_api
172+
PUBLIC
173+
zephyr_interface
174+
INTERFACE
175+
${PSA_API_NS_PATH}
176+
${VENEERS_FILE}
177+
$<TARGET_FILE:tfm_api>
178+
)
179+
180+
add_dependencies(tfm_api tfm)
181+
endfunction()
182+
183+
if (CONFIG_BUILD_WITH_TFM)
184+
if (CONFIG_TFM_IPC)
185+
set(TFM_IPC_ARG IPC)
186+
endif()
187+
if (CONFIG_TFM_REGRESSION)
188+
set(TFM_REGRESSION_ARG REGRESSION)
189+
endif()
190+
if (CONFIG_TFM_BL2_TRUE)
191+
set(TFM_BL2_ARG BL2 True)
192+
elseif (CONFIG_TFM_BL2_FALSE)
193+
set(TFM_BL2_ARG BL2 False)
194+
endif()
195+
if (CONFIG_TFM_ISOLATION_LEVEL)
196+
set(TFM_ISOLATION_LEVEL_ARG ISOLATION_LEVEL ${CONFIG_TFM_ISOLATION_LEVEL})
197+
endif()
198+
if (CONFIG_TFM_PROFILE)
199+
set(TFM_PROFILE_ARG BUILD_PROFILE ${CONFIG_TFM_PROFILE})
200+
endif()
201+
202+
trusted_firmware_build(
203+
BINARY_DIR ${CMAKE_BINARY_DIR}/tfm
204+
BOARD ${CONFIG_TFM_BOARD}
205+
${TFM_ISOLATION_LEVEL_ARG}
206+
${TFM_PROFILE_ARG}
207+
${TFM_BL2_ARG}
208+
${TFM_IPC_ARG}
209+
${TFM_REGRESSION_ARG}
210+
)
211+
212+
zephyr_link_libraries(tfm_api)
213+
endif()

0 commit comments

Comments
 (0)