1#-------------------------------------------------------------------------------
2# Copyright (c) 2020-2024, Arm Limited. All rights reserved.
3# Copyright (c) 2022-2023 Cypress Semiconductor Corporation (an Infineon company)
4# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
5#
6# SPDX-License-Identifier: BSD-3-Clause
7#
8#-------------------------------------------------------------------------------
9
10install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/
11        DESTINATION bin
12)
13
14# export veneer lib
15if (CONFIG_TFM_USE_TRUSTZONE)
16    install(FILES       ${CMAKE_BINARY_DIR}/secure_fw/s_veneers.o
17            DESTINATION ${INSTALL_INTERFACE_LIB_DIR})
18endif()
19
20####################### export headers #########################################
21
22install(FILES       ${INTERFACE_INC_DIR}/psa/client.h
23                    ${INTERFACE_INC_DIR}/psa/error.h
24        DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
25
26install(FILES       ${CMAKE_BINARY_DIR}/generated/interface/include/psa_manifest/sid.h
27        DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa_manifest)
28
29install(FILES       ${CMAKE_BINARY_DIR}/generated/interface/include/config_impl.h
30        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
31
32install(FILES       ${INTERFACE_INC_DIR}/tfm_veneers.h
33                    ${INTERFACE_INC_DIR}/tfm_ns_interface.h
34        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
35
36install(FILES       ${INTERFACE_INC_DIR}/tfm_ns_client_ext.h
37        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
38
39install(FILES       ${CMAKE_SOURCE_DIR}/secure_fw/include/config_tfm.h
40        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
41install(FILES       ${CMAKE_SOURCE_DIR}/config/config_base.h
42        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
43
44install(FILES       ${INTERFACE_INC_DIR}/tfm_psa_call_pack.h
45        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
46install(FILES       ${CMAKE_BINARY_DIR}/generated/interface/include/psa/framework_feature.h
47        DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
48
49if (TFM_PARTITION_NS_AGENT_MAILBOX)
50    install(FILES       ${INTERFACE_INC_DIR}/multi_core/tfm_multi_core_api.h
51                        ${INTERFACE_INC_DIR}/multi_core/tfm_ns_mailbox.h
52                        ${INTERFACE_INC_DIR}/multi_core/tfm_mailbox.h
53                        ${INTERFACE_INC_DIR}/multi_core/tfm_ns_mailbox_test.h
54                        ${CMAKE_BINARY_DIR}/generated/interface/include/tfm_mailbox_config.h
55            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/multi_core)
56endif()
57
58if (TFM_PARTITION_PROTECTED_STORAGE)
59    install(FILES       ${INTERFACE_INC_DIR}/psa/protected_storage.h
60                        ${INTERFACE_INC_DIR}/psa/storage_common.h
61            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
62    install(FILES       ${INTERFACE_INC_DIR}/tfm_ps_defs.h
63            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
64endif()
65
66if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE)
67    install(FILES       ${INTERFACE_INC_DIR}/psa/internal_trusted_storage.h
68                        ${INTERFACE_INC_DIR}/psa/storage_common.h
69            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
70    install(FILES       ${INTERFACE_INC_DIR}/tfm_its_defs.h
71            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
72endif()
73
74if (TFM_PARTITION_CRYPTO)
75    install(FILES       ${INTERFACE_INC_DIR}/psa/README.rst
76                        ${INTERFACE_INC_DIR}/psa/build_info.h
77                        ${INTERFACE_INC_DIR}/psa/crypto.h
78                        ${INTERFACE_INC_DIR}/psa/crypto_adjust_auto_enabled.h
79                        ${INTERFACE_INC_DIR}/psa/crypto_adjust_config_dependencies.h
80                        ${INTERFACE_INC_DIR}/psa/crypto_adjust_config_key_pair_types.h
81                        ${INTERFACE_INC_DIR}/psa/crypto_adjust_config_synonyms.h
82                        ${INTERFACE_INC_DIR}/psa/crypto_builtin_composites.h
83                        ${INTERFACE_INC_DIR}/psa/crypto_builtin_key_derivation.h
84                        ${INTERFACE_INC_DIR}/psa/crypto_builtin_primitives.h
85                        ${INTERFACE_INC_DIR}/psa/crypto_compat.h
86                        ${INTERFACE_INC_DIR}/psa/crypto_driver_common.h
87                        ${INTERFACE_INC_DIR}/psa/crypto_driver_contexts_composites.h
88                        ${INTERFACE_INC_DIR}/psa/crypto_driver_contexts_key_derivation.h
89                        ${INTERFACE_INC_DIR}/psa/crypto_driver_contexts_primitives.h
90                        ${INTERFACE_INC_DIR}/psa/crypto_extra.h
91                        ${INTERFACE_INC_DIR}/psa/crypto_legacy.h
92                        ${INTERFACE_INC_DIR}/psa/crypto_platform.h
93                        ${INTERFACE_INC_DIR}/psa/crypto_se_driver.h
94                        ${INTERFACE_INC_DIR}/psa/crypto_sizes.h
95                        ${INTERFACE_INC_DIR}/psa/crypto_struct.h
96                        ${INTERFACE_INC_DIR}/psa/crypto_types.h
97                        ${INTERFACE_INC_DIR}/psa/crypto_values.h
98            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
99    install(FILES       ${INTERFACE_INC_DIR}/tfm_crypto_defs.h
100            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
101    install(DIRECTORY   ${INTERFACE_INC_DIR}/mbedtls
102            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
103endif()
104
105if (TFM_PARTITION_INITIAL_ATTESTATION)
106    install(FILES       ${CMAKE_BINARY_DIR}/generated/interface/include/psa/initial_attestation.h
107            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
108    install(FILES       ${INTERFACE_INC_DIR}/tfm_attest_defs.h
109                        ${INTERFACE_INC_DIR}/tfm_attest_iat_defs.h
110            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
111endif()
112
113if(TFM_PARTITION_PLATFORM)
114    install(FILES       ${INTERFACE_INC_DIR}/tfm_platform_api.h
115            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
116endif()
117
118if(TFM_PARTITION_FIRMWARE_UPDATE)
119    install(FILES       ${INTERFACE_INC_DIR}/psa/update.h
120                        ${CMAKE_BINARY_DIR}/generated/interface/include/psa/fwu_config.h
121            DESTINATION ${INSTALL_INTERFACE_INC_DIR}/psa)
122    install(FILES       ${INTERFACE_INC_DIR}/tfm_fwu_defs.h
123            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
124endif()
125
126if(PLATFORM_DEFAULT_CRYPTO_KEYS)
127    install(DIRECTORY   ${INTERFACE_INC_DIR}/crypto_keys
128            DESTINATION ${INSTALL_INTERFACE_INC_DIR})
129endif()
130
131####################### export sources #########################################
132
133if (TFM_PARTITION_NS_AGENT_MAILBOX)
134    install(FILES       ${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox.c
135                        ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_ns_api.c
136                        ${INTERFACE_SRC_DIR}/multi_core/tfm_multi_core_psa_ns_api.c
137                        ${INTERFACE_SRC_DIR}/multi_core/tfm_ns_mailbox_thread.c
138            DESTINATION ${INSTALL_INTERFACE_SRC_DIR}/multi_core)
139endif()
140
141if (TFM_PARTITION_NS_AGENT_TZ)
142    install(FILES       ${INTERFACE_SRC_DIR}/tfm_tz_psa_ns_api.c
143            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
144endif()
145
146install(DIRECTORY   ${INTERFACE_INC_DIR}/os_wrapper
147        DESTINATION ${INSTALL_INTERFACE_INC_DIR})
148
149if (CONFIG_TFM_USE_TRUSTZONE)
150    install(DIRECTORY   ${INTERFACE_SRC_DIR}/os_wrapper
151            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
152endif()
153
154if (TFM_PARTITION_PROTECTED_STORAGE)
155    install(FILES       ${INTERFACE_SRC_DIR}/tfm_ps_api.c
156            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
157endif()
158
159if (TFM_PARTITION_INTERNAL_TRUSTED_STORAGE)
160    install(FILES       ${INTERFACE_SRC_DIR}/tfm_its_api.c
161            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
162endif()
163
164if (TFM_PARTITION_CRYPTO)
165    install(FILES       ${INTERFACE_SRC_DIR}/tfm_crypto_api.c
166            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
167endif()
168
169if (TFM_PARTITION_INITIAL_ATTESTATION)
170    install(FILES       ${INTERFACE_SRC_DIR}/tfm_attest_api.c
171            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
172endif()
173
174if(TFM_PARTITION_PLATFORM)
175    install(FILES       ${INTERFACE_SRC_DIR}/tfm_platform_api.c
176            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
177endif()
178
179##################### Export image signing information #########################
180
181if(BL2 AND PLATFORM_DEFAULT_IMAGE_SIGNING)
182    install(DIRECTORY bl2/ext/mcuboot/scripts
183            DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}
184            PATTERN "scripts/*.py"
185            PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
186            GROUP_EXECUTE GROUP_READ
187            PATTERN "scripts/wrapper/*.py"
188            PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
189                        GROUP_EXECUTE GROUP_READ)
190
191    install(DIRECTORY ${MCUBOOT_PATH}/scripts/imgtool
192            DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/scripts)
193
194    if (MCUBOOT_ENC_IMAGES)
195        install(FILES ${MCUBOOT_KEY_ENC}
196                RENAME image_enc_key.pem
197                DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/keys)
198    endif()
199
200    install(FILES $<TARGET_OBJECTS:signing_layout_s>
201            DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/layout_files)
202    install(FILES ${MCUBOOT_KEY_S}
203            RENAME image_s_signing_private_key.pem
204            DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/keys)
205    # Specify the MCUBOOT_KEY_S path for NS build
206    set(MCUBOOT_INSTALL_KEY_S
207        ${INSTALL_IMAGE_SIGNING_DIR}/keys/image_s_signing_private_key.pem)
208    install(FILES $<TARGET_FILE_DIR:bl2>/image_s_signing_public_key.pem
209            DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/keys)
210
211    if(MCUBOOT_IMAGE_NUMBER GREATER 1)
212        install(FILES $<TARGET_OBJECTS:signing_layout_ns>
213                DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/layout_files)
214        install(FILES ${MCUBOOT_KEY_NS}
215                RENAME image_ns_signing_private_key.pem
216                DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/keys)
217        # Specify the MCUBOOT_KEY_NS path for NS build
218        set(MCUBOOT_INSTALL_KEY_NS
219            ${INSTALL_IMAGE_SIGNING_DIR}/keys/image_ns_signing_private_key.pem)
220        install(FILES $<TARGET_FILE_DIR:bl2>/image_ns_signing_public_key.pem
221                DESTINATION ${INSTALL_IMAGE_SIGNING_DIR}/keys)
222    endif()
223endif()
224
225if(TFM_PARTITION_FIRMWARE_UPDATE)
226    install(FILES       ${INTERFACE_SRC_DIR}/tfm_fwu_api.c
227            DESTINATION ${INSTALL_INTERFACE_SRC_DIR})
228endif()
229
230######################### Export common configurations #########################
231
232install(FILES       ${CMAKE_SOURCE_DIR}/config/cp_check.cmake
233        DESTINATION ${INSTALL_CONFIG_DIR})
234
235################### Read recommended tf-m-tests version ########################
236
237include(${CMAKE_SOURCE_DIR}/lib/ext/tf-m-tests/read_version.cmake)
238
239###################### Install NS platform sources #############################
240
241install(CODE "MESSAGE(\"----- Installing platform NS -----\")")
242
243install(DIRECTORY   $<BUILD_INTERFACE:${CMSIS_PATH}/CMSIS/Core/Include>
244        DESTINATION ${INSTALL_PLATFORM_NS_DIR}/ext/cmsis)
245
246if(PLATFORM_DEFAULT_UART_STDOUT)
247    install(FILES       ${PLATFORM_DIR}/ext/common/uart_stdout.c
248                        ${PLATFORM_DIR}/ext/common/uart_stdout.h
249            DESTINATION ${INSTALL_PLATFORM_NS_DIR}/ext/common)
250endif()
251
252install(DIRECTORY   ${PLATFORM_DIR}/include
253        DESTINATION ${INSTALL_PLATFORM_NS_DIR})
254
255install(FILES ${CMAKE_SOURCE_DIR}/cmake/spe-CMakeLists.cmake
256        DESTINATION ${CMAKE_INSTALL_PREFIX}
257        RENAME CMakeLists.txt)
258
259install(FILES       ${PLATFORM_DIR}/ns/toolchain_ns_GNUARM.cmake
260                    ${PLATFORM_DIR}/ns/toolchain_ns_ARMCLANG.cmake
261                    ${PLATFORM_DIR}/ns/toolchain_ns_IARARM.cmake
262        DESTINATION ${INSTALL_CMAKE_DIR})
263
264install(FILES
265        ${CMAKE_SOURCE_DIR}/lib/fih/inc/fih.h
266        ${PLATFORM_DIR}/include/tfm_plat_ns.h
267        DESTINATION ${INSTALL_PLATFORM_NS_DIR}/include)
268
269if (TARGET psa_crypto_config)
270# FIXIT: This is a temporal patch to reduce the change scope and simplify review.
271# In the future we shall decouple this target from tfm_config becuase
272# "psa_crypto_config" target exists not in all configurations.
273# Functionally "psa_crypto_config" provides only include path for Crypto accelerator.
274install(TARGETS tfm_config psa_crypto_config psa_interface
275        DESTINATION ${CMAKE_INSTALL_PREFIX}
276        EXPORT tfm-config
277        )
278else()
279        install(TARGETS tfm_config psa_interface
280        DESTINATION ${CMAKE_INSTALL_PREFIX}
281        EXPORT tfm-config
282        )
283endif()
284
285target_include_directories(psa_interface
286        INTERFACE
287        $<INSTALL_INTERFACE:interface/include>
288        )
289
290install(EXPORT tfm-config
291        FILE spe_export.cmake
292        DESTINATION ${INSTALL_CMAKE_DIR})
293
294configure_file(${CMAKE_SOURCE_DIR}/config/spe_config.cmake.in
295               ${INSTALL_CMAKE_DIR}/spe_config.cmake @ONLY)
296
297# Toolchain utils
298install(FILES       cmake/set_extensions.cmake
299        DESTINATION ${INSTALL_CMAKE_DIR})
300