blob: c1f1cde9268c73c2fd660f86eeecdfe6084b86d2 [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 Hua1de7d62023-10-26 11:18:11 +080033include(${CONFIG_SPE_PATH}/platform/config.cmake OPTIONAL)
34# Include platform specific PSA Arch test preferences
35include(${CONFIG_SPE_PATH}/platform/tests/psa_arch_tests_config.cmake OPTIONAL)
Anton Komlev4d4cc682023-09-05 16:33:53 +010036
Kevin Peng40d7d9a2023-10-10 14:48:58 +080037#--- NSPE side project ---------------------------------------------------------
38
David Hua1de7d62023-10-26 11:18:11 +080039include(${TFM_TOOLCHAIN_FILE})
40project("TF-M PSA Arch tests" LANGUAGES C ASM)
41tfm_toolchain_reload_compiler()
42
Kevin Peng40d7d9a2023-10-10 14:48:58 +080043# Setup required configs: SUITE, CPU_ARCH and TARGET
Anton Komlev4d4cc682023-09-05 16:33:53 +010044set(SUITE ${TEST_PSA_API})
45
Kevin Peng40d7d9a2023-10-10 14:48:58 +080046if (NOT DEFINED CPU_ARCH)
47 if (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.main)
48 set(CPU_ARCH armv8m_ml)
49 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.base)
50 set(CPU_ARCH armv8m_bl)
51 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8.1-m.main)
52 set(CPU_ARCH armv81m_ml)
53 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv7-m)
54 set(CPU_ARCH armv7m)
55 endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010056endif()
57
Kevin Peng40d7d9a2023-10-10 14:48:58 +080058if (NOT DEFINED PSA_API_TEST_TARGET)
59 string(REGEX REPLACE ".*/" "" PSA_API_TEST_TARGET ${TFM_PLATFORM})
60endif()
61
62if(NOT SP_HEAP_MEM_SUPP)
63 set(SP_HEAP_MEM_SUPP 0)
64endif()
65
66if ("${TEST_PSA_API}" STREQUAL "IPC")
67 set(TARGET tgt_ff_tfm_${PSA_API_TEST_TARGET})
68else()
69 set(TARGET tgt_dev_apis_tfm_${PSA_API_TEST_TARGET})
70endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010071
Kevin Peng09db7af2023-10-30 11:32:29 +080072# Toolchain
73if (NOT TOOLCHAIN)
David Hua1de7d62023-10-26 11:18:11 +080074 if (${CMAKE_C_COMPILER_ID} STREQUAL GNU)
Kevin Peng09db7af2023-10-30 11:32:29 +080075 set(TOOLCHAIN GNUARM)
David Hua1de7d62023-10-26 11:18:11 +080076 elseif (${CMAKE_C_COMPILER_ID} STREQUAL ARMClang)
77 set(TOOLCHAIN ARMCLANG)
Kevin Peng09db7af2023-10-30 11:32:29 +080078 endif()
79endif()
80
David Hua1de7d62023-10-26 11:18:11 +080081# Check config in case additional configs are passed via command line
82include(${CMAKE_SOURCE_DIR}/spe/config/check_config.cmake)
Anton Komlev4d4cc682023-09-05 16:33:53 +010083
84add_executable(tfm_ns)
85
Kevin Peng40d7d9a2023-10-10 14:48:58 +080086add_subdirectory(../lib/ext ${CMAKE_BINARY_DIR}/lib/ext)
Anton Komlev4d4cc682023-09-05 16:33:53 +010087add_subdirectory(../app_broker ${CMAKE_BINARY_DIR}/app_broker)
88
89list(APPEND PSA_INCLUDE_PATHS ${CONFIG_SPE_PATH}/interface/include)
90
91if(NOT PSA_INCLUDE_PATHS)
92 set(PSA_INCLUDE_PATHS ${INTERFACE_INC_DIR}/
93 ${CMAKE_BINARY_DIR}/generated/api-tests/platform/manifests/
94 ${CMAKE_BINARY_DIR}/generated/interface/include
95 )
96endif()
97
98set(PLATFORM_PSA_ISOLATION_LEVEL ${TFM_ISOLATION_LEVEL})
99
100add_subdirectory(${PSA_ARCH_TESTS_PATH}/api-tests ${CMAKE_BINARY_DIR}/api-tests)
101
102############################# TFM NS main app ##################################
103
104target_sources(tfm_ns
105 PRIVATE
106 test_app.c
Kevin Peng9dff9862023-10-09 11:06:08 +0800107 $<$<BOOL:${CONFIG_GNU_SYSCALL_STUB_ENABLED}>:../app_broker/syscalls_stub.c>
Anton Komlev4d4cc682023-09-05 16:33:53 +0100108)
109
110target_link_libraries(tfm_ns
111 PRIVATE
112 tfm_test_broker
113 val_nspe
114 pal_nspe
115 test_combine
116)
117
118set_target_properties(tfm_ns PROPERTIES
119 SUFFIX ".axf"
120 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
121)
122
David Hu1c1b8162023-10-14 22:31:01 +0800123target_add_scatter_file(tfm_ns ${CONFIG_SPE_PATH}/platform/linker_scripts)
124
125target_link_options(tfm_ns
126 PRIVATE
127 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hub4c9f9f2023-10-14 15:38:03 +0800128 $<$<C_COMPILER_ID:ARMClang>:--map>
David Huc758b1e2023-11-01 14:51:03 +0800129 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hu1c1b8162023-10-14 22:31:01 +0800130)
David Hue90feae2023-10-14 15:17:44 +0800131
132add_convert_to_bin_target(tfm_ns)