blob: 29d2edc944f94bac28d198e97b9c1c1c04bc9a85 [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"
63 "components/service/secure_storage/include"
64 "components/service/secure_storage/frontend/secure_storage_provider"
65 "components/service/attestation/include"
66 "components/service/attestation/provider"
67 "components/service/attestation/provider/serializer/packed-c"
68
69 # Components that won't be in a proxy
70 "components/common/endian"
71 "components/service/attestation/claims"
72 "components/service/attestation/claims/sources/boot_seed_generator"
73 "components/service/attestation/claims/sources/null_lifecycle"
74 "components/service/attestation/claims/sources/instance_id"
75 "components/service/attestation/claims/sources/event_log"
76 "components/service/attestation/claims/sources/event_log/mock"
Julian Hall644b57a2021-06-30 08:45:19 +010077 "components/service/attestation/reporter/local"
78 "components/service/attestation/reporter/eat"
79 "components/service/attestation/key_mngr/local"
Julian Hall527ddd52021-06-28 11:57:17 +010080 "components/service/secure_storage/frontend/psa/its"
81 "components/service/secure_storage/backend/secure_flash_store"
82 "components/service/secure_storage/backend/secure_flash_store/flash_fs"
83 "components/service/secure_storage/backend/secure_flash_store/flash"
Julian Hall9061e6c2021-06-29 14:24:20 +010084 "components/service/crypto/backend/mbedcrypto"
85 "components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
Julian Hall527ddd52021-06-28 11:57:17 +010086)
87
88target_sources(se-proxy PRIVATE
89 se_proxy_sp.c
90 service_proxy_factory.c
91)
92
93#-------------------------------------------------------------------------------
94# Use the selected platform to provide drivers needed by the deployment
95#
96#-------------------------------------------------------------------------------
97# temporarily force platform - with this change, the build interface to
98# an external builder such as a Yocto recipe is unchanged. Should remove
99# once the build interface is published.
100set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Overridden" FORCE)
101
102add_platform(TARGET "se-proxy")
103
104#-------------------------------------------------------------------------------
105# Components used from external projects
106#
107#-------------------------------------------------------------------------------
108
109# Nanopb
110list(APPEND NANOPB_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
111include(../../../external/nanopb/nanopb.cmake)
112target_link_libraries(se-proxy PRIVATE nanopb::protobuf-nanopb-static)
113protobuf_generate_all(TGT "se-proxy" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
114
115# Mbed TLS provides libmbedcrypto
116include(../../../external/MbedTLS/MbedTLS.cmake)
117target_link_libraries(se-proxy PRIVATE mbedcrypto)
118
119# Qcbor
120include(${TS_ROOT}/external/qcbor/qcbor.cmake)
121target_link_libraries(se-proxy PRIVATE qcbor)
122
123# t_cose
124include(${TS_ROOT}/external/t_cose/t_cose.cmake)
125target_link_libraries(se-proxy PRIVATE t_cose)
126
127#################################################################
128
129target_compile_definitions(se-proxy PRIVATE
130 ARM64=1
131)
132
133target_include_directories(se-proxy PRIVATE
134 ${TS_ROOT}
135 ${TS_ROOT}/components
136 ${TS_ROOT}/deployments/se-proxy/opteesp
137)
138
139if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
140 target_compile_options(se-proxy PRIVATE
141 -fdiagnostics-show-option
142 -gdwarf-2
143 -mstrict-align
144 -O0
145 -std=c99
146 )
147
148 # Options for GCC that control linking
149 target_link_options(se-proxy PRIVATE
150 -zmax-page-size=4096
151 )
152 # Options directly for LD, these are not understood by GCC
153 target_link_options(se-proxy PRIVATE
154 -Wl,--as-needed
155 -Wl,--sort-section=alignment
156 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
157 )
158endif()
159
160compiler_generate_stripped_elf(TARGET se-proxy NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
161
162######################################## install
163if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
164 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
165endif()
166#TODO: api headers
167
168install(TARGETS se-proxy
169 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
170 RUNTIME DESTINATION ${TS_ENV}/bin
171 )
172install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
173
174get_property(_PROTO_FILES TARGET se-proxy PROPERTY PROTOBUF_FILES)
175install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
176
177
178set(EXPORT_SP_NAME "se-proxy")
179set(EXPORT_SP_UUID ${SP_UUID})
180include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)