#------------------------------------------------------------------------------- # Copyright (c) 2020-2023, Arm Limited. All rights reserved. # Copyright (c) 2021-2023 Cypress Semiconductor Corporation (an Infineon # company) or an affiliate of Cypress Semiconductor Corporation. All rights # reserved. # # SPDX-License-Identifier: BSD-3-Clause # #------------------------------------------------------------------------------- cmake_minimum_required(VERSION 3.21) if(PSA_FRAMEWORK_HAS_MM_IOVEC) message(NOTICE "**** MM-IOVEC is enabled for memory and runtime optimizations for larger buffers, ****\n" "**** but reduces mitigation for common security vulnerabilities. ****\n" "**** Check FF-M 1.1 https://developer.arm.com/documentation/aes0039/latest for more details. ****") endif() add_library(tfm_spm STATIC) add_library(tfm_spm_defs INTERFACE) add_library(tfm_boot_status INTERFACE) add_library(tfm_arch INTERFACE) add_dependencies(tfm_spm manifest_tool) # Generate TF-M version configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/tfm_version.h.in ${CMAKE_BINARY_DIR}/generated/secure_fw/spm/include/tfm_version.h) target_include_directories(tfm_spm PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/core PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/secure_fw/include ${CMAKE_SOURCE_DIR}/secure_fw/partitions/lib/runtime ${CMAKE_BINARY_DIR}/generated ${CMAKE_BINARY_DIR}/generated/secure_fw/spm/include ${CMAKE_BINARY_DIR}/generated/secure_fw/spm/core ) target_sources(tfm_spm PRIVATE core/tfm_boot_data.c core/utilities.c $<$>:core/spm_log.c> core/arch/tfm_arch.c core/main.c core/spm_ipc.c core/rom_loader.c core/psa_api.c core/psa_call_api.c $<$:core/mailbox_agent_api.c> core/psa_version_api.c core/psa_read_write_skip_api.c $<$:core/psa_mmiovec_api.c> $<$:core/psa_connection_api.c> $<$,$>:core/psa_irq_api.c> $<$:core/backend_ipc.c> $<$:core/backend_sfn.c> $<$,$>:core/interrupt.c> $<$:core/stack_watermark.c> core/tfm_svcalls.c core/tfm_pools.c $<$:core/thread.c> $<$:ns_client_ext/tfm_ns_ctx.c> ns_client_ext/tfm_spm_ns_ctx.c $<$,$>:core/spm_connection_pool.c> $<$,$>>:core/spm_local_connection.c> #TODO add other arches $<$:core/arch/tfm_arch_v8m_main.c> $<$:core/arch/tfm_arch_v8m_base.c> $<$:core/arch/tfm_arch_v8m_main.c> $<$:core/arch/tfm_arch_v6m_v7m.c> $<$:core/arch/tfm_arch_v6m_v7m.c> ${CMAKE_SOURCE_DIR}/platform/ext/common/tfm_hal_nvic.c ) target_include_directories(tfm_spm_defs INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/core $ $ $ ${CMAKE_CURRENT_SOURCE_DIR}/core/arch ) target_link_libraries(tfm_spm PUBLIC tfm_arch tfm_spm_defs PRIVATE platform_s tfm_boot_status tfm_config tfm_partitions tfm_fih_headers tfm_sprt $<$>:tfm_fih> ) target_compile_definitions(tfm_spm PRIVATE $<$:PLATFORM_SVC_HANDLERS> $<$:TFM_CORE_DEBUG> $<$,$>:BOOT_DATA_AVAILABLE> $<$:CONFIG_TFM_HALT_ON_CORE_PANIC> $<$:TFM_NS_MANAGE_NSID> $<$:CONFIG_TFM_FLOAT_ABI=2> $<$:CONFIG_TFM_FLOAT_ABI=0> $<$:CONFIG_TFM_STACK_WATERMARKS> ) target_compile_options(tfm_spm PUBLIC ${COMPILER_CP_FLAG} ) # The veneers give warnings about not being properly declared so they get hidden # to not overshadow _real_ warnings. set_source_files_properties(tfm_secure_api.c PROPERTIES COMPILE_FLAGS $<$:-Wno-implicit-function-declaration> $<$:-Wno-implicit-function-declaration> $<$:> ) target_compile_definitions(tfm_config INTERFACE $<$,$>:CONFIG_TFM_CONNECTION_POOL_ENABLE> ) ############################ TFM arch ########################################## target_include_directories(tfm_arch INTERFACE $ ) ############################ Boot Status ####################################### target_include_directories(tfm_boot_status INTERFACE $ ) ############################# Secure veneers ################################### if(CONFIG_TFM_USE_TRUSTZONE) # If this is added to the spm, it is discarded as it is not used. Since the # spm is a static library it can't generate veneers under all compilers so # instead this single file is added to the tfm_s target. target_sources(tfm_s PRIVATE $<$:${CMAKE_CURRENT_SOURCE_DIR}/ns_client_ext/tfm_ns_client_ext.c> ) endif()