blob: 8d6ae679d5d6162f506a405d133253b6607d9b19 [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"
Julian Hallc52807c2021-08-13 15:15:18 +010045 "components/common/uuid"
Julian Hallcaa4af82021-05-19 12:02:36 +010046 "components/config/ramstore"
47 "components/config/loader/sp"
48 "components/messaging/ffa/libsp"
49 "components/rpc/ffarpc/endpoint"
50 "components/rpc/ffarpc/caller/sp"
51 "components/rpc/common/caller"
52 "components/rpc/common/interface"
53 "components/service/common/include"
Julian Hallc52807c2021-08-13 15:15:18 +010054 "components/service/common/client"
Julian Hallcaa4af82021-05-19 12:02:36 +010055 "components/service/common/provider"
Julian Hallc52807c2021-08-13 15:15:18 +010056 "components/service/locator"
57 "components/service/locator/interface"
58 "components/service/locator/sp"
59 "components/service/locator/sp/ffa"
Julian Hallcaa4af82021-05-19 12:02:36 +010060 "components/service/attestation/include"
61 "components/service/attestation/claims"
62 "components/service/attestation/claims/sources/boot_seed_generator"
63 "components/service/attestation/claims/sources/null_lifecycle"
64 "components/service/attestation/claims/sources/instance_id"
Julian Hallb7db5802021-07-26 16:20:40 +010065 "components/service/attestation/claims/sources/implementation_id"
Julian Hallcaa4af82021-05-19 12:02:36 +010066 "components/service/attestation/claims/sources/event_log"
67 "components/service/attestation/claims/sources/event_log/mock"
Julian Hall644b57a2021-06-30 08:45:19 +010068 "components/service/attestation/reporter/local"
69 "components/service/attestation/reporter/eat"
70 "components/service/attestation/key_mngr/local"
Julian Hallcaa4af82021-05-19 12:02:36 +010071 "components/service/attestation/provider"
72 "components/service/attestation/provider/serializer/packed-c"
Julian Hallc52807c2021-08-13 15:15:18 +010073 "components/service/crypto/include"
74 "components/service/crypto/client/psa"
Julian Hallcaa4af82021-05-19 12:02:36 +010075 "protocols/rpc/common/packed-c"
76 "environments/opteesp"
77)
78
79target_sources(attestation PRIVATE
80 attestation_sp.c
81)
82
83#-------------------------------------------------------------------------------
84# Use the selected platform to provide drivers needed by the deployment
85#
86#-------------------------------------------------------------------------------
Julian Hall6bab0212021-07-27 11:45:47 +010087# temporarily force platform - with this change, the build interface to
88# an external builder such as a Yocto recipe is unchanged. Should remove
89# once the build interface is published.
90set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Overridden" FORCE)
91
Julian Hallcaa4af82021-05-19 12:02:36 +010092add_platform(TARGET "attestation")
93
94#-------------------------------------------------------------------------------
95# Components used from external projects
96#
97#-------------------------------------------------------------------------------
Julian Hallcaa4af82021-05-19 12:02:36 +010098
99# Qcbor
Andrew Beggs97a00d42021-06-15 15:45:46 +0000100set (QCBOR_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
Julian Hallcaa4af82021-05-19 12:02:36 +0100101include(${TS_ROOT}/external/qcbor/qcbor.cmake)
102target_link_libraries(attestation PRIVATE qcbor)
103
104# t_cose
Andrew Beggs97a00d42021-06-15 15:45:46 +0000105set (TCOSE_EXTERNAL_INCLUDE_PATHS ${SP_DEV_KIT_INCLUDE_DIR})
Julian Hallcaa4af82021-05-19 12:02:36 +0100106include(${TS_ROOT}/external/t_cose/t_cose.cmake)
107target_link_libraries(attestation PRIVATE t_cose)
108
Julian Hallcaa4af82021-05-19 12:02:36 +0100109#################################################################
110
111target_compile_definitions(attestation PRIVATE
112 ARM64=1
113)
114
115target_include_directories(attestation PRIVATE
116 ${TS_ROOT}
117 ${TS_ROOT}/components
118 ${TS_ROOT}/deployments/attestation/opteesp
119)
120
121if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
122 target_compile_options(attestation PRIVATE
123 -fdiagnostics-show-option
Julian Hallcaa4af82021-05-19 12:02:36 +0100124 -gdwarf-2
125 -mstrict-align
126 -O0
Andrew Beggs97a00d42021-06-15 15:45:46 +0000127 -std=c99
Julian Hallcaa4af82021-05-19 12:02:36 +0100128 )
129
130 # Options for GCC that control linking
131 target_link_options(attestation PRIVATE
Julian Hallcaa4af82021-05-19 12:02:36 +0100132 -zmax-page-size=4096
133 )
134 # Options directly for LD, these are not understood by GCC
135 target_link_options(attestation PRIVATE
136 -Wl,--as-needed
137 -Wl,--sort-section=alignment
138 # -Wl,--dynamic-list ${CMAKE_CURRENT_LIST_DIR}/dyn_list
139 )
140endif()
141
142compiler_generate_stripped_elf(TARGET attestation NAME "${SP_UUID}.stripped.elf" RES STRIPPED_ELF)
143
144######################################## install
145if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
146 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
147endif()
148#TODO: api headers
149
150install(TARGETS attestation
151 PUBLIC_HEADER DESTINATION ${TS_ENV}/include
152 RUNTIME DESTINATION ${TS_ENV}/bin
153 )
154install(FILES ${STRIPPED_ELF} DESTINATION ${TS_ENV}/bin)
155
156get_property(_PROTO_FILES TARGET attestation PROPERTY PROTOBUF_FILES)
157install(FILES ${_PROTO_FILES} DESTINATION ${TS_ENV}/lib/protobuf)
158
159
160set(EXPORT_SP_NAME "attestation")
161set(EXPORT_SP_UUID ${SP_UUID})
162include(${TS_ROOT}/environments/opteesp/ExportSp.cmake)