blob: 92bd24924b9ca816db686bc1329859f917817099 [file] [log] [blame]
Julian Hall4061ed62020-11-23 18:24:06 +01001#-------------------------------------------------------------------------------
Imre Kiseeee9642021-12-17 13:59:46 +01002# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
Julian Hall4061ed62020-11-23 18:24:06 +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 Hall4061ed62020-11-23 18:24:06 +010011include(../../deployment.cmake REQUIRED)
12
13#-------------------------------------------------------------------------------
14# The CMakeLists.txt for building the crypto deployment for opteesp
15#
16# Builds the Crypto service provider for running in an SEL0 secure partition
17# hosted by OPTEE in the role of SPM.
18#-------------------------------------------------------------------------------
19include(${TS_ROOT}/environments/opteesp/env.cmake)
20project(trusted-services LANGUAGES C ASM)
21add_executable(crypto-sp)
22target_include_directories(crypto-sp PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
23set(SP_UUID "d9df52d5-16a2-4bb2-9aa4-d26d3b84e8c0")
Imre Kiseeee9642021-12-17 13:59:46 +010024set(SP_HEAP_SIZE "490 * 1024" CACHE STRING "SP heap size in bytes")
Imre Kis2ccd8e82021-10-08 11:21:14 +020025set(TRACE_PREFIX "CRYPTO" CACHE STRING "Trace prefix")
Julian Hall4061ed62020-11-23 18:24:06 +010026
julhal01ffa98d82021-01-20 13:51:58 +000027#-------------------------------------------------------------------------------
28# Components that are specific to deployment in the opteesp environment.
29#
30#-------------------------------------------------------------------------------
Julian Hall4061ed62020-11-23 18:24:06 +010031add_components(TARGET "crypto-sp"
32 BASE_DIR ${TS_ROOT}
33 COMPONENTS
Balint Dobszay286ff752022-03-04 15:57:19 +010034 "components/common/fdt"
julhal01734dbad2020-12-21 10:27:41 +000035 "components/common/tlv"
Imre Kis2ccd8e82021-10-08 11:21:14 +020036 "components/common/trace"
37 "components/common/utils"
julhal012c18fbf2021-02-01 08:29:28 +000038 "components/config/ramstore"
julhal0137e1aea2021-02-09 15:22:20 +000039 "components/config/loader/sp"
Julian Hall4061ed62020-11-23 18:24:06 +010040 "components/messaging/ffa/libsp"
41 "components/rpc/ffarpc/endpoint"
42 "components/rpc/ffarpc/caller/sp"
43 "components/rpc/common/caller"
44 "components/rpc/common/interface"
Julian Halla7e76c82021-04-14 11:12:11 +010045 "components/service/common/include"
Julian Hall99a57e32021-07-28 14:18:50 +010046 "components/service/common/client"
Julian Hall4061ed62020-11-23 18:24:06 +010047 "components/service/common/serializer/protobuf"
48 "components/service/common/provider"
Julian Hall3e614542021-07-29 11:47:47 +010049 "components/service/discovery/provider"
50 "components/service/discovery/provider/serializer/packed-c"
Julian Hall9061e6c2021-06-29 14:24:20 +010051 "components/service/crypto/provider"
Julian Hall4061ed62020-11-23 18:24:06 +010052 "components/service/crypto/provider/serializer/protobuf"
julhal01734dbad2020-12-21 10:27:41 +000053 "components/service/crypto/provider/serializer/packed-c"
Julian Hall7bfb18e2021-07-13 15:48:13 +010054 "components/service/crypto/provider/extension/hash"
55 "components/service/crypto/provider/extension/hash/serializer/packed-c"
Julian Halle7bccbe2021-07-16 09:50:34 +010056 "components/service/crypto/provider/extension/cipher"
57 "components/service/crypto/provider/extension/cipher/serializer/packed-c"
Julian Hallfe487b72021-07-19 10:29:59 +010058 "components/service/crypto/provider/extension/key_derivation"
59 "components/service/crypto/provider/extension/key_derivation/serializer/packed-c"
Julian Halla6d3cbc2021-07-20 10:13:21 +010060 "components/service/crypto/provider/extension/mac"
61 "components/service/crypto/provider/extension/mac/serializer/packed-c"
Julian Hall7bfb18e2021-07-13 15:48:13 +010062 "components/service/crypto/factory/full"
Julian Hall9061e6c2021-06-29 14:24:20 +010063 "components/service/crypto/backend/mbedcrypto"
64 "components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
Julian Halla7e76c82021-04-14 11:12:11 +010065 "components/service/secure_storage/include"
julhal011260f102021-02-15 17:34:08 +000066 "components/service/secure_storage/frontend/psa/its"
67 "components/service/secure_storage/backend/secure_storage_client"
julhal013a4207d2021-03-08 13:32:08 +000068 "components/service/secure_storage/backend/null_store"
69 "components/service/secure_storage/factory/sp/rot_store"
Julian Hall4061ed62020-11-23 18:24:06 +010070 "protocols/rpc/common/packed-c"
71 "protocols/service/secure_storage/packed-c"
72 "protocols/service/crypto/protobuf"
73 "environments/opteesp"
74)
75
76target_sources(crypto-sp PRIVATE
77 crypto_sp.c
78)
79
julhal01ffa98d82021-01-20 13:51:58 +000080#-------------------------------------------------------------------------------
Gyorgy Szinga365a042021-12-02 01:48:27 +010081# Set target platform to provide drivers needed by the deployment
julhal01ffa98d82021-01-20 13:51:58 +000082#
83#-------------------------------------------------------------------------------
julhal01ffa98d82021-01-20 13:51:58 +000084add_platform(TARGET "crypto-sp")
85
86#-------------------------------------------------------------------------------
87# Components used from external projects
88#
89#-------------------------------------------------------------------------------
90
Imre Kis23583e32021-10-22 14:54:51 +020091# Get libc include dir
Gyorgy Szing693877e2021-12-12 02:51:10 +010092get_property(LIBC_INCLUDE_PATH TARGET stdlib::c PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
Imre Kis23583e32021-10-22 14:54:51 +020093
julhal01ffa98d82021-01-20 13:51:58 +000094# Nanopb
Imre Kis23583e32021-10-22 14:54:51 +020095list(APPEND NANOPB_EXTERNAL_INCLUDE_PATHS ${LIBC_INCLUDE_PATH})
Julian Hall4061ed62020-11-23 18:24:06 +010096include(../../../external/nanopb/nanopb.cmake)
97target_link_libraries(crypto-sp PRIVATE nanopb::protobuf-nanopb-static)
98protobuf_generate_all(TGT "crypto-sp" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
99
Balint Dobszay3c52ce62021-05-10 16:27:18 +0200100# Mbed TLS provides libmbedcrypto
Imre Kis23583e32021-10-22 14:54:51 +0200101list(APPEND MBEDTLS_EXTRA_INCLUDES ${LIBC_INCLUDE_PATH})
Balint Dobszay3c52ce62021-05-10 16:27:18 +0200102include(../../../external/MbedTLS/MbedTLS.cmake)
Julian Hall4061ed62020-11-23 18:24:06 +0100103target_link_libraries(crypto-sp PRIVATE mbedcrypto)
Gyorgy Szing693877e2021-12-12 02:51:10 +0100104target_link_libraries(mbedcrypto INTERFACE stdlib::c)
Julian Hall4061ed62020-11-23 18:24:06 +0100105
Julian Hall4061ed62020-11-23 18:24:06 +0100106
107#################################################################
108
109target_compile_definitions(crypto-sp PRIVATE
110 ARM64=1
111)
112
113target_include_directories(crypto-sp PRIVATE
114 ${TS_ROOT}
115 ${TS_ROOT}/components
116 ${TS_ROOT}/deployments/crypto/opteesp
117)
118
119if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
120 target_compile_options(crypto-sp PRIVATE
121 -fdiagnostics-show-option
Julian Hall4061ed62020-11-23 18:24:06 +0100122 -gdwarf-2
123 -mstrict-align
124 -O0
Andrew Beggs97a00d42021-06-15 15:45:46 +0000125 -std=c99
Julian Hall4061ed62020-11-23 18:24:06 +0100126 )
127
128 # Options for GCC that control linking
129 target_link_options(crypto-sp PRIVATE
Julian Hall4061ed62020-11-23 18:24:06 +0100130 -zmax-page-size=4096
131 )
132 # Options directly for LD, these are not understood by GCC
133 target_link_options(crypto-sp 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 crypto-sp 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
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100147
Julian Hall4061ed62020-11-23 18:24:06 +0100148install(TARGETS crypto-sp
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100149 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
150 RUNTIME DESTINATION ${TS_ENV}/bin
Julian Hall4061ed62020-11-23 18:24:06 +0100151 )
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100152install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
Julian Hall4061ed62020-11-23 18:24:06 +0100153
154get_property(_PROTO_FILES TARGET crypto-sp PROPERTY PROTOBUF_FILES)
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100155install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
Julian Hall4061ed62020-11-23 18:24:06 +0100156
Imre Kisa74aaf92021-12-14 17:13:06 +0100157include(${TS_ROOT}/tools/cmake/common/ExportSp.cmake)
158export_sp(
159 SP_UUID ${SP_UUID}
160 SP_NAME "crypto"
161 MK_IN ${TS_ROOT}/environments/opteesp/sp.mk.in
162 DTS_IN ${CMAKE_CURRENT_LIST_DIR}/default_crypto.dts.in
163 JSON_IN ${TS_ROOT}/environments/opteesp/sp_pkg.json.in
164)