blob: 364e2454db8f69863eb293189d306df460064b3f [file] [log] [blame]
#-------------------------------------------------------------------------------
# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.15)
add_executable(tfm_s)
add_library(secure_fw INTERFACE)
add_library(tfm_secure_api INTERFACE)
add_library(tfm_partitions INTERFACE)
# Lots of seperate things need to know which partitions are enabled, so this
# meta-target is provided so the related compile definitions can be collected in
# such a way that they don't cause issues with linking to the full spm (which is
# the other place these could be collected) Actual definitions are placed in the
# directories of the partitions
add_library(tfm_partition_defs INTERFACE)
add_subdirectory(partitions/lib/sprt)
add_subdirectory(partitions/audit_logging)
add_subdirectory(partitions/crypto)
add_subdirectory(partitions/initial_attestation)
add_subdirectory(partitions/protected_storage)
add_subdirectory(partitions/internal_trusted_storage)
add_subdirectory(partitions/platform)
add_subdirectory(partitions/psa_proxy)
add_subdirectory(spm)
target_include_directories(secure_fw
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/partitions>
)
target_link_libraries(secure_fw
INTERFACE
tfm_spm
tfm_partitions
)
target_link_libraries(tfm_s
PRIVATE
secure_fw
platform_s
psa_interface
tfm_sprt
)
set_target_properties(tfm_s
PROPERTIES
SUFFIX ".axf"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
target_link_options(tfm_s
PRIVATE
--entry=Reset_Handler
$<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_s.map>
$<$<C_COMPILER_ID:ARMClang>:--map>
$<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_s.map>
)
add_convert_to_bin_target(tfm_s)
############################ Secure API ########################################
target_include_directories(tfm_secure_api
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(tfm_secure_api
INTERFACE
tfm_arch
)
set_source_files_properties(
${CMAKE_SOURCE_DIR}/interface/src/psa/psa_client.c
${CMAKE_SOURCE_DIR}/interface/src/psa/psa_service.c
PROPERTIES
COMPILE_FLAGS $<$<C_COMPILER_ID:GNU>:-Wno-unused-parameter>
COMPILE_FLAGS $<$<C_COMPILER_ID:ARMClang>:-Wno-unused-parameter>
)
############################# Secure veneers ###################################
if(NOT (TFM_PSA_API AND TFM_MULTI_CORE_TOPOLOGY))
add_library(tfm_s_veneers STATIC)
target_sources(tfm_s_veneers
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
)
# Since s_veneers.o doesn't exist when this is evaluated by cmake we need to
# explicity specify what language it will use.
set_target_properties(tfm_s_veneers
PROPERTIES
LINKER_LANGUAGE C
)
# Pretend we have a command to generate the veneers, when in reality all
# that's needed is the dependency on tfm_s. This is required for the ninja
# build system
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
COMMAND
DEPENDS tfm_s
)
target_link_options(tfm_s
PRIVATE
${LINKER_VENEER_OUTPUT_FLAG}${CMAKE_CURRENT_BINARY_DIR}/s_veneers.o
)
endif()
############################### CODE SHARING ###################################
if (TFM_CODE_SHARING)
set(LIB_LIST mbedcrypto
crypto_service_cc312
platform_s
tfm_psa_rot_partition_crypto
tfm_psa_rot_partition_audit
tfm_psa_rot_partition_attestation
tfm_app_rot_partition_ps
tfm_psa_rot_partition_its
tfm_psa_rot_partition_platform
platform_s
tfm_sprt
tfm_spm
)
if (TFM_CODE_SHARING_PATH)
compiler_link_shared_code(tfm_s
${TFM_CODE_SHARING_PATH} # Path to shared code
EXTERNAL_TARGET # Not produced by tf-m build
"${LIB_LIST}"
)
else()
compiler_link_shared_code(tfm_s
${CMAKE_CURRENT_BINARY_DIR}/../bl2
bl2
"${LIB_LIST}"
)
endif()
endif()