Skip to content

Commit faf312c

Browse files
committed
trusted-firmware-m: updates in CMakeLists due to upstream TF-M upmerge
Required updates in CMakeLists.txt due to the upmerge to the latest TF-M, which contains the migration to the new build system. Signed-off-by: Ioannis Glaropoulos <[email protected]>
1 parent 5697c95 commit faf312c

File tree

1 file changed

+63
-31
lines changed

1 file changed

+63
-31
lines changed

CMakeLists.txt

Lines changed: 63 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Copyright (c) 2019, 2020 Linaro
2+
# Copyright (c) 2020, Nordic Semiconductor ASA
23
#
34
# SPDX-License-Identifier: Apache-2.0
45

@@ -12,9 +13,11 @@ cmake_minimum_required(VERSION 3.13.1)
1213
#
1314
# BINARY_DIR: The location where the build outputs will be written
1415
# BOARD: The string identifying the board target for TF-M (AN521, etc.)
15-
# CFGFILE: The TF-M config file to use, without the .cmake extension
16+
# CMAKE_BUILD_TYPE: The TF-M build type to use, (Debug, Release, etc.)
1617
# IPC: Build TFM IPC library. This library allows a non-secure application to
1718
# interface to secure domain using IPC.
19+
# ISOLATION_LEVEL: The TF-M isolation level to use
20+
# REGRESSION: Boolean if TF-M build includes building the TF-M regression tests
1821
# BL2: Boolean if build uses MCUboot.
1922
#
2023
# The following output values can also be used:
@@ -26,33 +29,58 @@ cmake_minimum_required(VERSION 3.13.1)
2629
# Example usage:
2730
#
2831
# trusted_firmware_build(BINARY_DIR ${CMAKE_BINARY_DIR}/tfm
29-
# BOARD ${TFMBOARD}
30-
# CFGFILE "ConfigRegressionIPC"
31-
# OUT_VENEERS_FILE VENEERS_FILE
32-
# OUT_INCLUDE_PATH TFM_INCLUDE_PATH
33-
# BL2 True)
32+
# BOARD ${TFM_TARGET_PLATFORM}
33+
# CMAKE_BUILD_TYPE Release
34+
# IPC
35+
# ISOLATION_LEVEL 2
36+
# REGRESSION
37+
# BL2 True
3438
function(trusted_firmware_build)
35-
set(options IPC)
36-
set(oneValueArgs BINARY_DIR BOARD CFGFILE OUT_VENEERS_FILE OUT_INCLUDE_PATH BL2)
39+
set(options IPC REGRESSION)
40+
set(oneValueArgs BINARY_DIR BOARD OUT_INCLUDE_PATH BL2 ISOLATION_LEVEL CMAKE_BUILD_TYPE)
3741
cmake_parse_arguments(TFM "${options}" "${oneValueArgs}" "" ${ARGN})
3842

3943
if(DEFINED TFM_BL2)
4044
set(TFM_BL2_ARG "-DBL2=${TFM_BL2}")
4145
endif()
4246

43-
set(VENEERS_FILE ${TFM_BINARY_DIR}/install/export/tfm/veneers/s_veneers.o)
47+
if(DEFINED TFM_IPC)
48+
set(TFM_IPC_ARG -DTFM_PSA_API=ON)
49+
# PSA API awareness for the Non-Secure application
50+
target_compile_definitions(app PRIVATE "TFM_PSA_API")
51+
endif()
52+
53+
if(DEFINED TFM_ISOLATION_LEVEL)
54+
set(TFM_ISOLATION_LEVEL_ARG -DTFM_ISOLATION_LEVEL=${TFM_ISOLATION_LEVEL})
55+
endif()
56+
57+
if(DEFINED TFM_REGRESSION)
58+
set(TFM_REGRESSION_ARG -DTEST_S=ON -DTEST_NS=ON)
59+
endif()
60+
61+
if(DEFINED TFM_CMAKE_BUILD_TYPE)
62+
set(TFM_CMAKE_BUILD_TYPE_ARG -DCMAKE_BUILD_TYPE=${TFM_CMAKE_BUILD_TYPE})
63+
else()
64+
set(TFM_CMAKE_BUILD_TYPE_ARG -DCMAKE_BUILD_TYPE=RelWithDebInfo)
65+
endif()
66+
67+
set(VENEERS_FILE ${TFM_BINARY_DIR}/secure_fw/s_veneers.o)
4468
set(${TFM_OUT_VENEERS_FILE} ${VENEERS_FILE} PARENT_SCOPE)
4569
set(${TFM_OUT_INCLUDE_PATH} ${TFM_BINARY_DIR}/install/export/tfm/include PARENT_SCOPE)
4670

71+
set(PSA_API_NS_PATH ${TFM_BINARY_DIR}/interface/libpsa_api_ns.a)
72+
4773
# Get the toolchain variant
4874
# TODO: Add support for cross-compile toolchain variant
4975
# TODO: Enforce GCC version check against TF-M compiler requirements
5076
if(${ZEPHYR_TOOLCHAIN_VARIANT} STREQUAL "zephyr")
5177
set(TFM_TOOLCHAIN "GNUARM")
78+
set(CMAKE_TOOLCHAIN_FILE "trusted-firmware-m/toolchain_GNUARM.cmake")
5279
set(TFM_TOOLCHAIN_PREFIX "arm-zephyr-eabi")
5380
set(TFM_TOOLCHAIN_PATH ${ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi)
5481
elseif(${ZEPHYR_TOOLCHAIN_VARIANT} STREQUAL "gnuarmemb")
5582
set(TFM_TOOLCHAIN "GNUARM")
83+
set(CMAKE_TOOLCHAIN_FILE "trusted-firmware-m/toolchain_GNUARM.cmake")
5684
set(TFM_TOOLCHAIN_PREFIX "arm-none-eabi")
5785
set(TFM_TOOLCHAIN_PATH ${GNUARMEMB_TOOLCHAIN_PATH})
5886
else()
@@ -65,33 +93,37 @@ function(trusted_firmware_build)
6593
tfm
6694
SOURCE_DIR ${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m
6795
BINARY_DIR ${TFM_BINARY_DIR}
68-
CMAKE_ARGS -DPROJ_CONFIG=${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/configs/${TFM_CFGFILE}.cmake
69-
-DTARGET_PLATFORM=${TFM_BOARD}
96+
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${ZEPHYR_TFM_MODULE_DIR}/${CMAKE_TOOLCHAIN_FILE}
97+
-DTFM_PLATFORM=${TFM_BOARD}
98+
${TFM_CMAKE_BUILD_TYPE_ARG}
7099
${TFM_BL2_ARG}
71-
-DCOMPILER=${TFM_TOOLCHAIN}
72-
-DGNUARM_PREFIX=${TFM_TOOLCHAIN_PREFIX}
73-
-DGNUARM_PATH=${TFM_TOOLCHAIN_PATH}
100+
${TFM_IPC_ARG}
101+
${TFM_ISOLATION_LEVEL_ARG}
102+
${TFM_REGRESSION_ARG}
103+
-DTFM_TEST_REPO_PATH=${ZEPHYR_TFM_MODULE_DIR}/tf-m-tests
74104
BUILD_ALWAYS True
75105
USES_TERMINAL_BUILD True
76-
BUILD_BYPRODUCTS ${VENEERS_FILE}
106+
BUILD_BYPRODUCTS ${VENEERS_FILE} ${PSA_API_NS_PATH}
77107
)
78108

79-
set(TFM_INTERFACE_SOURCE ${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/interface/src)
80-
81109
# IPC mode source dependencies
82-
if(TFM_IPC)
83-
add_library(tfm_ipc_psa_api
84-
${TFM_INTERFACE_SOURCE}/tfm_psa_ns_api.c
85-
${TFM_INTERFACE_SOURCE}/tfm_crypto_ipc_api.c
86-
${TFM_INTERFACE_SOURCE}/tfm_initial_attestation_ipc_api.c
87-
${TFM_INTERFACE_SOURCE}/tfm_its_ipc_api.c
88-
${TFM_INTERFACE_SOURCE}/tfm_platform_ipc_api.c
89-
${TFM_INTERFACE_SOURCE}/tfm_ps_ipc_api.c
90-
${TFM_INTERFACE_SOURCE}/tfm_ns_interface.c
91-
)
92-
target_include_directories(tfm_ipc_psa_api PUBLIC ${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/interface/include)
93-
target_compile_definitions(tfm_ipc_psa_api PUBLIC TFM_PSA_API TFM_PARTITION_TEST_CORE_IPC)
94-
target_link_libraries(tfm_ipc_psa_api PRIVATE zephyr_interface)
95-
endif()
110+
add_library(tfm_api STATIC IMPORTED)
111+
set_target_properties(tfm_api PROPERTIES
112+
IMPORTED_LOCATION ${PSA_API_NS_PATH}
113+
)
114+
115+
add_library(veneer_lib STATIC IMPORTED)
116+
set_target_properties(veneer_lib PROPERTIES
117+
IMPORTED_LOCATION ${VENEERS_FILE}
118+
)
119+
120+
add_dependencies(tfm_api tfm)
121+
file(MAKE_DIRECTORY ${TFM_BINARY_DIR}/generated/interface/include)
122+
target_include_directories(tfm_api INTERFACE
123+
${ZEPHYR_TFM_MODULE_DIR}/trusted-firmware-m/interface/include
124+
${TFM_BINARY_DIR}/generated/interface/include
125+
)
126+
127+
target_link_libraries(tfm_api INTERFACE zephyr_interface veneer_lib)
96128

97129
endfunction()

0 commit comments

Comments
 (0)