| #------------------------------------------------------------------------------- |
| # Copyright (c) 2017-2020, Arm Limited. All rights reserved. |
| # |
| # SPDX-License-Identifier: BSD-3-Clause |
| # |
| #------------------------------------------------------------------------------- |
| |
| cmake_minimum_required(VERSION 3.7) |
| |
| if (NOT DEFINED TFM_ROOT_DIR) |
| set(TFM_ROOT_DIR ${CMAKE_SOURCE_DIR}) |
| endif() |
| |
| #Tell cmake where our modules can be found |
| list(APPEND CMAKE_MODULE_PATH ${TFM_ROOT_DIR}/cmake) |
| |
| #Include common stuff to control cmake. |
| include("Common/BuildSys") |
| |
| #Start an embedded project. |
| embedded_project_start(CONFIG "${TFM_ROOT_DIR}/configs/ConfigDefault.cmake") |
| project(tfm_tests LANGUAGES ASM C) |
| embedded_project_fixup() |
| |
| #Check incoming configuration options |
| if (NOT DEFINED SERVICES_TEST_ENABLED) |
| message(FATAL_ERROR "Incomplete build configuration: SERVICES_TEST_ENABLED is undefined. ") |
| endif() |
| |
| if (NOT DEFINED CORE_TEST_INTERACTIVE) |
| message(FATAL_ERROR "Incomplete build configuration: CORE_TEST_INTERACTIVE is undefined. ") |
| endif() |
| |
| if (NOT DEFINED CORE_TEST_POSITIVE) |
| message(FATAL_ERROR "Incomplete build configuration: CORE_TEST_POSITIVE is undefined. ") |
| endif() |
| |
| if (NOT DEFINED TFM_LVL) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_LVL is undefined. ") |
| endif() |
| |
| if (NOT DEFINED TFM_PARTITION_AUDIT_LOG) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_PARTITION_AUDIT_LOG is undefined.") |
| endif() |
| |
| if (NOT DEFINED TFM_PARTITION_PROTECTED_STORAGE) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_PARTITION_PROTECTED_STORAGE is undefined.") |
| endif() |
| |
| if (NOT DEFINED TFM_PARTITION_INTERNAL_TRUSTED_STORAGE) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_PARTITION_INTERNAL_TRUSTED_STORAGE is undefined.") |
| endif() |
| |
| if (NOT DEFINED TFM_PARTITION_CRYPTO) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_PARTITION_CRYPTO is undefined.") |
| endif() |
| |
| if (NOT DEFINED TFM_PARTITION_INITIAL_ATTESTATION) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_PARTITION_INITIAL_ATTESTATION is undefined.") |
| endif() |
| |
| if (NOT DEFINED TFM_ENABLE_IRQ_TEST) |
| message(FATAL_ERROR "Incomplete build configuration: TFM_ENABLE_IRQ_TEST is undefined.") |
| endif() |
| |
| #Configure our options as needed. |
| if (CORE_TEST_INTERACTIVE OR CORE_TEST_POSITIVE) |
| set(ENABLE_CORE_TESTS True) |
| set(ENABLE_CORE_TESTS_2 True) |
| else() |
| set(ENABLE_CORE_TESTS False) |
| set(ENABLE_CORE_TESTS_2 False) |
| endif() |
| |
| if (TFM_ENABLE_IRQ_TEST) |
| set(ENABLE_IRQ_TEST_SERVICES ON) |
| else() |
| set(ENABLE_IRQ_TEST_SERVICES OFF) |
| endif() |
| |
| if (ENABLE_CORE_TESTS) |
| # If the platform doesn't specify whether the peripheral test is enabled |
| # or not, select it by default. |
| if (NOT DEFINED TFM_ENABLE_PERIPH_ACCESS_TEST) |
| set(TFM_ENABLE_PERIPH_ACCESS_TEST TRUE) |
| endif() |
| |
| if (TFM_ENABLE_PERIPH_ACCESS_TEST) |
| add_definitions(-DTFM_ENABLE_PERIPH_ACCESS_TEST) |
| endif() |
| else() |
| set(TFM_ENABLE_PERIPH_ACCESS_TEST FALSE) |
| endif() |
| |
| include(${CMAKE_CURRENT_LIST_DIR}/TestConfig.cmake) |
| include(${CMAKE_CURRENT_LIST_DIR}/CMakeLists.inc) |
| |
| if (ENABLE_PROTECTED_STORAGE_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_PROTECTED_STORAGE_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_PROTECTED_STORAGE_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_INTERNAL_TRUSTED_STORAGE_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_INTERNAL_TRUSTED_STORAGE_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_INTERNAL_TRUSTED_STORAGE_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_CRYPTO_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_CRYPTO_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_CRYPTO_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_ATTESTATION_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_ATTESTATION_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_ATTESTATION_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_PLATFORM_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_PLATFORM_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_PLATFORM_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_QCBOR_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_QCBOR_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_QCBOR_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_T_COSE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_T_COSE_TESTS APPEND) |
| endif() |
| |
| if (ENABLE_AUDIT_LOGGING_SERVICE_TESTS) |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES ENABLE_AUDIT_LOGGING_SERVICE_TESTS APPEND) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ENABLE_AUDIT_LOGGING_SERVICE_TESTS APPEND) |
| endif() |
| |
| if (TFM_MULTI_CORE_TEST) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES TFM_MULTI_CORE_TEST APPEND) |
| endif() |
| |
| if (NOT DEFINED TFM_BUILD_IN_SPE) |
| message(FATAL_ERROR "TFM_BUILD_IN_SPE is not set. Cannot specify current building status") |
| endif() |
| |
| if (NOT TARGET tfm_t_cose_verify AND (ENABLE_ATTESTATION_SERVICE_TESTS OR ENABLE_T_COSE_TESTS)) |
| add_subdirectory(${TFM_ROOT_DIR}/lib/ext/t_cose ${CMAKE_CURRENT_BINARY_DIR}/t_cose) |
| endif() |
| |
| if ((NOT TARGET tfm_qcbor_encode OR NOT TARGET tfm_qcbor_decode) AND (ENABLE_ATTESTATION_SERVICE_TESTS OR ENABLE_QCBOR_TESTS OR ENABLE_T_COSE_TESTS)) |
| add_subdirectory(${TFM_ROOT_DIR}/lib/ext/qcbor ${CMAKE_CURRENT_BINARY_DIR}/qcbor) |
| endif() |
| |
| set(TEST_SRC "${CMAKE_CURRENT_LIST_DIR}/../log/tfm_log_raw.c") |
| if (TFM_BUILD_IN_SPE) |
| #Build the secure library. Even though secure tests files depend on |
| #tfm_qcbor, this is not expressed here as the tfm_attest library is expected |
| #to hold the compiled tfm_qcbor files. |
| add_library(tfm_secure_tests STATIC ${ALL_SRC_C} ${ALL_SRC_C_S} ${TEST_SRC}) |
| if (ENABLE_ATTESTATION_SERVICE_TESTS) |
| target_sources(tfm_secure_tests PRIVATE $<TARGET_OBJECTS:tfm_t_cose_verify> $<TARGET_OBJECTS:tfm_qcbor_decode>) |
| endif() |
| |
| #Set common compiler and linker flags |
| if (DEFINED CMSE_FLAGS) |
| embedded_set_target_compile_flags(TARGET tfm_secure_tests LANGUAGE C APPEND FLAGS ${CMSE_FLAGS}) |
| endif() |
| config_setting_shared_compiler_flags(tfm_secure_tests) |
| config_setting_shared_linker_flags(tfm_secure_tests) |
| |
| embedded_set_target_compile_defines(TARGET tfm_secure_tests LANGUAGE C DEFINES __thumb2__ TFM_LVL=${TFM_LVL} APPEND) |
| |
| if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
| set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE |
| PATH "Default install location for tfm_storage." |
| FORCE) |
| endif() |
| |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/framework/test_framework_integ_test.h |
| ${CMAKE_CURRENT_SOURCE_DIR}/test_services/tfm_secure_client_service/tfm_secure_client_service_api.h |
| DESTINATION export/tfm/test/inc) |
| |
| embedded_project_end(tfm_secure_tests) |
| else () |
| #Build the non-secure library |
| set(CMAKE_STATIC_LIBRARY_PREFIX_C "lib") |
| add_library(tfm_non_secure_tests STATIC ${ALL_SRC_C} ${ALL_SRC_C_NS} ${TEST_SRC}) |
| |
| embedded_target_include_directories(TARGET tfm_non_secure_tests PATH ${CMSIS_DIR}/RTOS2/Include ABSOLUTE APPEND) |
| |
| if (ENABLE_ATTESTATION_SERVICE_TESTS OR ENABLE_T_COSE_TESTS) |
| target_sources(tfm_non_secure_tests PRIVATE $<TARGET_OBJECTS:tfm_t_cose_verify> PRIVATE $<TARGET_OBJECTS:tfm_t_cose_sign>) |
| endif() |
| if (ENABLE_ATTESTATION_SERVICE_TESTS OR ENABLE_QCBOR_TESTS OR ENABLE_T_COSE_TESTS) |
| target_sources(tfm_non_secure_tests PRIVATE $<TARGET_OBJECTS:tfm_qcbor_decode> PRIVATE $<TARGET_OBJECTS:tfm_qcbor_encode>) |
| endif() |
| |
| #Set common compiler and linker flags |
| config_setting_shared_compiler_flags(tfm_non_secure_tests) |
| config_setting_shared_linker_flags(tfm_non_secure_tests) |
| |
| #Set macro definitions |
| set(TARGET_COMPILE_DEFINITIONS __thumb2__ __DOMAIN_NS=1 DOMAIN_NS=__DOMAIN_NS TFM_LVL=${TFM_LVL}) |
| embedded_set_target_compile_defines(TARGET tfm_non_secure_tests LANGUAGE C DEFINES ${TARGET_COMPILE_DEFINITIONS} APPEND) |
| |
| if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
| set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE |
| PATH "Default install location for tfm_storage." |
| FORCE) |
| endif() |
| |
| install(TARGETS tfm_non_secure_tests |
| DESTINATION export/tfm/test/lib |
| PUBLIC_HEADER DESTINATION export/tfm/test/inc) |
| |
| if(ENABLE_PROTECTED_STORAGE_SERVICE_TESTS) |
| #only PS tests are using semaphore and thread APIs |
| install(FILES ${TFM_ROOT_DIR}/interface/include/os_wrapper/semaphore.h |
| ${TFM_ROOT_DIR}/interface/include/os_wrapper/thread.h |
| DESTINATION export/tfm/include/os_wrapper) |
| endif() |
| |
| embedded_project_end(tfm_non_secure_tests) |
| endif() |