blob: b33440029a96766faa1c3f2d7b8a42092c492317 [file] [log] [blame]
Anton Komlevaee4b612023-05-14 17:38:36 +01001#-------------------------------------------------------------------------------
Raef Coles09dcd162024-12-09 15:40:53 +00002# SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors
Anton Komlevaee4b612023-05-14 17:38:36 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
David Hu1249f0d2023-12-04 22:57:56 +08007cmake_minimum_required(VERSION 3.21)
Anton Komlevaee4b612023-05-14 17:38:36 +01008
9# This CMake script is prepard by TF-M for building the non-secure side
10# application and not used in secure build a tree being for export only.
11# This file is renamed to spe/CMakeList.txt during installation phase
12
13include(spe_config)
14include(spe_export)
15
Antonio de Angelis8bb98512024-01-16 14:13:36 +000016set_target_properties(tfm_config psa_interface psa_crypto_config PROPERTIES IMPORTED_GLOBAL True)
Anton Komlevaee4b612023-05-14 17:38:36 +010017target_link_libraries(tfm_config INTERFACE psa_interface)
18
David Hub27a6632023-10-23 22:38:39 +080019# In actual NS integration, NS side build should include the source files
20# exported by TF-M build.
21set(INTERFACE_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}/interface/src)
22set(INTERFACE_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/interface/include)
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010023set(PLATFORM_DIR ${CMAKE_CURRENT_LIST_DIR}/platform)
Gergely Kovacs4d50f252024-10-07 10:23:36 +000024if (DEFINED NS_TARGET_NAME)
25 message(STATUS "Using NS_TARGET_NAME: ${NS_TARGET_NAME}")
26else()
27 set(NS_TARGET_NAME "tfm_ns")
28endif()
Anton Komlevaee4b612023-05-14 17:38:36 +010029
David Hub27a6632023-10-23 22:38:39 +080030add_library(tfm_api_ns STATIC)
Anton Komlevaee4b612023-05-14 17:38:36 +010031
32target_sources(tfm_api_ns
David Hu0a07b632023-10-16 15:25:20 +080033 PUBLIC
David Hub27a6632023-10-23 22:38:39 +080034 $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${INTERFACE_SRC_DIR}/tfm_platform_api.c>
35 $<$<BOOL:${TFM_PARTITION_PROTECTED_STORAGE}>:${INTERFACE_SRC_DIR}/tfm_ps_api.c>
36 $<$<BOOL:${TFM_PARTITION_INTERNAL_TRUSTED_STORAGE}>:${INTERFACE_SRC_DIR}/tfm_its_api.c>
37 $<$<BOOL:${TFM_PARTITION_CRYPTO}>:${INTERFACE_SRC_DIR}/tfm_crypto_api.c>
38 $<$<BOOL:${TFM_PARTITION_INITIAL_ATTESTATION}>:${INTERFACE_SRC_DIR}/tfm_attest_api.c>
39 $<$<BOOL:${TFM_PARTITION_FIRMWARE_UPDATE}>:${INTERFACE_SRC_DIR}/tfm_fwu_api.c>
Anton Komlevaee4b612023-05-14 17:38:36 +010040)
41
David Hub27a6632023-10-23 22:38:39 +080042# Include interface headers exported by TF-M
Anton Komlevaee4b612023-05-14 17:38:36 +010043target_include_directories(tfm_api_ns
44 PUBLIC
David Hub27a6632023-10-23 22:38:39 +080045 ${INTERFACE_INC_DIR}
46 ${INTERFACE_INC_DIR}/crypto_keys
Anton Komlevaee4b612023-05-14 17:38:36 +010047)
48
Jamie Foxc0489cc2023-11-28 17:55:36 +000049if (CONFIG_TFM_USE_TRUSTZONE)
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010050 add_library(tfm_api_ns_tz STATIC)
Jamie Foxc0489cc2023-11-28 17:55:36 +000051
52 target_sources(tfm_api_ns_tz
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010053 PUBLIC
Jamie Foxc0489cc2023-11-28 17:55:36 +000054 ${INTERFACE_SRC_DIR}/tfm_tz_psa_ns_api.c
55 )
56
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010057 target_include_directories(tfm_api_ns_tz
58 PUBLIC
59 ${INTERFACE_INC_DIR}
60 )
61
Jamie Foxc0489cc2023-11-28 17:55:36 +000062 target_link_libraries(tfm_api_ns_tz
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010063 PRIVATE
Jamie Foxc0489cc2023-11-28 17:55:36 +000064 ${CMAKE_CURRENT_SOURCE_DIR}/interface/lib/s_veneers.o
65 )
66endif()
67
68if (TFM_PARTITION_NS_AGENT_MAILBOX)
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010069 add_library(tfm_api_ns_mailbox STATIC)
Jamie Foxc0489cc2023-11-28 17:55:36 +000070
71 target_sources(tfm_api_ns_mailbox
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010072 PUBLIC
Jamie Foxc0489cc2023-11-28 17:55:36 +000073 ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_ns_api.c
74 ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_psa_ns_api.c
75 )
76
77 target_include_directories(tfm_api_ns_mailbox
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010078 PUBLIC
79 ${INTERFACE_INC_DIR}
Jamie Foxc0489cc2023-11-28 17:55:36 +000080 ${INTERFACE_INC_DIR}/multi_core
Nicola Mazzucato1d39bd02025-06-06 20:41:10 +010081 ${PLATFORM_DIR}/ext/cmsis/Include
Jamie Foxc0489cc2023-11-28 17:55:36 +000082 )
83endif()
84
Antonio de Angelis8bb98512024-01-16 14:13:36 +000085if (TFM_PARTITION_CRYPTO)
86 target_link_libraries(tfm_api_ns
87 PUBLIC
88 psa_crypto_config
89 )
90endif()
91
David Hu35aa1a52023-10-24 23:04:04 +080092add_library(platform_region_defs INTERFACE)
93
94target_compile_definitions(platform_region_defs
95 INTERFACE
96 $<$<BOOL:${BL1}>:BL1>
97 $<$<BOOL:${BL2}>:BL2>
98 BL2_HEADER_SIZE=${BL2_HEADER_SIZE}
99 BL2_TRAILER_SIZE=${BL2_TRAILER_SIZE}
David Hu35aa1a52023-10-24 23:04:04 +0800100 $<$<BOOL:${MCUBOOT_IMAGE_NUMBER}>:MCUBOOT_IMAGE_NUMBER=${MCUBOOT_IMAGE_NUMBER}>
Dávid Házi78157732024-07-11 22:18:42 +0200101 $<$<STREQUAL:${MCUBOOT_EXECUTION_SLOT},2>:LINK_TO_SECONDARY_PARTITION>
David Hu35aa1a52023-10-24 23:04:04 +0800102 $<$<BOOL:${TEST_PSA_API}>:PSA_API_TEST_${TEST_PSA_API}>
103 $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:ENABLE_HEAP>
104)
105
106target_link_libraries(platform_region_defs
107 INTERFACE
108 tfm_config
109)
110
Anton Komlevaee4b612023-05-14 17:38:36 +0100111add_subdirectory(platform)
112
David Hub27a6632023-10-23 22:38:39 +0800113target_sources(platform_ns
114 PRIVATE
115 $<$<BOOL:${PLATFORM_DEFAULT_UART_STDOUT}>:${CMAKE_CURRENT_SOURCE_DIR}/platform/ext/common/uart_stdout.c>
116)
117
Gergely Kovacs5206a412024-10-14 09:49:57 +0000118add_library(platform_ns_definitions INTERFACE)
119
120# these compile definitions must match on the secure and nonsecure side for security
121target_compile_definitions(platform_ns_definitions
122 INTERFACE
Kevin Peng7dc0ebf2023-11-14 14:31:31 +0800123 DOMAIN_NS=1
Anton Komlev8dc9eb22023-09-15 15:53:03 +0100124 $<$<BOOL:${PLATFORM_DEFAULT_CRYPTO_KEYS}>:PLATFORM_DEFAULT_CRYPTO_KEYS>
125 $<$<STREQUAL:${CONFIG_TFM_FLOAT_ABI},hard>:CONFIG_TFM_FLOAT_ABI=2>
126 $<$<STREQUAL:${CONFIG_TFM_FLOAT_ABI},soft>:CONFIG_TFM_FLOAT_ABI=0>
Roman Mazurak0a79e672024-08-14 16:48:13 +0300127 $<$<BOOL:${CONFIG_TFM_DISABLE_CP10CP11}>:CONFIG_TFM_DISABLE_CP10CP11>
Anton Komlev8dc9eb22023-09-15 15:53:03 +0100128 $<$<BOOL:${CONFIG_TFM_ENABLE_CP10CP11}>:CONFIG_TFM_ENABLE_CP10CP11>
129)
130
Gergely Kovacs5206a412024-10-14 09:49:57 +0000131target_link_libraries(platform_ns
132 PUBLIC
133 platform_ns_definitions
134)
135
136if (DEFINED PLATFORM_CUSTOM_NS_FILES)
137 message(STATUS "Using PLATFORM_CUSTOM_NS_FILES: ${PLATFORM_CUSTOM_NS_FILES}")
138else()
139 set(PLATFORM_CUSTOM_NS_FILES FALSE)
140endif()
141
Anton Komlevaee4b612023-05-14 17:38:36 +0100142target_link_libraries(tfm_api_ns
143 PUBLIC
David Hu35aa1a52023-10-24 23:04:04 +0800144 platform_region_defs
Gergely Kovacs5206a412024-10-14 09:49:57 +0000145 platform_ns_definitions
146 $<$<NOT:$<BOOL:${PLATFORM_CUSTOM_NS_FILES}>>:platform_ns>
Anton Komlevaee4b612023-05-14 17:38:36 +0100147)
148
Dávid Házi34cf9b92023-10-11 11:10:41 +0200149if(BL2 AND PLATFORM_DEFAULT_IMAGE_SIGNING)
Anton Komlevaee4b612023-05-14 17:38:36 +0100150
David Hua5fefdc2023-11-03 13:24:41 +0800151 find_package(Python3)
152
David Hua01be0a2023-10-25 23:08:10 +0800153 add_custom_target(tfm_s_ns_signed_bin
154 ALL
Dávid Házi1a72fd42024-03-06 18:33:45 +0100155 SOURCES ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800156 )
157
Gergely Kovacsaae6d782024-10-11 07:21:30 +0000158 if (DEFINED S_NS_SIGNED_TARGET_NAME)
159 message(STATUS "Using S_NS_SIGNED_TARGET_NAME: ${S_NS_SIGNED_TARGET_NAME}")
160 else()
161 set(S_NS_SIGNED_TARGET_NAME tfm_s_ns_signed)
162 endif()
163
164 add_custom_command(
165 TARGET tfm_s_ns_signed_bin
166 POST_BUILD
167 COMMAND ${CMAKE_COMMAND} -E copy
168 ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000169 $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${S_NS_SIGNED_TARGET_NAME}.bin
Gergely Kovacsaae6d782024-10-11 07:21:30 +0000170 )
171
Dávid Házi34cf9b92023-10-11 11:10:41 +0200172 if (MCUBOOT_IMAGE_NUMBER GREATER 1)
Anton Komlevaee4b612023-05-14 17:38:36 +0100173
Maulik Pateld1afad02025-04-14 13:04:35 +0100174 set(wrapper_args
175 --version ${MCUBOOT_IMAGE_VERSION_NS}
176 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_ns.o
177 --key ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_ns_signing_private_key.pem
178 --public-key-format $<IF:$<BOOL:${MCUBOOT_HW_KEY}>,full,hash>
179 --align ${MCUBOOT_ALIGN_VAL}
180 --pad
181 --pad-header
182 -H ${BL2_HEADER_SIZE}
183 -s ${MCUBOOT_SECURITY_COUNTER_NS}
184 -L ${MCUBOOT_ENC_KEY_LEN}
185 -d \"\(0, ${MCUBOOT_S_IMAGE_MIN_VER}\)\"
186 $<$<STREQUAL:${MCUBOOT_UPGRADE_STRATEGY},OVERWRITE_ONLY>:--overwrite-only>
187 $<$<BOOL:${MCUBOOT_CONFIRM_IMAGE}>:--confirm>
188 $<$<BOOL:${MCUBOOT_ENC_IMAGES}>:-E${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_enc_key.pem>
189 $<$<BOOL:${MCUBOOT_MEASURED_BOOT}>:--measured-boot-record>
190 $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
191 ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
192 )
193
194 if(MCUBOOT_BUILTIN_KEY)
Maulik Pateld1afad02025-04-14 13:04:35 +0100195 set(wrapper_args ${wrapper_args} --psa-key-ids ${TFM_NS_KEY_ID})
196 endif()
197
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000198 add_custom_target(${NS_TARGET_NAME}_signed_bin
199 SOURCES ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800200 )
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000201 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
Anton Komlevc88e2ac2024-09-12 16:46:39 +0100202 DEPENDS ${NS_TARGET_NAME}_bin
David Hua01be0a2023-10-25 23:08:10 +0800203 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_ns.o
David Hub5f10a52023-10-26 22:24:10 +0800204 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100205
Dávid Házi34cf9b92023-10-11 11:10:41 +0200206 #Sign non-secure binary image with provided secret key
Maulik Pateld1afad02025-04-14 13:04:35 +0100207 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/wrapper/wrapper.py ${wrapper_args}
David Hua01be0a2023-10-25 23:08:10 +0800208 )
Anton Komlevaee4b612023-05-14 17:38:36 +0100209
David Hua01be0a2023-10-25 23:08:10 +0800210 # Create concatenated binary image from the two independently signed
211 # binary file. This only uses the local assemble.py script (not from
212 # upstream mcuboot) because that script is geared towards zephyr
213 # support
Dávid Házi1a72fd42024-03-06 18:33:45 +0100214 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800215 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s_signed.bin
Anton Komlevc88e2ac2024-09-12 16:46:39 +0100216 DEPENDS ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800217 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s.o
David Hub5f10a52023-10-26 22:24:10 +0800218 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
David Hua01be0a2023-10-25 23:08:10 +0800219
Dávid Házi34cf9b92023-10-11 11:10:41 +0200220 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/assemble.py
221 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s.o
222 --secure ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s_signed.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000223 --non_secure ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100224 --output ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
Dávid Házi34cf9b92023-10-11 11:10:41 +0200225 )
226 else()
David Hua01be0a2023-10-25 23:08:10 +0800227 add_custom_target(tfm_s_ns_bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100228 SOURCES ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800229 )
Dávid Házi1a72fd42024-03-06 18:33:45 +0100230 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800231 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s.bin
Anton Komlev8ab4f042025-06-03 21:13:07 +0100232 DEPENDS ${NS_TARGET_NAME}_bin
David Hub5f10a52023-10-26 22:24:10 +0800233 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
234 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100235
Dávid Házi34cf9b92023-10-11 11:10:41 +0200236 # concatenate S + NS binaries into tfm_s_ns.bin
237 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/assemble.py
David Hub5f10a52023-10-26 22:24:10 +0800238 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
Dávid Házi34cf9b92023-10-11 11:10:41 +0200239 --secure ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000240 --non_secure $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100241 --output ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800242 )
243
Maulik Patel439be352025-04-15 14:34:28 +0100244 set(wrapper_args
245 --version ${MCUBOOT_IMAGE_VERSION_S}
246 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
247 --key ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_s_signing_private_key.pem
248 --public-key-format $<IF:$<BOOL:${MCUBOOT_HW_KEY}>,full,hash>
249 --align ${MCUBOOT_ALIGN_VAL}
250 --pad
251 --pad-header
252 -H ${BL2_HEADER_SIZE}
253 -s ${MCUBOOT_SECURITY_COUNTER_S}
254 -L ${MCUBOOT_ENC_KEY_LEN}
255 $<$<STREQUAL:${MCUBOOT_UPGRADE_STRATEGY},OVERWRITE_ONLY>:--overwrite-only>
256 $<$<BOOL:${MCUBOOT_CONFIRM_IMAGE}>:--confirm>
257 $<$<BOOL:${MCUBOOT_ENC_IMAGES}>:-E${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_enc_key.pem>
258 $<$<BOOL:${MCUBOOT_MEASURED_BOOT}>:--measured-boot-record>
259 ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
260 ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
261 )
262
263 if(MCUBOOT_BUILTIN_KEY)
264 set(wrapper_args ${wrapper_args} --psa-key-ids ${TFM_S_KEY_ID})
265 endif()
266
Dávid Házi1a72fd42024-03-06 18:33:45 +0100267 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
268 DEPENDS tfm_s_ns_bin ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hub5f10a52023-10-26 22:24:10 +0800269 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
David Hub5f10a52023-10-26 22:24:10 +0800270 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100271
Dávid Házi34cf9b92023-10-11 11:10:41 +0200272 # sign the combined tfm_s_ns.bin file
273 COMMAND ${Python3_EXECUTABLE}
274 ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/wrapper/wrapper.py
Maulik Patel439be352025-04-15 14:34:28 +0100275 ${wrapper_args}
Dávid Házi34cf9b92023-10-11 11:10:41 +0200276 )
277 endif()
Anton Komlevaee4b612023-05-14 17:38:36 +0100278endif()