blob: dab61159899d076f9825b5fdb04cd2679aa35181 [file] [log] [blame]
Anton Komlevaee4b612023-05-14 17:38:36 +01001#-------------------------------------------------------------------------------
Dávid Házi1a72fd42024-03-06 18:33:45 +01002# Copyright (c) 2023-2024, Arm Limited. All rights reserved.
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)
Gergely Kovacs4d50f252024-10-07 10:23:36 +000023if (DEFINED NS_TARGET_NAME)
24 message(STATUS "Using NS_TARGET_NAME: ${NS_TARGET_NAME}")
25else()
26 set(NS_TARGET_NAME "tfm_ns")
27endif()
Anton Komlevaee4b612023-05-14 17:38:36 +010028
David Hub27a6632023-10-23 22:38:39 +080029add_library(tfm_api_ns STATIC)
Anton Komlevaee4b612023-05-14 17:38:36 +010030
31target_sources(tfm_api_ns
David Hu0a07b632023-10-16 15:25:20 +080032 PUBLIC
David Hub27a6632023-10-23 22:38:39 +080033 $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${INTERFACE_SRC_DIR}/tfm_platform_api.c>
34 $<$<BOOL:${TFM_PARTITION_PROTECTED_STORAGE}>:${INTERFACE_SRC_DIR}/tfm_ps_api.c>
35 $<$<BOOL:${TFM_PARTITION_INTERNAL_TRUSTED_STORAGE}>:${INTERFACE_SRC_DIR}/tfm_its_api.c>
36 $<$<BOOL:${TFM_PARTITION_CRYPTO}>:${INTERFACE_SRC_DIR}/tfm_crypto_api.c>
37 $<$<BOOL:${TFM_PARTITION_INITIAL_ATTESTATION}>:${INTERFACE_SRC_DIR}/tfm_attest_api.c>
38 $<$<BOOL:${TFM_PARTITION_FIRMWARE_UPDATE}>:${INTERFACE_SRC_DIR}/tfm_fwu_api.c>
Anton Komlevaee4b612023-05-14 17:38:36 +010039)
40
David Hub27a6632023-10-23 22:38:39 +080041# Include interface headers exported by TF-M
Anton Komlevaee4b612023-05-14 17:38:36 +010042target_include_directories(tfm_api_ns
43 PUBLIC
David Hub27a6632023-10-23 22:38:39 +080044 ${INTERFACE_INC_DIR}
45 ${INTERFACE_INC_DIR}/crypto_keys
Anton Komlevaee4b612023-05-14 17:38:36 +010046)
47
Jamie Foxc0489cc2023-11-28 17:55:36 +000048if (CONFIG_TFM_USE_TRUSTZONE)
49 add_library(tfm_api_ns_tz INTERFACE)
50
51 target_sources(tfm_api_ns_tz
52 INTERFACE
53 ${INTERFACE_SRC_DIR}/tfm_tz_psa_ns_api.c
54 )
55
56 target_link_libraries(tfm_api_ns_tz
57 INTERFACE
58 ${CMAKE_CURRENT_SOURCE_DIR}/interface/lib/s_veneers.o
59 )
60endif()
61
62if (TFM_PARTITION_NS_AGENT_MAILBOX)
63 add_library(tfm_api_ns_mailbox INTERFACE)
64
65 target_sources(tfm_api_ns_mailbox
66 INTERFACE
67 ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_ns_api.c
68 ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_psa_ns_api.c
69 )
70
71 target_include_directories(tfm_api_ns_mailbox
72 INTERFACE
73 ${INTERFACE_INC_DIR}/multi_core
74 )
75endif()
76
Antonio de Angelis8bb98512024-01-16 14:13:36 +000077if (TFM_PARTITION_CRYPTO)
78 target_link_libraries(tfm_api_ns
79 PUBLIC
80 psa_crypto_config
81 )
82endif()
83
David Hu35aa1a52023-10-24 23:04:04 +080084add_library(platform_region_defs INTERFACE)
85
86target_compile_definitions(platform_region_defs
87 INTERFACE
88 $<$<BOOL:${BL1}>:BL1>
89 $<$<BOOL:${BL2}>:BL2>
90 BL2_HEADER_SIZE=${BL2_HEADER_SIZE}
91 BL2_TRAILER_SIZE=${BL2_TRAILER_SIZE}
92 BL1_HEADER_SIZE=${BL1_HEADER_SIZE}
93 BL1_TRAILER_SIZE=${BL1_TRAILER_SIZE}
94 $<$<BOOL:${MCUBOOT_IMAGE_NUMBER}>:MCUBOOT_IMAGE_NUMBER=${MCUBOOT_IMAGE_NUMBER}>
Dávid Házi78157732024-07-11 22:18:42 +020095 $<$<STREQUAL:${MCUBOOT_EXECUTION_SLOT},2>:LINK_TO_SECONDARY_PARTITION>
David Hu35aa1a52023-10-24 23:04:04 +080096 $<$<BOOL:${TEST_PSA_API}>:PSA_API_TEST_${TEST_PSA_API}>
97 $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:ENABLE_HEAP>
98)
99
100target_link_libraries(platform_region_defs
101 INTERFACE
102 tfm_config
103)
104
Anton Komlevaee4b612023-05-14 17:38:36 +0100105add_subdirectory(platform)
106
David Hub27a6632023-10-23 22:38:39 +0800107target_sources(platform_ns
108 PRIVATE
109 $<$<BOOL:${PLATFORM_DEFAULT_UART_STDOUT}>:${CMAKE_CURRENT_SOURCE_DIR}/platform/ext/common/uart_stdout.c>
110)
111
Gergely Kovacs5206a412024-10-14 09:49:57 +0000112add_library(platform_ns_definitions INTERFACE)
113
114# these compile definitions must match on the secure and nonsecure side for security
115target_compile_definitions(platform_ns_definitions
116 INTERFACE
Kevin Peng7dc0ebf2023-11-14 14:31:31 +0800117 DOMAIN_NS=1
Anton Komlev8dc9eb22023-09-15 15:53:03 +0100118 $<$<BOOL:${PLATFORM_DEFAULT_CRYPTO_KEYS}>:PLATFORM_DEFAULT_CRYPTO_KEYS>
119 $<$<STREQUAL:${CONFIG_TFM_FLOAT_ABI},hard>:CONFIG_TFM_FLOAT_ABI=2>
120 $<$<STREQUAL:${CONFIG_TFM_FLOAT_ABI},soft>:CONFIG_TFM_FLOAT_ABI=0>
Roman Mazurak0a79e672024-08-14 16:48:13 +0300121 $<$<BOOL:${CONFIG_TFM_DISABLE_CP10CP11}>:CONFIG_TFM_DISABLE_CP10CP11>
Anton Komlev8dc9eb22023-09-15 15:53:03 +0100122 $<$<BOOL:${CONFIG_TFM_ENABLE_CP10CP11}>:CONFIG_TFM_ENABLE_CP10CP11>
123)
124
Gergely Kovacs5206a412024-10-14 09:49:57 +0000125target_link_libraries(platform_ns
126 PUBLIC
127 platform_ns_definitions
128)
129
130if (DEFINED PLATFORM_CUSTOM_NS_FILES)
131 message(STATUS "Using PLATFORM_CUSTOM_NS_FILES: ${PLATFORM_CUSTOM_NS_FILES}")
132else()
133 set(PLATFORM_CUSTOM_NS_FILES FALSE)
134endif()
135
Anton Komlevaee4b612023-05-14 17:38:36 +0100136target_link_libraries(tfm_api_ns
137 PUBLIC
David Hu35aa1a52023-10-24 23:04:04 +0800138 platform_region_defs
Gergely Kovacs5206a412024-10-14 09:49:57 +0000139 platform_ns_definitions
140 $<$<NOT:$<BOOL:${PLATFORM_CUSTOM_NS_FILES}>>:platform_ns>
Anton Komlevaee4b612023-05-14 17:38:36 +0100141)
142
Dávid Házi34cf9b92023-10-11 11:10:41 +0200143if(BL2 AND PLATFORM_DEFAULT_IMAGE_SIGNING)
Anton Komlevaee4b612023-05-14 17:38:36 +0100144
David Hua5fefdc2023-11-03 13:24:41 +0800145 find_package(Python3)
146
David Hua01be0a2023-10-25 23:08:10 +0800147 add_custom_target(tfm_s_ns_signed_bin
148 ALL
Dávid Házi1a72fd42024-03-06 18:33:45 +0100149 SOURCES ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800150 )
151
Gergely Kovacsaae6d782024-10-11 07:21:30 +0000152 if (DEFINED S_NS_SIGNED_TARGET_NAME)
153 message(STATUS "Using S_NS_SIGNED_TARGET_NAME: ${S_NS_SIGNED_TARGET_NAME}")
154 else()
155 set(S_NS_SIGNED_TARGET_NAME tfm_s_ns_signed)
156 endif()
157
158 add_custom_command(
159 TARGET tfm_s_ns_signed_bin
160 POST_BUILD
161 COMMAND ${CMAKE_COMMAND} -E copy
162 ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000163 $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${S_NS_SIGNED_TARGET_NAME}.bin
Gergely Kovacsaae6d782024-10-11 07:21:30 +0000164 )
165
Dávid Házi34cf9b92023-10-11 11:10:41 +0200166 if (MCUBOOT_IMAGE_NUMBER GREATER 1)
Anton Komlevaee4b612023-05-14 17:38:36 +0100167
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000168 add_custom_target(${NS_TARGET_NAME}_signed_bin
169 SOURCES ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800170 )
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000171 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
Anton Komlevc88e2ac2024-09-12 16:46:39 +0100172 DEPENDS ${NS_TARGET_NAME}_bin
173 DEPENDS $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
Dávid Házi34cf9b92023-10-11 11:10:41 +0200174 DEPENDS $<IF:$<BOOL:${MCUBOOT_GENERATE_SIGNING_KEYPAIR}>,generated_private_key,>
David Hua01be0a2023-10-25 23:08:10 +0800175 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_ns.o
David Hub5f10a52023-10-26 22:24:10 +0800176 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100177
Dávid Házi34cf9b92023-10-11 11:10:41 +0200178 #Sign non-secure binary image with provided secret key
179 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/wrapper/wrapper.py
180 --version ${MCUBOOT_IMAGE_VERSION_NS}
181 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_ns.o
Raef Coles1d68b872023-11-06 16:33:34 +0000182 --key ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_ns_signing_private_key.pem
Dávid Házi34cf9b92023-10-11 11:10:41 +0200183 --public-key-format $<IF:$<BOOL:${MCUBOOT_HW_KEY}>,full,hash>
184 --align ${MCUBOOT_ALIGN_VAL}
185 --pad
186 --pad-header
187 -H ${BL2_HEADER_SIZE}
188 -s ${MCUBOOT_SECURITY_COUNTER_NS}
189 -L ${MCUBOOT_ENC_KEY_LEN}
190 -d \"\(0, ${MCUBOOT_S_IMAGE_MIN_VER}\)\"
Dávid Házi34cf9b92023-10-11 11:10:41 +0200191 $<$<STREQUAL:${MCUBOOT_UPGRADE_STRATEGY},OVERWRITE_ONLY>:--overwrite-only>
192 $<$<BOOL:${MCUBOOT_CONFIRM_IMAGE}>:--confirm>
Raef Coles1d68b872023-11-06 16:33:34 +0000193 $<$<BOOL:${MCUBOOT_ENC_IMAGES}>:-E${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_enc_key.pem>
Dávid Házi34cf9b92023-10-11 11:10:41 +0200194 $<$<BOOL:${MCUBOOT_MEASURED_BOOT}>:--measured-boot-record>
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000195 $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
196 ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800197 )
Anton Komlevaee4b612023-05-14 17:38:36 +0100198
David Hua01be0a2023-10-25 23:08:10 +0800199 # Create concatenated binary image from the two independently signed
200 # binary file. This only uses the local assemble.py script (not from
201 # upstream mcuboot) because that script is geared towards zephyr
202 # support
Dávid Házi1a72fd42024-03-06 18:33:45 +0100203 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800204 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s_signed.bin
Anton Komlevc88e2ac2024-09-12 16:46:39 +0100205 DEPENDS ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
David Hua01be0a2023-10-25 23:08:10 +0800206 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s.o
David Hub5f10a52023-10-26 22:24:10 +0800207 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
David Hua01be0a2023-10-25 23:08:10 +0800208
Dávid Házi34cf9b92023-10-11 11:10:41 +0200209 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/assemble.py
210 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s.o
211 --secure ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s_signed.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000212 --non_secure ${CMAKE_BINARY_DIR}/bin/${NS_TARGET_NAME}_signed.bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100213 --output ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
Dávid Házi34cf9b92023-10-11 11:10:41 +0200214 )
215 else()
David Hua01be0a2023-10-25 23:08:10 +0800216 add_custom_target(tfm_s_ns_bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100217 SOURCES ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800218 )
Dávid Házi1a72fd42024-03-06 18:33:45 +0100219 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800220 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000221 DEPENDS ${NS_TARGET_NAME}_bin $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
David Hub5f10a52023-10-26 22:24:10 +0800222 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
223 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100224
Dávid Házi34cf9b92023-10-11 11:10:41 +0200225 # concatenate S + NS binaries into tfm_s_ns.bin
226 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/assemble.py
David Hub5f10a52023-10-26 22:24:10 +0800227 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
Dávid Házi34cf9b92023-10-11 11:10:41 +0200228 --secure ${CMAKE_CURRENT_SOURCE_DIR}/bin/tfm_s.bin
Gergely Kovacs4d50f252024-10-07 10:23:36 +0000229 --non_secure $<TARGET_FILE_DIR:${NS_TARGET_NAME}>/${NS_TARGET_NAME}.bin
Dávid Házi1a72fd42024-03-06 18:33:45 +0100230 --output ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hua01be0a2023-10-25 23:08:10 +0800231 )
232
Dávid Házi1a72fd42024-03-06 18:33:45 +0100233 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
234 DEPENDS tfm_s_ns_bin ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
David Hub5f10a52023-10-26 22:24:10 +0800235 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
David Hua01be0a2023-10-25 23:08:10 +0800236 DEPENDS $<IF:$<BOOL:${MCUBOOT_GENERATE_SIGNING_KEYPAIR}>,generated_private_key,>
David Hub5f10a52023-10-26 22:24:10 +0800237 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts
Anton Komlevaee4b612023-05-14 17:38:36 +0100238
Dávid Házi34cf9b92023-10-11 11:10:41 +0200239 # sign the combined tfm_s_ns.bin file
240 COMMAND ${Python3_EXECUTABLE}
241 ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/scripts/wrapper/wrapper.py
242 --version ${MCUBOOT_IMAGE_VERSION_S}
David Hub5f10a52023-10-26 22:24:10 +0800243 --layout ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/layout_files/signing_layout_s_ns.o
Raef Coles1d68b872023-11-06 16:33:34 +0000244 --key ${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_s_signing_private_key.pem
Dávid Házi34cf9b92023-10-11 11:10:41 +0200245 --public-key-format $<IF:$<BOOL:${MCUBOOT_HW_KEY}>,full,hash>
246 --align ${MCUBOOT_ALIGN_VAL}
247 --pad
248 --pad-header
249 -H ${BL2_HEADER_SIZE}
250 -s ${MCUBOOT_SECURITY_COUNTER_S}
251 -L ${MCUBOOT_ENC_KEY_LEN}
252 $<$<STREQUAL:${MCUBOOT_UPGRADE_STRATEGY},OVERWRITE_ONLY>:--overwrite-only>
253 $<$<BOOL:${MCUBOOT_CONFIRM_IMAGE}>:--confirm>
Raef Coles1d68b872023-11-06 16:33:34 +0000254 $<$<BOOL:${MCUBOOT_ENC_IMAGES}>:-E${CMAKE_CURRENT_SOURCE_DIR}/image_signing/keys/image_enc_key.pem>
Dávid Házi34cf9b92023-10-11 11:10:41 +0200255 $<$<BOOL:${MCUBOOT_MEASURED_BOOT}>:--measured-boot-record>
Dávid Házi1a72fd42024-03-06 18:33:45 +0100256 ${CMAKE_BINARY_DIR}/bin/tfm_s_ns.bin
257 ${CMAKE_BINARY_DIR}/tfm_s_ns_signed.bin
Dávid Házi34cf9b92023-10-11 11:10:41 +0200258 )
259 endif()
Anton Komlevaee4b612023-05-14 17:38:36 +0100260endif()