blob: 1492cc903c951cb058ed468a0c7523caa1f66bdd [file] [log] [blame]
Julian Hallcaa4af82021-05-19 12:02:36 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2021, 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 attestation deployment for opteesp
12#
13# Builds the attestation 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(attestation)
19target_include_directories(attestation PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
20set(SP_UUID "a1baf155-8876-4695-8f7c-54955e8db974")
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 attestation DEFINES ARM64=1)
28target_link_libraries(attestation PRIVATE ${SP_DEV_KIT_LIBRARIES})
29
30#-------------------------------------------------------------------------------
31# Default deployment specific configuration
32#
33#-------------------------------------------------------------------------------
34set(TS_NO_FLOAT_HW ON)
35
36#-------------------------------------------------------------------------------
37# Components that are specific to deployment in the opteesp environment.
38#
39#-------------------------------------------------------------------------------
40add_components(TARGET "attestation"
41 BASE_DIR ${TS_ROOT}
42 COMPONENTS
43 "components/common/tlv"
44 "components/common/endian"
45 "components/config/ramstore"
46 "components/config/loader/sp"
47 "components/messaging/ffa/libsp"
48 "components/rpc/ffarpc/endpoint"
49 "components/rpc/ffarpc/caller/sp"
50 "components/rpc/common/caller"
51 "components/rpc/common/interface"
52 "components/service/common/include"
53 "components/service/common/provider"
54 "components/service/attestation/include"
55 "components/service/attestation/claims"
56 "components/service/attestation/claims/sources/boot_seed_generator"
57 "components/service/attestation/claims/sources/null_lifecycle"
58 "components/service/attestation/claims/sources/instance_id"
Julian Hallb7db5802021-07-26 16:20:40 +010059 "components/service/attestation/claims/sources/implementation_id"
Julian Hallcaa4af82021-05-19 12:02:36 +010060 "components/service/attestation/claims/sources/event_log"
61 "components/service/attestation/claims/sources/event_log/mock"
Julian Hall644b57a2021-06-30 08:45:19 +010062 "components/service/attestation/reporter/local"
63 "components/service/attestation/reporter/eat"
64 "components/service/attestation/key_mngr/local"
Julian Hallcaa4af82021-05-19 12:02:36 +010065 "components/service/attestation/provider"
66 "components/service/attestation/provider/serializer/packed-c"
Julian Hall6bab0212021-07-27 11:45:47 +010067 "components/service/crypto/backend/mbedcrypto"
68 "components/service/crypto/backend/mbedcrypto/trng_adapter/platform"
69 "components/service/secure_storage/include"
70 "components/service/secure_storage/frontend/psa/its"
71 "components/service/secure_storage/backend/mock_store"
Julian Hallcaa4af82021-05-19 12:02:36 +010072 "protocols/rpc/common/packed-c"
73 "environments/opteesp"
74)
75
76target_sources(attestation PRIVATE
77 attestation_sp.c
78)
79
80#-------------------------------------------------------------------------------
81# Use the selected platform to provide drivers needed by the deployment
82#
83#-------------------------------------------------------------------------------
Julian Hall6bab0212021-07-27 11:45:47 +010084# temporarily force platform - with this change, the build interface to
85# an external builder such as a Yocto recipe is unchanged. Should remove
86# once the build interface is published.
87set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Overridden" FORCE)
88
Julian Hallcaa4af82021-05-19 12:02:36 +010089add_platform(TARGET "attestation")
90
91#-------------------------------------------------------------------------------
92# Components used from external projects
93#
94#-------------------------------------------------------------------------------
Andrew Beggs97a00d42021-06-15 15:45:46 +000095list(APPEND MBEDTLS_EXTRA_INCLUDES ${SP_DEV_KIT_INCLUDE_DIR})
Julian Hallcaa4af82021-05-19 12:02:36 +010096
97# Mbed TLS provides libmbedcrypto
98include(../../../external/MbedTLS/MbedTLS.cmake)
99target_link_libraries(attestation PRIVATE mbedcrypto)
100
101# Qcbor
Andrew Beggs97a00d42021-06-15 15:45:46 +0000102set (QCBOR_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
Julian Hallcaa4af82021-05-19 12:02:36 +0100103include(${TS_ROOT}/external/qcbor/qcbor.cmake)
104target_link_libraries(attestation PRIVATE qcbor)
105
106# t_cose
Andrew Beggs97a00d42021-06-15 15:45:46 +0000107set (TCOSE_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
Julian Hallcaa4af82021-05-19 12:02:36 +0100108include(${TS_ROOT}/external/t_cose/t_cose.cmake)
109target_link_libraries(attestation PRIVATE t_cose)
110
111if(CMAKE_CROSSCOMPILING)
112 target_link_libraries(attestation PRIVATE stdc++ gcc m)
113endif()
114
115#################################################################
116
117target_compile_definitions(attestation PRIVATE
118 ARM64=1
119)
120
121target_include_directories(attestation PRIVATE
122 ${TS_ROOT}
123 ${TS_ROOT}/components
124 ${TS_ROOT}/deployments/attestation/opteesp
125)
126
127if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
128 target_compile_options(attestation PRIVATE
129 -fdiagnostics-show-option
Julian Hallcaa4af82021-05-19 12:02:36 +0100130 -gdwarf-2
131 -mstrict-align
132 -O0
Andrew Beggs97a00d42021-06-15 15:45:46 +0000133 -std=c99
Julian Hallcaa4af82021-05-19 12:02:36 +0100134 )
135
136 # Options for GCC that control linking
137 target_link_options(attestation PRIVATE
Julian Hallcaa4af82021-05-19 12:02:36 +0100138 -zmax-page-size=4096
139 )
140 # Options directly for LD, these are not understood by GCC
141 target_link_options(attestation PRIVATE
142 -Wl,--as-needed
143 -Wl,--sort-section=alignment
144 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
145 )
146endif()
147
148compiler_generate_stripped_elf(TARGET attestation NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
149
150######################################## install
151if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
152 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
153endif()
154#TODO: api headers
155
156install(TARGETS attestation
157 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
158 RUNTIME DESTINATION ${TS_ENV}/bin
159 )
160install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
161
162get_property(_PROTO_FILES TARGET attestation PROPERTY PROTOBUF_FILES)
163install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
164
165
166set(EXPORT_SP_NAME "attestation")
167set(EXPORT_SP_UUID ${SP_UUID})
168include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)