blob: 948df86f0ad999c6d5afd3a3a54ca134d968c598 [file] [log] [blame]
Anton Komlev4d4cc682023-09-05 16:33:53 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2023, Arm Limited. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7cmake_minimum_required(VERSION 3.15)
8
David Hub4c9f9f2023-10-14 15:38:03 +08009# CMake 3.21 and above requests projects to specify cpu/arch compile and link flags explicitly in
10# Armclang. Link: https://cmake.org/cmake/help/latest/policy/CMP0123.html
11# It is aligned with current Armclang toolchain implementation.
12# Explictly set this policy to NEW behavior to eliminate long warnings. It shall be set in root
13# CMakeLists.txt otherwise project() will throw out the warnings.
14if(POLICY CMP0123)
15 cmake_policy(SET CMP0123 NEW)
16endif()
17
David Hua1de7d62023-10-26 11:18:11 +080018list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake)
19include(toolchain_selection)
20
Anton Komlev4d4cc682023-09-05 16:33:53 +010021#--- SPE artifacts -------------------------------------------------------------
22
23if (NOT DEFINED CONFIG_SPE_PATH OR NOT EXISTS ${CONFIG_SPE_PATH})
24 message(FATAL_ERROR "CONFIG_SPE_PATH = ${CONFIG_SPE_PATH} is not defined or incorrect. Please provide full path to TF-M build artifacts using -DCONFIG_SPE_PATH=")
25endif()
26
27list(APPEND CMAKE_MODULE_PATH ${CONFIG_SPE_PATH}/cmake)
David Hu1ffdcfe2023-10-13 14:52:40 +080028
29# A platform sprecific MCPU and architecture flags for NS side
30include(${CONFIG_SPE_PATH}/platform/cpuarch.cmake)
David Hua1de7d62023-10-26 11:18:11 +080031# Configs exported by TF-M build
Anton Komlev4d4cc682023-09-05 16:33:53 +010032include(spe_config)
David Hu3a524952023-11-25 22:35:00 +080033# Include tests related config exported by TF-M SPE
34include(${CONFIG_SPE_PATH}/config/config_ns_test_psa_api.cmake)
35# Platform specific config if exists
David Hua1de7d62023-10-26 11:18:11 +080036include(${CONFIG_SPE_PATH}/platform/config.cmake OPTIONAL)
37# Include platform specific PSA Arch test preferences
38include(${CONFIG_SPE_PATH}/platform/tests/psa_arch_tests_config.cmake OPTIONAL)
Anton Komlev4d4cc682023-09-05 16:33:53 +010039
Kevin Peng40d7d9a2023-10-10 14:48:58 +080040#--- NSPE side project ---------------------------------------------------------
41
David Hua1de7d62023-10-26 11:18:11 +080042include(${TFM_TOOLCHAIN_FILE})
43project("TF-M PSA Arch tests" LANGUAGES C ASM)
44tfm_toolchain_reload_compiler()
45
Kevin Peng40d7d9a2023-10-10 14:48:58 +080046# Setup required configs: SUITE, CPU_ARCH and TARGET
Anton Komlev4d4cc682023-09-05 16:33:53 +010047set(SUITE ${TEST_PSA_API})
48
Kevin Peng40d7d9a2023-10-10 14:48:58 +080049if (NOT DEFINED CPU_ARCH)
50 if (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.main)
51 set(CPU_ARCH armv8m_ml)
52 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.base)
53 set(CPU_ARCH armv8m_bl)
54 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8.1-m.main)
55 set(CPU_ARCH armv81m_ml)
56 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv7-m)
57 set(CPU_ARCH armv7m)
58 endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010059endif()
60
Kevin Peng40d7d9a2023-10-10 14:48:58 +080061if (NOT DEFINED PSA_API_TEST_TARGET)
62 string(REGEX REPLACE ".*/" "" PSA_API_TEST_TARGET ${TFM_PLATFORM})
63endif()
64
65if(NOT SP_HEAP_MEM_SUPP)
66 set(SP_HEAP_MEM_SUPP 0)
67endif()
68
69if ("${TEST_PSA_API}" STREQUAL "IPC")
70 set(TARGET tgt_ff_tfm_${PSA_API_TEST_TARGET})
71else()
72 set(TARGET tgt_dev_apis_tfm_${PSA_API_TEST_TARGET})
73endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010074
Kevin Peng09db7af2023-10-30 11:32:29 +080075# Toolchain
76if (NOT TOOLCHAIN)
David Hua1de7d62023-10-26 11:18:11 +080077 if (${CMAKE_C_COMPILER_ID} STREQUAL GNU)
Kevin Peng09db7af2023-10-30 11:32:29 +080078 set(TOOLCHAIN GNUARM)
David Hua1de7d62023-10-26 11:18:11 +080079 elseif (${CMAKE_C_COMPILER_ID} STREQUAL ARMClang)
80 set(TOOLCHAIN ARMCLANG)
Kevin Peng09db7af2023-10-30 11:32:29 +080081 endif()
82endif()
83
David Hua1de7d62023-10-26 11:18:11 +080084# Check config in case additional configs are passed via command line
85include(${CMAKE_SOURCE_DIR}/spe/config/check_config.cmake)
Anton Komlev4d4cc682023-09-05 16:33:53 +010086
87add_executable(tfm_ns)
88
Kevin Peng40d7d9a2023-10-10 14:48:58 +080089add_subdirectory(../lib/ext ${CMAKE_BINARY_DIR}/lib/ext)
Anton Komlev4d4cc682023-09-05 16:33:53 +010090add_subdirectory(../app_broker ${CMAKE_BINARY_DIR}/app_broker)
91
92list(APPEND PSA_INCLUDE_PATHS ${CONFIG_SPE_PATH}/interface/include)
93
94if(NOT PSA_INCLUDE_PATHS)
95 set(PSA_INCLUDE_PATHS ${INTERFACE_INC_DIR}/
96 ${CMAKE_BINARY_DIR}/generated/api-tests/platform/manifests/
97 ${CMAKE_BINARY_DIR}/generated/interface/include
98 )
99endif()
100
101set(PLATFORM_PSA_ISOLATION_LEVEL ${TFM_ISOLATION_LEVEL})
102
David Hucce5c5f2023-11-03 16:29:13 +0800103# A workaround to co-work with local patch "Crypto: Add psa crypto config link for crypto tests".
104# Specify the PSA crypto config file to make sure PSA_WANT_KEY_TYPE_xxx_KEY_PAIR_BASIC are defined.
105add_library(psa_crypto_config INTERFACE)
106target_compile_definitions(psa_crypto_config
107 INTERFACE
108 MBEDTLS_PSA_CRYPTO_CONFIG_FILE="${TFM_MBEDCRYPTO_PSA_CRYPTO_CONFIG_PATH}"
109)
110
Anton Komlev4d4cc682023-09-05 16:33:53 +0100111add_subdirectory(${PSA_ARCH_TESTS_PATH}/api-tests ${CMAKE_BINARY_DIR}/api-tests)
112
113############################# TFM NS main app ##################################
114
115target_sources(tfm_ns
116 PRIVATE
117 test_app.c
Kevin Peng9dff9862023-10-09 11:06:08 +0800118 $<$<BOOL:${CONFIG_GNU_SYSCALL_STUB_ENABLED}>:../app_broker/syscalls_stub.c>
Anton Komlev4d4cc682023-09-05 16:33:53 +0100119)
120
121target_link_libraries(tfm_ns
122 PRIVATE
123 tfm_test_broker
124 val_nspe
125 pal_nspe
126 test_combine
127)
128
129set_target_properties(tfm_ns PROPERTIES
130 SUFFIX ".axf"
131 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
132)
133
David Hu1c1b8162023-10-14 22:31:01 +0800134target_add_scatter_file(tfm_ns ${CONFIG_SPE_PATH}/platform/linker_scripts)
135
136target_link_options(tfm_ns
137 PRIVATE
138 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hub4c9f9f2023-10-14 15:38:03 +0800139 $<$<C_COMPILER_ID:ARMClang>:--map>
David Huc758b1e2023-11-01 14:51:03 +0800140 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hu1c1b8162023-10-14 22:31:01 +0800141)
David Hue90feae2023-10-14 15:17:44 +0800142
143add_convert_to_bin_target(tfm_ns)