blob: fec7b694693191db8d425b813fd3b00d186619fa [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)
8include(../../deployment.cmake REQUIRED)
9
10#-------------------------------------------------------------------------------
11# The CMakeLists.txt for building the crypto deployment for opteesp
12#
13# Builds the Crypto service provider for running in an SEL0 secure partition
14# hosted by OPTEE in the role of SPM.
15#-------------------------------------------------------------------------------
16include(${TS_ROOT}/environments/opteesp/env.cmake)
17project(trusted-services LANGUAGES C ASM)
18add_executable(crypto-sp)
19target_include_directories(crypto-sp PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
20set(SP_UUID "d9df52d5-16a2-4bb2-9aa4-d26d3b84e8c0")
21
22
23# Include SP DEV KIT interface
24set(SP_DEV_KIT_INC_DIR ${CMAKE_CURRENT_LIST_DIR})
25list(APPEND CMAKE_MODULE_PATH "${TS_ROOT}/external/Spdevkit")
26find_package(Spdevkit REQUIRED)
27sp_dev_kit_configure_linking(TARGET crypto-sp DEFINES ARM64=1)
28target_link_libraries(crypto-sp PRIVATE ${SP_DEV_KIT_LIBRARIES})
29
30
31add_components(TARGET "crypto-sp"
32 BASE_DIR ${TS_ROOT}
33 COMPONENTS
34 "components/messaging/ffa/libsp"
35 "components/rpc/ffarpc/endpoint"
36 "components/rpc/ffarpc/caller/sp"
37 "components/rpc/common/caller"
38 "components/rpc/common/interface"
39 "components/rpc/dummy"
40 "components/service/common"
41 "components/service/common/serializer/protobuf"
42 "components/service/common/provider"
43 "components/service/crypto/provider/mbedcrypto"
44 "components/service/crypto/provider/mbedcrypto/entropy_source/mock"
45 "components/service/crypto/provider/serializer/protobuf"
46 "components/service/secure_storage/client/psa"
47 "protocols/rpc/common/packed-c"
48 "protocols/service/secure_storage/packed-c"
49 "protocols/service/crypto/protobuf"
50 "environments/opteesp"
51)
52
53target_sources(crypto-sp PRIVATE
54 crypto_sp.c
55)
56
57######################################################## Build protobuf files
58include(../../../external/nanopb/nanopb.cmake)
59target_link_libraries(crypto-sp PRIVATE nanopb::protobuf-nanopb-static)
60protobuf_generate_all(TGT "crypto-sp" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")
61
62################################################################# mbedcrypto
63include(../../../external/mbed-crypto/mbedcrypto.cmake)
64target_link_libraries(crypto-sp PRIVATE mbedcrypto)
65
66if(CMAKE_CROSSCOMPILING)
67 target_link_libraries(crypto-sp PRIVATE stdc++ gcc m)
68endif()
69
70#################################################################
71
72target_compile_definitions(crypto-sp PRIVATE
73 ARM64=1
74)
75
76target_include_directories(crypto-sp PRIVATE
77 ${TS_ROOT}
78 ${TS_ROOT}/components
79 ${TS_ROOT}/deployments/crypto/opteesp
80)
81
82if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
83 target_compile_options(crypto-sp PRIVATE
84 -fdiagnostics-show-option
85 -fpic
86 -gdwarf-2
87 -mstrict-align
88 -O0
89 -std=gnu99
90 )
91
92 # Options for GCC that control linking
93 target_link_options(crypto-sp PRIVATE
94 -e __sp_entry
95 -fno-lto
96 -nostdlib
97 -pie
98 -zmax-page-size=4096
99 )
100 # Options directly for LD, these are not understood by GCC
101 target_link_options(crypto-sp PRIVATE
102 -Wl,--as-needed
103 -Wl,--sort-section=alignment
104 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
105 )
106endif()
107
108compiler_generate_stripped_elf(TARGET crypto-sp NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
109
110######################################## install
111if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
112 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
113endif()
114#TODO: api headers
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100115
Julian Hall4061ed62020-11-23 18:24:06 +0100116install(TARGETS crypto-sp
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100117 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
118 RUNTIME DESTINATION ${TS_ENV}/bin
Julian Hall4061ed62020-11-23 18:24:06 +0100119 )
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100120install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
Julian Hall4061ed62020-11-23 18:24:06 +0100121
122get_property(_PROTO_FILES TARGET crypto-sp PROPERTY PROTOBUF_FILES)
Gyorgy Szingc31afbf2021-02-12 01:51:55 +0100123install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
Julian Hall4061ed62020-11-23 18:24:06 +0100124
125
126set(EXPORT_SP_NAME "crypto")
127set(EXPORT_SP_UUID ${SP_UUID})
128include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)