blob: 7a6a38ffd48d4352286e68e81d67de375f748b45 [file] [log] [blame]
Gyorgy Szing30fa9872017-12-05 01:08:47 +00001#-------------------------------------------------------------------------------
Sherry Zhangf58f2bd2022-01-10 17:21:11 +08002# Copyright (c) 2020-2022, Arm Limited. All rights reserved.
Chris Brandcae20262022-06-23 12:05:33 -07003# Copyright (c) 2021-2022 Cypress Semiconductor Corporation (an Infineon
4# company) or an affiliate of Cypress Semiconductor Corporation. All rights
5# reserved.
Gyorgy Szing30fa9872017-12-05 01:08:47 +00006#
7# SPDX-License-Identifier: BSD-3-Clause
8#
9#-------------------------------------------------------------------------------
10
Raef Coles69817322020-10-19 14:14:14 +010011cmake_minimum_required(VERSION 3.15)
Gyorgy Szing30fa9872017-12-05 01:08:47 +000012
Raef Colesabfe81a2020-07-10 09:52:34 +010013add_executable(tfm_s)
14add_library(secure_fw INTERFACE)
Summer Qin5a212ec2020-11-19 15:48:57 +080015add_library(tfm_secure_api INTERFACE)
David Hu857bfa52019-05-21 13:54:50 +080016
Kevin Peng33d03942021-06-08 11:28:41 +080017add_subdirectory(spm)
David Hu057ba652021-12-07 13:50:15 +080018add_subdirectory(partitions)
Gyorgy Szing30fa9872017-12-05 01:08:47 +000019
Raef Colesabfe81a2020-07-10 09:52:34 +010020target_include_directories(secure_fw
21 INTERFACE
22 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
23 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/partitions>
24)
Ken Liue40f9a22019-06-03 16:42:47 +080025
Raef Colesabfe81a2020-07-10 09:52:34 +010026target_link_libraries(secure_fw
27 INTERFACE
28 tfm_spm
29 tfm_partitions
30)
Gyorgy Szing30fa9872017-12-05 01:08:47 +000031
Raef Colesabfe81a2020-07-10 09:52:34 +010032target_link_libraries(tfm_s
33 PRIVATE
34 secure_fw
35 platform_s
36 psa_interface
37 tfm_sprt
Jianliang Shen25feac92022-03-21 16:47:46 +080038 tfm_secure_api
Raef Colesabfe81a2020-07-10 09:52:34 +010039)
Gyorgy Szing30fa9872017-12-05 01:08:47 +000040
Raef Colesabfe81a2020-07-10 09:52:34 +010041set_target_properties(tfm_s
42 PROPERTIES
43 SUFFIX ".axf"
44 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
45)
Gyorgy Szingd9c57fb2019-09-02 17:08:18 +020046
Feder Liangd4dbaa92021-09-07 15:34:46 +080047target_compile_options(tfm_s
48 PUBLIC
49 ${COMPILER_CP_FLAG}
50)
51
Raef Colesabfe81a2020-07-10 09:52:34 +010052target_link_options(tfm_s
53 PRIVATE
54 --entry=Reset_Handler
55 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_s.map>
56 $<$<C_COMPILER_ID:ARMClang>:--map>
TTornblomaf19ae92020-09-29 13:26:29 +020057 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_s.map>
Feder Liangd4dbaa92021-09-07 15:34:46 +080058 PUBLIC
59 ${LINKER_CP_OPTION}
Raef Colesabfe81a2020-07-10 09:52:34 +010060)
61
62add_convert_to_bin_target(tfm_s)
63
64############################ Secure API ########################################
65
66target_include_directories(tfm_secure_api
Summer Qin5a212ec2020-11-19 15:48:57 +080067 INTERFACE
Raef Colesabfe81a2020-07-10 09:52:34 +010068 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
69)
70
71target_link_libraries(tfm_secure_api
Summer Qin5a212ec2020-11-19 15:48:57 +080072 INTERFACE
Raef Colesabfe81a2020-07-10 09:52:34 +010073 tfm_arch
Raef Colesabfe81a2020-07-10 09:52:34 +010074)
75
76set_source_files_properties(
Ken Liu82e3eac2021-10-14 16:19:13 +080077 ${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_svc.c
Xinyu Zhanga7ba50b2021-12-27 17:32:53 +080078 ${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_cross.c
Ken Liuf39d8eb2021-10-07 12:55:33 +080079 ${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_sfn.c
Raef Colesabfe81a2020-07-10 09:52:34 +010080 PROPERTIES
Raef Coles5e8ea842020-09-25 10:36:16 +010081 COMPILE_FLAGS $<$<C_COMPILER_ID:GNU>:-Wno-unused-parameter>
82 COMPILE_FLAGS $<$<C_COMPILER_ID:ARMClang>:-Wno-unused-parameter>
Raef Colesabfe81a2020-07-10 09:52:34 +010083)
84
Ken Liu82e3eac2021-10-14 16:19:13 +080085# Secure component relies on 'tfm_secure_api', append headers/sources
86# into this target, also the SPE build indicator.
87target_sources(tfm_secure_api
88 INTERFACE
Sherry Zhangf58f2bd2022-01-10 17:21:11 +080089 $<$<BOOL:${CONFIG_TFM_PSA_API_SUPERVISOR_CALL}>:${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_svc.c>
90 $<$<BOOL:${CONFIG_TFM_PSA_API_CROSS_CALL}>:${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_cross.c>
91 $<$<BOOL:${CONFIG_TFM_PSA_API_SFN_CALL}>:${CMAKE_SOURCE_DIR}/secure_fw/spm/cmsis_psa/psa_interface_sfn.c>
Ken Liu82e3eac2021-10-14 16:19:13 +080092)
93
94target_compile_definitions(tfm_secure_api
95 INTERFACE
96 CONFIG_TFM_BUILDING_SPE=1
Kevin Peng613b4172022-02-15 14:41:44 +080097 $<$<BOOL:${CONFIG_TFM_DOORBELL_API}>:CONFIG_TFM_DOORBELL_API=1>
Ken Liu82e3eac2021-10-14 16:19:13 +080098)
99
Raef Colesabfe81a2020-07-10 09:52:34 +0100100############################# Secure veneers ###################################
101
Chris Brandca819022022-07-19 09:25:15 -0700102if(CONFIG_TFM_USE_TRUSTZONE)
Raef Colesabfe81a2020-07-10 09:52:34 +0100103 add_library(tfm_s_veneers STATIC)
104
105 target_sources(tfm_s_veneers
106 PRIVATE
107 ${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
108 )
109
110 # Since s_veneers.o doesn't exist when this is evaluated by cmake we need to
111 # explicity specify what language it will use.
112 set_target_properties(tfm_s_veneers
113 PROPERTIES
114 LINKER_LANGUAGE C
115 )
116
117 # Pretend we have a command to generate the veneers, when in reality all
118 # that's needed is the dependency on tfm_s. This is required for the ninja
119 # build system
120 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
121 COMMAND
122 DEPENDS tfm_s
123 )
124
125 target_link_options(tfm_s
126 PRIVATE
127 ${LINKER_VENEER_OUTPUT_FLAG}${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
128 )
Gyorgy Szing30fa9872017-12-05 01:08:47 +0000129endif()
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000130
131############################### CODE SHARING ###################################
132if (TFM_CODE_SHARING)
Raef Coles4351ec22021-04-26 09:20:50 +0100133 target_link_shared_code(tfm_s
134 bl2
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000135 )
Raef Coles4351ec22021-04-26 09:20:50 +0100136
137 # mbedtls is build outside of tree, so we have to use the _from_dependency
138 # version of this function to attach the custom_command to the tfm_s target.
139 # It's also picky about stripping the symbols, so we just make them weak
140 # instead.
141 target_weaken_symbols_from_dependency(tfm_s crypto_service_mbedcrypto
142 mbedtls_asn1*
143 mbedtls_mpi*
144 mbedtls_platform*
145 mbedtls_rsa*
146
147 #This group is only relevant if BL2 image encryption is on
148 mbedtls_md*
149
150 #This group has two functions that cause runtime errors when shared, so the
151 #error-free ones are listed piece by piece
152 mbedtls_internal_sha256*
153 mbedtls_sha256_free
154 mbedtls_sha256_init
155 mbedtls_sha256_finish
156 mbedtls_sha256_starts
157
158 #Symbols necessary to make sharing additional functions possible
159 mbedtls_calloc*
160 mbedtls_free*
161
162 #Miscellaneous functions
163 mbedtls_exit*
164 memset_func*
165 )
166
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000167endif()