blob: 1d759631285e57a9b2ca27cc937869bc7b66aafd [file] [log] [blame]
Julian Hall527ddd52021-06-28 11:57:17 +01001#-------------------------------------------------------------------------------
Imre Kiseeee9642021-12-17 13:59:46 +01002# Copyright (c) 2021-2022, Arm Limited and Contributors. All rights reserved.
Julian Hall527ddd52021-06-28 11:57:17 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7cmake_minimum_required(VERSION 3.16)
Gyorgy Szinga365a042021-12-02 01:48:27 +01008
9# Set default platform.
10set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Target platform location.")
Julian Hall527ddd52021-06-28 11:57:17 +010011include(../../deployment.cmake REQUIRED)
12
13#-------------------------------------------------------------------------------
14# The CMakeLists.txt for building the se-proxy deployment for opteesp
15#
16# Builds proxy service providers that communicate with a separate secure element
17# that hosts a set of service endpoints. This deployment is for running in an
18# SEL0 secure partition hosted by OPTEE in the role of SPM.
19#-------------------------------------------------------------------------------
20include(${TS_ROOT}/environments/opteesp/env.cmake)
21project(trusted-services LANGUAGES C ASM)
22add_executable(se-proxy)
23target_include_directories(se-proxy PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
24set(SP_UUID "46bb39d1-b4d9-45b5-88ff-040027dab249")
Imre Kiseeee9642021-12-17 13:59:46 +010025set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
Julian Hall527ddd52021-06-28 11:57:17 +010026
27#-------------------------------------------------------------------------------
Julian Hall527ddd52021-06-28 11:57:17 +010028# Components that are specific to deployment in the opteesp environment.
29#
30#-------------------------------------------------------------------------------
31add_components(TARGET "se-proxy"
32 BASE_DIR ${TS_ROOT}
33 COMPONENTS
Imre Kis2ccd8e82021-10-08 11:21:14 +020034 "components/common/trace"
35 "components/common/utils"
Julian Hall527ddd52021-06-28 11:57:17 +010036 "protocols/rpc/common/packed-c"
37 "protocols/service/secure_storage/packed-c"
38 "protocols/service/crypto/protobuf"
39 "environments/opteesp"
40 "components/common/tlv"
41 "components/config/ramstore"
42 "components/config/loader/sp"
43 "components/messaging/ffa/libsp"
44 "components/rpc/ffarpc/endpoint"
45 "components/rpc/common/interface"
46 "components/rpc/common/demux"
47 "components/service/common/include"
48 "components/service/common/serializer/protobuf"
Julian Hall628be292021-08-04 16:57:40 +010049 "components/service/common/client"
Julian Hall527ddd52021-06-28 11:57:17 +010050 "components/service/common/provider"
Julian Hall3e614542021-07-29 11:47:47 +010051 "components/service/discovery/provider"
52 "components/service/discovery/provider/serializer/packed-c"
Julian Hall628be292021-08-04 16:57:40 +010053 "components/service/crypto/include"
Julian Hall9061e6c2021-06-29 14:24:20 +010054 "components/service/crypto/provider"
Julian Hall527ddd52021-06-28 11:57:17 +010055 "components/service/crypto/provider/serializer/protobuf"
56 "components/service/crypto/provider/serializer/packed-c"
Julian Hall7bfb18e2021-07-13 15:48:13 +010057 "components/service/crypto/provider/extension/hash"
58 "components/service/crypto/provider/extension/hash/serializer/packed-c"
Julian Halle7bccbe2021-07-16 09:50:34 +010059 "components/service/crypto/provider/extension/cipher"
60 "components/service/crypto/provider/extension/cipher/serializer/packed-c"
Julian Hallfe487b72021-07-19 10:29:59 +010061 "components/service/crypto/provider/extension/key_derivation"
62 "components/service/crypto/provider/extension/key_derivation/serializer/packed-c"
Julian Halla6d3cbc2021-07-20 10:13:21 +010063 "components/service/crypto/provider/extension/mac"
64 "components/service/crypto/provider/extension/mac/serializer/packed-c"
Julian Hall7bfb18e2021-07-13 15:48:13 +010065 "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
Julian Hall628be292021-08-04 16:57:40 +010072 # Stub service provider backends
73 "components/rpc/dummy"
74 "components/rpc/common/caller"
75 "components/service/attestation/reporter/stub"
76 "components/service/attestation/key_mngr/stub"
77 "components/service/crypto/backend/stub"
78 "components/service/crypto/client/psa"
79 "components/service/secure_storage/backend/mock_store"
Julian Hall527ddd52021-06-28 11:57:17 +010080)
81
82target_sources(se-proxy PRIVATE
83 se_proxy_sp.c
84 service_proxy_factory.c
85)
86
87#-------------------------------------------------------------------------------
Gyorgy Szinga365a042021-12-02 01:48:27 +010088# Set target platform to provide drivers needed by the deployment
Julian Hall527ddd52021-06-28 11:57:17 +010089#
90#-------------------------------------------------------------------------------
Julian Hall527ddd52021-06-28 11:57:17 +010091add_platform(TARGET "se-proxy")
92
93#-------------------------------------------------------------------------------
94# Components used from external projects
95#
96#-------------------------------------------------------------------------------
97
Imre Kis23583e32021-10-22 14:54:51 +020098# Get libc include dir
99get_property(LIBC_INCLUDE_PATH TARGET c PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
100
Julian Hall527ddd52021-06-28 11:57:17 +0100101# Nanopb
Imre Kis23583e32021-10-22 14:54:51 +0200102list(APPEND NANOPB_EXTERNAL_INCLUDE_PATHS ${LIBC_INCLUDE_PATH})
Julian Hall527ddd52021-06-28 11:57:17 +0100103include(../../../external/nanopb/nanopb.cmake)
104target_link_libraries(se-proxy PRIVATE nanopb::protobuf-nanopb-static)
105protobuf_generate_all(TGT "se-proxy" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
106
Julian Hall527ddd52021-06-28 11:57:17 +0100107#################################################################
108
109target_compile_definitions(se-proxy PRIVATE
110 ARM64=1
111)
112
113target_include_directories(se-proxy PRIVATE
114 ${TS_ROOT}
115 ${TS_ROOT}/components
116 ${TS_ROOT}/deployments/se-proxy/opteesp
117)
118
119if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
120 target_compile_options(se-proxy PRIVATE
121 -fdiagnostics-show-option
122 -gdwarf-2
123 -mstrict-align
124 -O0
125 -std=c99
126 )
127
128 # Options for GCC that control linking
129 target_link_options(se-proxy PRIVATE
130 -zmax-page-size=4096
131 )
132 # Options directly for LD, these are not understood by GCC
133 target_link_options(se-proxy PRIVATE
134 -Wl,--as-needed
135 -Wl,--sort-section=alignment
136 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
137 )
138endif()
139
140compiler_generate_stripped_elf(TARGET se-proxy NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
141
142######################################## install
143if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
144 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
145endif()
146#TODO: api headers
147
148install(TARGETS se-proxy
149 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
150 RUNTIME DESTINATION ${TS_ENV}/bin
151 )
152install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
153
154get_property(_PROTO_FILES TARGET se-proxy PROPERTY PROTOBUF_FILES)
155install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
156
157
158set(EXPORT_SP_NAME "se-proxy")
159set(EXPORT_SP_UUID ${SP_UUID})
160include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)