blob: 2631c00a8eeedd177ddbf7f4c02929cb3f1bdebe [file] [log] [blame]
Julian Hall4061ed62020-11-23 18:24:06 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2020, 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 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
115install(TARGETS crypto-sp
116 PUBLIC_HEADER DESTINATION include
117 RUNTIME DESTINATION bin
118 )
119install(FILES ${STRIPPED_ELF} DESTINATION bin)
120
121get_property(_PROTO_FILES TARGET crypto-sp PROPERTY PROTOBUF_FILES)
122install(FILES ${_PROTO_FILES} DESTINATION lib/protobuf)
123
124
125set(EXPORT_SP_NAME "crypto")
126set(EXPORT_SP_UUID ${SP_UUID})
127include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)