blob: af25f39df9391e2ba3a8ccf4048fb3bb8a79da70 [file] [log] [blame]
Julian Hall527ddd52021-06-28 11:57:17 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7cmake_minimum_required(VERSION 3.16)
8include(../../deployment.cmake REQUIRED)
9
10#-------------------------------------------------------------------------------
11# The CMakeLists.txt for building the se-proxy deployment for opteesp
12#
13# Builds proxy service providers that communicate with a separate secure element
14# that hosts a set of service endpoints. This deployment is for running in an
15# SEL0 secure partition hosted by OPTEE in the role of SPM.
16#-------------------------------------------------------------------------------
17include(${TS_ROOT}/environments/opteesp/env.cmake)
18project(trusted-services LANGUAGES C ASM)
19add_executable(se-proxy)
20target_include_directories(se-proxy PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
21set(SP_UUID "46bb39d1-b4d9-45b5-88ff-040027dab249")
22
23#-------------------------------------------------------------------------------
24# Include SP DEV KIT interface
25#
26#-------------------------------------------------------------------------------
27set(SP_DEV_KIT_INC_DIR ${CMAKE_CURRENT_LIST_DIR})
28list(APPEND CMAKE_MODULE_PATH "${TS_ROOT}/external/Spdevkit")
29find_package(Spdevkit REQUIRED)
30sp_dev_kit_configure_linking(TARGET se-proxy DEFINES ARM64=1)
31target_link_libraries(se-proxy PRIVATE ${SP_DEV_KIT_LIBRARIES})
32
33#-------------------------------------------------------------------------------
34# Default deployment specific configuration
35#
36#-------------------------------------------------------------------------------
37set(TS_NO_FLOAT_HW ON)
38
39#-------------------------------------------------------------------------------
40# Components that are specific to deployment in the opteesp environment.
41#
42#-------------------------------------------------------------------------------
43add_components(TARGET "se-proxy"
44 BASE_DIR ${TS_ROOT}
45 COMPONENTS
46 "protocols/rpc/common/packed-c"
47 "protocols/service/secure_storage/packed-c"
48 "protocols/service/crypto/protobuf"
49 "environments/opteesp"
50 "components/common/tlv"
51 "components/config/ramstore"
52 "components/config/loader/sp"
53 "components/messaging/ffa/libsp"
54 "components/rpc/ffarpc/endpoint"
55 "components/rpc/common/interface"
56 "components/rpc/common/demux"
57 "components/service/common/include"
58 "components/service/common/serializer/protobuf"
59 "components/service/common/provider"
Julian Hall9061e6c2021-06-29 14:24:20 +010060 "components/service/crypto/provider"
Julian Hall527ddd52021-06-28 11:57:17 +010061 "components/service/crypto/provider/serializer/protobuf"
62 "components/service/crypto/provider/serializer/packed-c"
Julian Hall7bfb18e2021-07-13 15:48:13 +010063 "components/service/crypto/provider/extension/hash"
64 "components/service/crypto/provider/extension/hash/serializer/packed-c"
65 "components/service/crypto/factory/full"
Julian Hall527ddd52021-06-28 11:57:17 +010066 "components/service/secure_storage/include"
67 "components/service/secure_storage/frontend/secure_storage_provider"
68 "components/service/attestation/include"
69 "components/service/attestation/provider"
70 "components/service/attestation/provider/serializer/packed-c"
71
72 # Components that won't be in a proxy
73 "components/common/endian"
74 "components/service/attestation/claims"
75 "components/service/attestation/claims/sources/boot_seed_generator"
76 "components/service/attestation/claims/sources/null_lifecycle"
77 "components/service/attestation/claims/sources/instance_id"
78 "components/service/attestation/claims/sources/event_log"
79 "components/service/attestation/claims/sources/event_log/mock"
Julian Hall644b57a2021-06-30 08:45:19 +010080 "components/service/attestation/reporter/local"
81 "components/service/attestation/reporter/eat"
82 "components/service/attestation/key_mngr/local"
Julian Hall527ddd52021-06-28 11:57:17 +010083 "components/service/secure_storage/frontend/psa/its"
84 "components/service/secure_storage/backend/secure_flash_store"
85 "components/service/secure_storage/backend/secure_flash_store/flash_fs"
86 "components/service/secure_storage/backend/secure_flash_store/flash"
Julian Hall9061e6c2021-06-29 14:24:20 +010087 "components/service/crypto/backend/mbedcrypto"
88 "components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
Julian Hall527ddd52021-06-28 11:57:17 +010089)
90
91target_sources(se-proxy PRIVATE
92 se_proxy_sp.c
93 service_proxy_factory.c
94)
95
96#-------------------------------------------------------------------------------
97# Use the selected platform to provide drivers needed by the deployment
98#
99#-------------------------------------------------------------------------------
100# temporarily force platform - with this change, the build interface to
101# an external builder such as a Yocto recipe is unchanged. Should remove
102# once the build interface is published.
103set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Overridden" FORCE)
104
105add_platform(TARGET "se-proxy")
106
107#-------------------------------------------------------------------------------
108# Components used from external projects
109#
110#-------------------------------------------------------------------------------
111
112# Nanopb
113list(APPEND NANOPB_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
114include(../../../external/nanopb/nanopb.cmake)
115target_link_libraries(se-proxy PRIVATE nanopb::protobuf-nanopb-static)
116protobuf_generate_all(TGT "se-proxy" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
117
118# Mbed TLS provides libmbedcrypto
119include(../../../external/MbedTLS/MbedTLS.cmake)
120target_link_libraries(se-proxy PRIVATE mbedcrypto)
121
122# Qcbor
123include(${TS_ROOT}/external/qcbor/qcbor.cmake)
124target_link_libraries(se-proxy PRIVATE qcbor)
125
126# t_cose
127include(${TS_ROOT}/external/t_cose/t_cose.cmake)
128target_link_libraries(se-proxy PRIVATE t_cose)
129
130#################################################################
131
132target_compile_definitions(se-proxy PRIVATE
133 ARM64=1
134)
135
136target_include_directories(se-proxy PRIVATE
137 ${TS_ROOT}
138 ${TS_ROOT}/components
139 ${TS_ROOT}/deployments/se-proxy/opteesp
140)
141
142if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
143 target_compile_options(se-proxy PRIVATE
144 -fdiagnostics-show-option
145 -gdwarf-2
146 -mstrict-align
147 -O0
148 -std=c99
149 )
150
151 # Options for GCC that control linking
152 target_link_options(se-proxy PRIVATE
153 -zmax-page-size=4096
154 )
155 # Options directly for LD, these are not understood by GCC
156 target_link_options(se-proxy PRIVATE
157 -Wl,--as-needed
158 -Wl,--sort-section=alignment
159 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
160 )
161endif()
162
163compiler_generate_stripped_elf(TARGET se-proxy NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
164
165######################################## install
166if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
167 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
168endif()
169#TODO: api headers
170
171install(TARGETS se-proxy
172 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
173 RUNTIME DESTINATION ${TS_ENV}/bin
174 )
175install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
176
177get_property(_PROTO_FILES TARGET se-proxy PROPERTY PROTOBUF_FILES)
178install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
179
180
181set(EXPORT_SP_NAME "se-proxy")
182set(EXPORT_SP_UUID ${SP_UUID})
183include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)