blob: 2dfb91f402d62d28d20152f33be04c1014b0be33 [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
Anton Komlev4d4cc682023-09-05 16:33:53 +010018#--- SPE artifacts -------------------------------------------------------------
19
20if (NOT DEFINED CONFIG_SPE_PATH OR NOT EXISTS ${CONFIG_SPE_PATH})
21 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=")
22endif()
23
24list(APPEND CMAKE_MODULE_PATH ${CONFIG_SPE_PATH}/cmake)
David Hu1ffdcfe2023-10-13 14:52:40 +080025
26# A platform sprecific MCPU and architecture flags for NS side
27include(${CONFIG_SPE_PATH}/platform/cpuarch.cmake)
28
Anton Komlev4d4cc682023-09-05 16:33:53 +010029include(spe_config)
30include(${CONFIG_SPE_PATH}/platform/config.cmake)
31
Kevin Peng40d7d9a2023-10-10 14:48:58 +080032#--- NSPE side project ---------------------------------------------------------
33
34# Setup required configs: SUITE, CPU_ARCH and TARGET
Anton Komlev4d4cc682023-09-05 16:33:53 +010035set(SUITE ${TEST_PSA_API})
36
Kevin Peng40d7d9a2023-10-10 14:48:58 +080037if (NOT DEFINED CPU_ARCH)
38 if (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.main)
39 set(CPU_ARCH armv8m_ml)
40 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8-m.base)
41 set(CPU_ARCH armv8m_bl)
42 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv8.1-m.main)
43 set(CPU_ARCH armv81m_ml)
44 elseif (${TFM_SYSTEM_ARCHITECTURE} STREQUAL armv7-m)
45 set(CPU_ARCH armv7m)
46 endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010047endif()
48
Kevin Peng40d7d9a2023-10-10 14:48:58 +080049if (NOT DEFINED PSA_API_TEST_TARGET)
50 string(REGEX REPLACE ".*/" "" PSA_API_TEST_TARGET ${TFM_PLATFORM})
51endif()
52
53if(NOT SP_HEAP_MEM_SUPP)
54 set(SP_HEAP_MEM_SUPP 0)
55endif()
56
57if ("${TEST_PSA_API}" STREQUAL "IPC")
58 set(TARGET tgt_ff_tfm_${PSA_API_TEST_TARGET})
59else()
60 set(TARGET tgt_dev_apis_tfm_${PSA_API_TEST_TARGET})
61endif()
Anton Komlev4d4cc682023-09-05 16:33:53 +010062
Kevin Peng09db7af2023-10-30 11:32:29 +080063# Toolchain
64if (NOT TOOLCHAIN)
65 if(TFM_TOOLCHAIN_FILE MATCHES ".*toolchain_ns_(.+).cmake")
66 set(TOOLCHAIN ${CMAKE_MATCH_1})
67 else()
68 # TFM_TOOLCHAIN_FILE might not set, use the default one.
69 set(TOOLCHAIN GNUARM)
70 endif()
71endif()
72
Anton Komlev4d4cc682023-09-05 16:33:53 +010073list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake)
David Hu7042a262023-10-14 23:47:29 +080074include(toolchain_selection)
Anton Komlev4d4cc682023-09-05 16:33:53 +010075
David Hue90feae2023-10-14 15:17:44 +080076include(${TFM_TOOLCHAIN_FILE})
David Hu4d3f4f62023-10-18 11:56:32 +080077project("TF-M PSA Arch tests" LANGUAGES C ASM)
David Hue90feae2023-10-14 15:17:44 +080078tfm_toolchain_reload_compiler()
Anton Komlev4d4cc682023-09-05 16:33:53 +010079
80add_executable(tfm_ns)
81
Kevin Peng40d7d9a2023-10-10 14:48:58 +080082add_subdirectory(../lib/ext ${CMAKE_BINARY_DIR}/lib/ext)
Anton Komlev4d4cc682023-09-05 16:33:53 +010083add_subdirectory(../app_broker ${CMAKE_BINARY_DIR}/app_broker)
84
85list(APPEND PSA_INCLUDE_PATHS ${CONFIG_SPE_PATH}/interface/include)
86
87if(NOT PSA_INCLUDE_PATHS)
88 set(PSA_INCLUDE_PATHS ${INTERFACE_INC_DIR}/
89 ${CMAKE_BINARY_DIR}/generated/api-tests/platform/manifests/
90 ${CMAKE_BINARY_DIR}/generated/interface/include
91 )
92endif()
93
94set(PLATFORM_PSA_ISOLATION_LEVEL ${TFM_ISOLATION_LEVEL})
95
96add_subdirectory(${PSA_ARCH_TESTS_PATH}/api-tests ${CMAKE_BINARY_DIR}/api-tests)
97
98############################# TFM NS main app ##################################
99
100target_sources(tfm_ns
101 PRIVATE
102 test_app.c
103)
104
105target_link_libraries(tfm_ns
106 PRIVATE
107 tfm_test_broker
108 val_nspe
109 pal_nspe
110 test_combine
111)
112
113set_target_properties(tfm_ns PROPERTIES
114 SUFFIX ".axf"
115 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
116)
117
David Hu1c1b8162023-10-14 22:31:01 +0800118target_add_scatter_file(tfm_ns ${CONFIG_SPE_PATH}/platform/linker_scripts)
119
120target_link_options(tfm_ns
121 PRIVATE
122 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hub4c9f9f2023-10-14 15:38:03 +0800123 $<$<C_COMPILER_ID:ARMClang>:--map>
David Hu1c1b8162023-10-14 22:31:01 +0800124)
David Hue90feae2023-10-14 15:17:44 +0800125
126add_convert_to_bin_target(tfm_ns)