1#------------------------------------------------------------------------------- 2# Copyright (c) 2020-2023, Arm Limited and Contributors. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6#------------------------------------------------------------------------------- 7cmake_minimum_required(VERSION 3.18 FATAL_ERROR) 8include(../../deployment.cmake REQUIRED) 9 10#------------------------------------------------------------------------------- 11# The CMakeLists.txt for building the libts deployment for linux-pc 12# 13# Used for building the libts library for the linux-pc enviroment. Also 14# builds the libts-test executable that acts as a client for the services 15# accessed via libts. For the linux-pc deployment, libts contains 16# standalone versions of a set of trusted services to support client 17# application development in a native PC environment. 18#------------------------------------------------------------------------------- 19include(${TS_ROOT}/environments/linux-pc/env_shared_lib.cmake) 20project(trusted-services LANGUAGES CXX C) 21add_library(ts SHARED) 22target_include_directories(ts PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}") 23 24#------------------------------------------------------------------------------- 25# For user-specific tracing set to TRACE_LEVEL_NONE and implement: 26# void trace_puts(const char *str) 27#------------------------------------------------------------------------------- 28 29set(TRACE_PREFIX "LIBTS" CACHE STRING "Trace prefix") 30set(TRACE_LEVEL "TRACE_LEVEL_DEBUG" CACHE STRING "Trace level") 31#------------------------------------------------------------------------------- 32# External project source-level dependencies 33# 34#------------------------------------------------------------------------------- 35include(${TS_ROOT}/external/tf_a/tf-a.cmake) 36add_tfa_dependency(TARGET "ts") 37 38#------------------------------------------------------------------------------- 39# Options and variables 40#------------------------------------------------------------------------------- 41target_compile_definitions(ts PRIVATE 42 -DUEFI_AUTH_VAR 43) 44 45#------------------------------------------------------------------------------- 46# Define public interfaces for library 47# 48#------------------------------------------------------------------------------- 49 50# Extend libts public interface for linux-pc to allow for alternative fwu 51# device configurations. This is intended for test. 52target_compile_definitions(ts PRIVATE 53 EXPORT_PUBLIC_INTERFACE_FWU_SERVICE_CONTEXT 54) 55 56# Enable RPMB authentication key write for host tests 57set(RPMB_WRITE_KEY TRUE CACHE BOOL "Enable RPMB Authentication Key Write") 58 59#------------------------------------------------------------------------------- 60# Components that are specific to deployment in the linux-pc environment. 61# 62#------------------------------------------------------------------------------- 63add_components( 64 TARGET "ts" 65 BASE_DIR ${TS_ROOT} 66 COMPONENTS 67 "components/rpc/direct" 68 "components/rpc/common/endpoint" 69 "components/common/tlv" 70 "components/common/uuid" 71 "components/common/endian" 72 "components/common/utils" 73 "components/common/crc32" 74 "components/common/mbedtls" 75 "components/config/ramstore" 76 "components/service/common/include" 77 "components/service/common/client" 78 "components/service/common/serializer/protobuf" 79 "components/service/common/provider" 80 "components/service/locator/standalone" 81 "components/service/locator/standalone/services/crypto" 82 "components/service/locator/standalone/services/internal-trusted-storage" 83 "components/service/locator/standalone/services/protected-storage" 84 "components/service/locator/standalone/services/test-runner" 85 "components/service/locator/standalone/services/attestation" 86 "components/service/locator/standalone/services/block-storage" 87 "components/service/locator/standalone/services/fwu" 88 "components/service/locator/standalone/services/rpmb" 89 "components/service/locator/standalone/services/smm-variable" 90 "components/service/attestation/include" 91 "components/service/attestation/claims" 92 "components/service/attestation/claims/sources/boot_seed_generator" 93 "components/service/attestation/claims/sources/null_lifecycle" 94 "components/service/attestation/claims/sources/instance_id" 95 "components/service/attestation/claims/sources/implementation_id" 96 "components/service/attestation/claims/sources/event_log" 97 "components/service/attestation/claims/sources/event_log/mock" 98 "components/service/attestation/reporter/local" 99 "components/service/attestation/reporter/eat" 100 "components/service/attestation/key_mngr/local" 101 "components/service/attestation/provider" 102 "components/service/attestation/provider/serializer/packed-c" 103 "components/service/crypto/include" 104 "components/service/crypto/client/psa" 105 "components/service/block_storage/block_store" 106 "components/service/block_storage/block_store/device" 107 "components/service/block_storage/block_store/device/ram" 108 "components/service/block_storage/block_store/device/rpmb" 109 "components/service/block_storage/block_store/partitioned" 110 "components/service/block_storage/block_store/client" 111 "components/service/block_storage/provider" 112 "components/service/block_storage/provider/serializer/packed-c" 113 "components/service/block_storage/config/gpt" 114 "components/service/block_storage/config/ref" 115 "components/service/block_storage/factory/ref_ram_gpt" 116 "components/service/block_storage/factory/client" 117 "components/service/block_storage/factory/rpmb" 118 "components/service/crypto/provider" 119 "components/service/crypto/provider/serializer/protobuf" 120 "components/service/crypto/provider/serializer/packed-c" 121 "components/service/crypto/provider/extension/hash" 122 "components/service/crypto/provider/extension/hash/serializer/packed-c" 123 "components/service/crypto/provider/extension/cipher" 124 "components/service/crypto/provider/extension/cipher/serializer/packed-c" 125 "components/service/crypto/provider/extension/key_derivation" 126 "components/service/crypto/provider/extension/key_derivation/serializer/packed-c" 127 "components/service/crypto/provider/extension/mac" 128 "components/service/crypto/provider/extension/mac/serializer/packed-c" 129 "components/service/crypto/provider/extension/aead" 130 "components/service/crypto/provider/extension/aead/serializer/packed-c" 131 "components/service/crypto/factory/full" 132 "components/service/crypto/backend/mbedcrypto" 133 "components/service/crypto/backend/mbedcrypto/trng_adapter/linux" 134 "components/service/rpmb/backend" 135 "components/service/rpmb/backend/emulated" 136 "components/service/rpmb/client" 137 "components/service/rpmb/frontend" 138 "components/service/rpmb/frontend/platform/default" 139 "components/service/rpmb/provider" 140 "components/service/secure_storage/include" 141 "components/service/secure_storage/frontend/psa/its" 142 "components/service/secure_storage/frontend/secure_storage_provider" 143 "components/service/secure_storage/backend/secure_storage_client" 144 "components/service/secure_storage/backend/mock_store" 145 "components/service/secure_storage/backend/null_store" 146 "components/service/secure_storage/backend/secure_flash_store" 147 "components/service/secure_storage/backend/secure_flash_store/flash_fs" 148 "components/service/secure_storage/backend/secure_flash_store/flash" 149 "components/service/secure_storage/backend/secure_flash_store/flash/block_store_adapter" 150 "components/service/test_runner/provider" 151 "components/service/test_runner/provider/serializer/packed-c" 152 "components/service/test_runner/provider/backend/mock" 153 "components/service/test_runner/provider/backend/simple_c" 154 "components/service/uefi/smm_variable/backend" 155 "components/service/uefi/smm_variable/provider" 156 "components/media/disk" 157 "components/media/disk/disk_images" 158 "components/media/disk/formatter" 159 "components/media/volume" 160 "components/media/volume/index" 161 "components/media/volume/base_io_dev" 162 "components/media/volume/block_volume" 163 "protocols/rpc/common/packed-c" 164 "protocols/service/crypto/packed-c" 165 "protocols/service/crypto/protobuf" 166 "protocols/service/secure_storage/packed-c" 167) 168 169#------------------------------------------------------------------------------- 170# Extend with components that are common across all deployments of 171# libts 172# 173#------------------------------------------------------------------------------- 174include(../libts.cmake REQUIRED) 175 176#------------------------------------------------------------------------------- 177# Components used by libts from external projects 178# 179#------------------------------------------------------------------------------- 180 181# Nanopb 182include(${TS_ROOT}/external/nanopb/nanopb.cmake) 183target_link_libraries(ts PRIVATE nanopb::protobuf-nanopb-static) 184protobuf_generate_all(TGT "ts" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols") 185 186# MbedTLS 187set(MBEDTLS_CONFIG_FILE "${TS_ROOT}/external/MbedTLS/config/crypto_provider_x509.h" 188 CACHE STRING "Configuration file for Mbed TLS" FORCE) 189include(${TS_ROOT}/external/MbedTLS/MbedTLS.cmake) 190target_link_libraries(ts PRIVATE MbedTLS::mbedcrypto) 191target_link_libraries(ts PRIVATE MbedTLS::mbedx509) 192 193# Pass the location of the mbedtls config file to C preprocessor. 194target_compile_definitions(ts PRIVATE 195 MBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}" 196) 197 198# Qcbor 199include(${TS_ROOT}/external/qcbor/qcbor.cmake) 200target_link_libraries(ts PRIVATE qcbor) 201 202# t_cose 203include(${TS_ROOT}/external/t_cose/t_cose.cmake) 204target_link_libraries(ts PRIVATE t_cose) 205 206#------------------------------------------------------------------------------- 207# Test executable (libts-test) for testing libts static library 208# 209#------------------------------------------------------------------------------- 210add_executable(libts-test) 211target_include_directories(libts-test PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}") 212target_link_libraries(libts-test PRIVATE "-Wl,--whole-archive" ts "-Wl,--no-whole-archive") 213 214add_components( 215 TARGET "libts-test" 216 BASE_DIR ${TS_ROOT} 217 COMPONENTS 218 "components/app/test-runner" 219 "components/common/tlv" 220 "components/rpc/common/caller" 221 "components/rpc/common/interface" 222 "components/rpc/common/endpoint" 223 "components/service/common/include" 224 "components/service/secure_storage/include" 225 "components/service/secure_storage/test/service" 226 "components/service/secure_storage/frontend/psa/its" 227 "components/service/secure_storage/frontend/psa/its/test" 228 "components/service/secure_storage/frontend/psa/ps" 229 "components/service/secure_storage/frontend/psa/ps/test" 230 "components/service/secure_storage/backend/secure_storage_client" 231 "components/service/crypto/test/service" 232 "components/service/crypto/test/service/protobuf" 233 "components/service/crypto/test/service/packed-c" 234 "components/service/crypto/include" 235 "components/service/crypto/client/psa" 236 "components/service/crypto/client/cpp" 237 "components/service/crypto/client/cpp/protocol/protobuf" 238 "components/service/crypto/client/cpp/protocol/packed-c" 239 "components/service/common/serializer/protobuf" 240 "components/service/common/client" 241 "protocols/service/crypto/protobuf" 242 "protocols/service/crypto/packed-c" 243) 244 245#------------------------------------------------------------------------------- 246# Components used by libts-test from external projects 247# 248#------------------------------------------------------------------------------- 249 250# CppUTest 251include(${TS_ROOT}/external/CppUTest/CppUTest.cmake) 252target_link_libraries(libts-test PRIVATE CppUTest) 253 254# Nanopb 255target_link_libraries(libts-test PRIVATE nanopb::protobuf-nanopb-static) 256protobuf_generate_all(TGT "libts-test" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols") 257 258# Mbedcrypto 259target_link_libraries(libts-test PRIVATE MbedTLS::mbedcrypto) 260