blob: d3909b44965b1538a1f2ba13c3a5dc837f23428a [file] [log] [blame]
Anton Komlev4d4cc682023-09-05 16:33:53 +01001#-------------------------------------------------------------------------------
Dávid Házi33571192024-10-10 13:05:28 +00002# Copyright (c) 2023-2024, Arm Limited. All rights reserved.
Anton Komlev4d4cc682023-09-05 16:33:53 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
David Hu4c3c0ca2023-12-02 22:09:18 +08007cmake_minimum_required(VERSION 3.21)
Anton Komlev4d4cc682023-09-05 16:33:53 +01008
David Hua1de7d62023-10-26 11:18:11 +08009list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake)
10include(toolchain_selection)
11
Anton Komlev4d4cc682023-09-05 16:33:53 +010012#--- SPE artifacts -------------------------------------------------------------
13
14if (NOT DEFINED CONFIG_SPE_PATH OR NOT EXISTS ${CONFIG_SPE_PATH})
15 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=")
16endif()
17
18list(APPEND CMAKE_MODULE_PATH ${CONFIG_SPE_PATH}/cmake)
David Hu1ffdcfe2023-10-13 14:52:40 +080019
20# A platform sprecific MCPU and architecture flags for NS side
21include(${CONFIG_SPE_PATH}/platform/cpuarch.cmake)
David Hua1de7d62023-10-26 11:18:11 +080022# Configs exported by TF-M build
Anton Komlev4d4cc682023-09-05 16:33:53 +010023include(spe_config)
David Hu3a524952023-11-25 22:35:00 +080024# Include tests related config exported by TF-M SPE
25include(${CONFIG_SPE_PATH}/config/config_ns_test_psa_api.cmake)
26# Platform specific config if exists
David Hua1de7d62023-10-26 11:18:11 +080027include(${CONFIG_SPE_PATH}/platform/config.cmake OPTIONAL)
28# Include platform specific PSA Arch test preferences
29include(${CONFIG_SPE_PATH}/platform/tests/psa_arch_tests_config.cmake OPTIONAL)
Anton Komlev4d4cc682023-09-05 16:33:53 +010030
Kevin Peng40d7d9a2023-10-10 14:48:58 +080031#--- NSPE side project ---------------------------------------------------------
32
David Hua1de7d62023-10-26 11:18:11 +080033include(${TFM_TOOLCHAIN_FILE})
34project("TF-M PSA Arch tests" LANGUAGES C ASM)
David Hua1de7d62023-10-26 11:18:11 +080035
Kevin Peng40d7d9a2023-10-10 14:48:58 +080036# Setup required configs: SUITE, CPU_ARCH and TARGET
Anton Komlev4d4cc682023-09-05 16:33:53 +010037set(SUITE ${TEST_PSA_API})
38
Kevin Peng40d7d9a2023-10-10 14:48:58 +080039if (NOT DEFINED CPU_ARCH)
40 if (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.main)
41 set(CPU_ARCH armv8m_ml)
42 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.base)
43 set(CPU_ARCH armv8m_bl)
44 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8.1-m.main)
45 set(CPU_ARCH armv81m_ml)
46 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv7-m)
47 set(CPU_ARCH armv7m)
48 endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010049endif()
50
Kevin Peng40d7d9a2023-10-10 14:48:58 +080051if (NOT DEFINED PSA_API_TEST_TARGET)
52 string(REGEX REPLACE ".*/" "" PSA_API_TEST_TARGET ${TFM_PLATFORM})
53endif()
54
55if(NOT SP_HEAP_MEM_SUPP)
56 set(SP_HEAP_MEM_SUPP 0)
57endif()
58
59if ("${TEST_PSA_API}" STREQUAL "IPC")
60 set(TARGET tgt_ff_tfm_${PSA_API_TEST_TARGET})
61else()
62 set(TARGET tgt_dev_apis_tfm_${PSA_API_TEST_TARGET})
63endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010064
Kevin Peng09db7af2023-10-30 11:32:29 +080065# Toolchain
66if (NOT TOOLCHAIN)
David Hua1de7d62023-10-26 11:18:11 +080067 if (${CMAKE_C_COMPILER_ID} STREQUAL GNU)
Kevin Peng09db7af2023-10-30 11:32:29 +080068 set(TOOLCHAIN GNUARM)
David Hua1de7d62023-10-26 11:18:11 +080069 elseif (${CMAKE_C_COMPILER_ID} STREQUAL ARMClang)
70 set(TOOLCHAIN ARMCLANG)
Kevin Peng09db7af2023-10-30 11:32:29 +080071 endif()
72endif()
73
David Hua1de7d62023-10-26 11:18:11 +080074# Check config in case additional configs are passed via command line
75include(${CMAKE_SOURCE_DIR}/spe/config/check_config.cmake)
Anton Komlev4d4cc682023-09-05 16:33:53 +010076
77add_executable(tfm_ns)
78
Kevin Peng40d7d9a2023-10-10 14:48:58 +080079add_subdirectory(../lib/ext ${CMAKE_BINARY_DIR}/lib/ext)
Anton Komlev4d4cc682023-09-05 16:33:53 +010080add_subdirectory(../app_broker ${CMAKE_BINARY_DIR}/app_broker)
81
82list(APPEND PSA_INCLUDE_PATHS ${CONFIG_SPE_PATH}/interface/include)
83
84if(NOT PSA_INCLUDE_PATHS)
85 set(PSA_INCLUDE_PATHS ${INTERFACE_INC_DIR}/
86 ${CMAKE_BINARY_DIR}/generated/api-tests/platform/manifests/
87 ${CMAKE_BINARY_DIR}/generated/interface/include
88 )
89endif()
90
91set(PLATFORM_PSA_ISOLATION_LEVEL ${TFM_ISOLATION_LEVEL})
92
93add_subdirectory(${PSA_ARCH_TESTS_PATH}/api-tests ${CMAKE_BINARY_DIR}/api-tests)
94
Maulik Patel6f3bb5d2024-04-11 16:03:18 +010095if((${TEST_PSA_API} STREQUAL "CRYPTO") OR (${TEST_PSA_API} STREQUAL "INITIAL_ATTESTATION"))
Antonio de Angelisdf0ca092024-02-01 11:06:54 +000096 # psa_crypto_config needs to have visibility of the platform includes
97 target_link_libraries(psa_crypto_config INTERFACE platform_ns)
Maulik Patel6f3bb5d2024-04-11 16:03:18 +010098 # val_nspe/pal_nspe/test_combine targets are calling PSA Crypto APIs so they need
Antonio de Angelisdf0ca092024-02-01 11:06:54 +000099 # to include the psa_crypto_config which exports the config file defs
100 target_link_libraries(val_nspe PUBLIC psa_crypto_config)
101 target_link_libraries(pal_nspe PUBLIC psa_crypto_config)
Maulik Patel6f3bb5d2024-04-11 16:03:18 +0100102 target_link_libraries(test_combine PUBLIC psa_crypto_config)
Antonio de Angelisdf0ca092024-02-01 11:06:54 +0000103endif()
104
Anton Komlev4d4cc682023-09-05 16:33:53 +0100105############################# TFM NS main app ##################################
106
107target_sources(tfm_ns
108 PRIVATE
109 test_app.c
Kevin Peng9dff9862023-10-09 11:06:08 +0800110 $<$<BOOL:${CONFIG_GNU_SYSCALL_STUB_ENABLED}>:../app_broker/syscalls_stub.c>
Anton Komlev4d4cc682023-09-05 16:33:53 +0100111)
112
113target_link_libraries(tfm_ns
114 PRIVATE
Jamie Fox6d4ee162023-11-27 17:27:37 +0000115 os_wrapper
Anton Komlev4d4cc682023-09-05 16:33:53 +0100116 tfm_test_broker
117 val_nspe
118 pal_nspe
119 test_combine
120)
121
122set_target_properties(tfm_ns PROPERTIES
123 SUFFIX ".axf"
124 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
125)
126
David Hu1c1b8162023-10-14 22:31:01 +0800127target_add_scatter_file(tfm_ns ${CONFIG_SPE_PATH}/platform/linker_scripts)
128
129target_link_options(tfm_ns
130 PRIVATE
131 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hub4c9f9f2023-10-14 15:38:03 +0800132 $<$<C_COMPILER_ID:ARMClang>:--map>
David Huc758b1e2023-11-01 14:51:03 +0800133 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hu1c1b8162023-10-14 22:31:01 +0800134)
David Hue90feae2023-10-14 15:17:44 +0800135
136add_convert_to_bin_target(tfm_ns)