blob: 8ada74e91e9d83d8da9762ce70df0e7668f7793f [file] [log] [blame]
Julian Hall4061ed62020-11-23 18:24:06 +01001#-------------------------------------------------------------------------------
Gyorgy Szingc31afbf2021-02-12 01:51:55 +01002# Copyright (c) 2020-2021, 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")
24
25
26# Include SP DEV KIT interface
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 crypto-sp DEFINES ARM64=1)
31target_link_libraries(crypto-sp PRIVATE ${SP_DEV_KIT_LIBRARIES})
32
julhal01ffa98d82021-01-20 13:51:58 +000033#-------------------------------------------------------------------------------
34# Components that are specific to deployment in the opteesp environment.
35#
36#-------------------------------------------------------------------------------
Julian Hall4061ed62020-11-23 18:24:06 +010037add_components(TARGET "crypto-sp"
38 BASE_DIR ${TS_ROOT}
39 COMPONENTS
julhal01734dbad2020-12-21 10:27:41 +000040 "components/common/tlv"
julhal012c18fbf2021-02-01 08:29:28 +000041 "components/config/ramstore"
julhal0137e1aea2021-02-09 15:22:20 +000042 "components/config/loader/sp"
Julian Hall4061ed62020-11-23 18:24:06 +010043 "components/messaging/ffa/libsp"
44 "components/rpc/ffarpc/endpoint"
45 "components/rpc/ffarpc/caller/sp"
46 "components/rpc/common/caller"
47 "components/rpc/common/interface"
Julian Halla7e76c82021-04-14 11:12:11 +010048 "components/service/common/include"
Julian Hall99a57e32021-07-28 14:18:50 +010049 "components/service/common/client"
Julian Hall4061ed62020-11-23 18:24:06 +010050 "components/service/common/serializer/protobuf"
51 "components/service/common/provider"
Julian Hall3e614542021-07-29 11:47:47 +010052 "components/service/discovery/provider"
53 "components/service/discovery/provider/serializer/packed-c"
Julian Hall9061e6c2021-06-29 14:24:20 +010054 "components/service/crypto/provider"
Julian Hall4061ed62020-11-23 18:24:06 +010055 "components/service/crypto/provider/serializer/protobuf"
julhal01734dbad2020-12-21 10:27:41 +000056 "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 Hall9061e6c2021-06-29 14:24:20 +010066 "components/service/crypto/backend/mbedcrypto"
67 "components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
Julian Halla7e76c82021-04-14 11:12:11 +010068 "components/service/secure_storage/include"
julhal011260f102021-02-15 17:34:08 +000069 "components/service/secure_storage/frontend/psa/its"
70 "components/service/secure_storage/backend/secure_storage_client"
julhal013a4207d2021-03-08 13:32:08 +000071 "components/service/secure_storage/backend/null_store"
72 "components/service/secure_storage/factory/sp/rot_store"
Julian Hall4061ed62020-11-23 18:24:06 +010073 "protocols/rpc/common/packed-c"
74 "protocols/service/secure_storage/packed-c"
75 "protocols/service/crypto/protobuf"
76 "environments/opteesp"
77)
78
79target_sources(crypto-sp PRIVATE
80 crypto_sp.c
81)
82
julhal01ffa98d82021-01-20 13:51:58 +000083#-------------------------------------------------------------------------------
Gyorgy Szinga365a042021-12-02 01:48:27 +010084# Set target platform to provide drivers needed by the deployment
julhal01ffa98d82021-01-20 13:51:58 +000085#
86#-------------------------------------------------------------------------------
julhal01ffa98d82021-01-20 13:51:58 +000087add_platform(TARGET "crypto-sp")
88
89#-------------------------------------------------------------------------------
90# Components used from external projects
91#
92#-------------------------------------------------------------------------------
93
94# Nanopb
Andrew Beggs97a00d42021-06-15 15:45:46 +000095list(APPEND NANOPB_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
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
Andrew Beggs97a00d42021-06-15 15:45:46 +0000101list(APPEND MBEDTLS_EXTRA_INCLUDES ${SP_DEV_KIT_INCLUDE_DIR})
102set(MBEDTLS_EXTRA_INCLUDES ${MBEDTLS_EXTRA_INCLUDES}
103 CACHE STRING "PSA ITS for Mbed TLS" FORCE)
Balint Dobszay3c52ce62021-05-10 16:27:18 +0200104include(../../../external/MbedTLS/MbedTLS.cmake)
Julian Hall4061ed62020-11-23 18:24:06 +0100105target_link_libraries(crypto-sp PRIVATE mbedcrypto)
106
107if(CMAKE_CROSSCOMPILING)
108 target_link_libraries(crypto-sp PRIVATE stdc++ gcc m)
109endif()
110
111#################################################################
112
113target_compile_definitions(crypto-sp PRIVATE
114 ARM64=1
115)
116
117target_include_directories(crypto-sp PRIVATE
118 ${TS_ROOT}
119 ${TS_ROOT}/components
120 ${TS_ROOT}/deployments/crypto/opteesp
121)
122
123if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
124 target_compile_options(crypto-sp PRIVATE
125 -fdiagnostics-show-option
Julian Hall4061ed62020-11-23 18:24:06 +0100126 -gdwarf-2
127 -mstrict-align
128 -O0
Andrew Beggs97a00d42021-06-15 15:45:46 +0000129 -std=c99
Julian Hall4061ed62020-11-23 18:24:06 +0100130 )
131
132 # Options for GCC that control linking
133 target_link_options(crypto-sp PRIVATE
Julian Hall4061ed62020-11-23 18:24:06 +0100134 -zmax-page-size=4096
135 )
136 # Options directly for LD, these are not understood by GCC
137 target_link_options(crypto-sp PRIVATE
138 -Wl,--as-needed
139 -Wl,--sort-section=alignment
140 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
141 )
142endif()
143
144compiler_generate_stripped_elf(TARGET crypto-sp NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
145
146######################################## install
147if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
148 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
149endif()
150#TODO: api headers
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100151
Julian Hall4061ed62020-11-23 18:24:06 +0100152install(TARGETS crypto-sp
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100153 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
154 RUNTIME DESTINATION ${TS_ENV}/bin
Julian Hall4061ed62020-11-23 18:24:06 +0100155 )
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100156install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
Julian Hall4061ed62020-11-23 18:24:06 +0100157
158get_property(_PROTO_FILES TARGET crypto-sp PROPERTY PROTOBUF_FILES)
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100159install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
Julian Hall4061ed62020-11-23 18:24:06 +0100160
161
162set(EXPORT_SP_NAME "crypto")
163set(EXPORT_SP_UUID ${SP_UUID})
164include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)