# Copyright 2021-2023 Arm Limited and/or its affiliates # # SPDX-License-Identifier: MIT # Files generated by TF-M build must be listed as BUILD_BYPRODUCTS # to inform CMake that they don't exist before build starts. Include # paths do not need to be listed. # is a placeholder keyword in ExternalProject_Add. set(tfm_ns_interface_generated /install/interface/src/tfm_psa_ns_api.c /install/interface/src/tfm_ps_api.c /install/interface/src/tfm_its_api.c /install/interface/src/tfm_crypto_api.c /install/interface/src/tfm_attest_api.c /install/interface/src/tfm_platform_api.c /install/interface/src/os_wrapper/tfm_ns_interface_rtos.c ) if(TFM_PSA_FIRMWARE_UPDATE) list(APPEND tfm_ns_interface_generated /install/interface/src/tfm_fwu_api.c) endif() set(s_veneers_generated /install/interface/lib/s_veneers.o ) include(ExternalProject) # TF-M can be built with a different toolchain, but the toolchain that # builds the IoT SDK is guaranteed to be available in the environment. if(CMAKE_C_COMPILER_ID STREQUAL "GNU") set(tfm_toolchain_file "toolchain_GNUARM.cmake") elseif(CMAKE_C_COMPILER_ID STREQUAL "ARMClang") set(tfm_toolchain_file "toolchain_ARMCLANG.cmake") else() message(FATAL_ERROR "Unsupported compiler: ${CMAKE_C_COMPILER_ID}") endif() ExternalProject_Add( tf-m-build # Use code fetched by FetchContent DOWNLOAD_COMMAND "" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/trusted-firmware-m USES_TERMINAL_CONFIGURE ON USES_TERMINAL_BUILD ON BUILD_ALWAYS ON CMAKE_ARGS -D TFM_TOOLCHAIN_FILE=/${tfm_toolchain_file} -D TFM_PLATFORM=${TFM_PLATFORM} -D TFM_PARTITION_FIRMWARE_UPDATE=${TFM_PSA_FIRMWARE_UPDATE} -D PLATFORM_HAS_FIRMWARE_UPDATE_SUPPORT=${TFM_PSA_FIRMWARE_UPDATE} -D MCUBOOT_UPGRADE_STRATEGY=${TFM_PLATFORM_UPGRADE_STRATEGY} -D MCUBOOT_CONFIRM_IMAGE=${TFM_PLATFORM_CONFIRM_IMAGE} -D MCUBOOT_DATA_SHARING=${TFM_PSA_FIRMWARE_UPDATE} -D MCUBOOT_IMAGE_VERSION_NS=${MCUBOOT_IMAGE_VERSION_NS} -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ${TFM_CMAKE_ARGS} PATCH_COMMAND ${TFM_PATCH_COMMAND} BUILD_BYPRODUCTS ${tfm_ns_interface_generated} ${s_veneers_generated} ) # The path ${BINARY_DIR} is available after ExternalProject_Add. # Convert to allow projects to use those files. ExternalProject_Get_Property(tf-m-build BINARY_DIR) list(TRANSFORM tfm_ns_interface_generated REPLACE "" "${BINARY_DIR}") list(TRANSFORM s_veneers_generated REPLACE "" "${BINARY_DIR}")