blob: 619cea94f5bb1f52fc937fad6ae332f7aadbaf15 [file] [log] [blame]
Anton Komlev84283b02023-08-16 10:57:56 +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 Komlev84283b02023-08-16 10:57:56 +010018if (NOT DEFINED CONFIG_SPE_PATH OR NOT EXISTS ${CONFIG_SPE_PATH})
19 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=")
20endif()
21
David Hu7042a262023-10-14 23:47:29 +080022list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake)
23list(APPEND CMAKE_MODULE_PATH ${CONFIG_SPE_PATH}/cmake)
David Hu479ef002023-10-20 14:44:32 +080024list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/utils)
David Hu7042a262023-10-14 23:47:29 +080025include(remote_library)
26include(toolchain_selection)
Jianliang Shene8525112023-10-20 17:18:43 +080027include(utils)
Anton Komlev84283b02023-08-16 10:57:56 +010028
David Hu1ffdcfe2023-10-13 14:52:40 +080029# 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# Include common configs exported from TF-M
32include(${CONFIG_SPE_PATH}/cmake/spe_config.cmake)
Kevin Peng21613562023-09-04 14:39:28 +080033# Platform abilities for example IRQ test support status
34include(${CONFIG_SPE_PATH}/platform/config.cmake OPTIONAL)
Jianliang Shene8525112023-10-20 17:18:43 +080035
David Huea7f7ac2023-11-07 19:17:21 +080036# Check current tf-m-tests is compatible to TF-M under verfication
37include(check_version)
38
Jianliang Shene8525112023-10-20 17:18:43 +080039include(${TFM_TOOLCHAIN_FILE})
40project(tfm_ns LANGUAGES C ASM)
41tfm_toolchain_reload_compiler()
42
David Hua1de7d62023-10-26 11:18:11 +080043# If config_ns_test.cmake is exported from TF-M build, it indicates regression tests are enabled.
44# Otherwise, skip test configuration
Kevin Peng10a62012023-11-01 15:18:54 +080045include(${CONFIG_SPE_PATH}/config/config_ns_test.cmake OPTIONAL)
David Hua1de7d62023-10-26 11:18:11 +080046if(TFM_NS_REG_TEST)
47 # Include platform specific regression tests config
48 include(${CONFIG_SPE_PATH}/platform/tests/tfm_tests_config.cmake OPTIONAL)
49 if (TFM_PROFILE)
50 include(${CMAKE_CURRENT_LIST_DIR}/test/config/profile/${TFM_PROFILE}_test.cmake)
51 endif()
52 # Default test configurations
53 include(${CMAKE_CURRENT_LIST_DIR}/test/config/default_test_config.cmake)
54 # Config check in case additional test configs passed in via command line.
55 include(${CMAKE_CURRENT_LIST_DIR}/test/config/check_config.cmake)
Kevin Peng4216aa02023-10-27 17:04:42 +080056endif()
Jianliang Shene8525112023-10-20 17:18:43 +080057# Include coprocessor check to make sure NS toolchain is compatiable
58include(${CONFIG_SPE_PATH}/config/cp_check.cmake)
Anton Komlev84283b02023-08-16 10:57:56 +010059
60add_executable(tfm_ns)
61
David Hu87b46a82023-10-21 23:23:42 +080062add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../lib/ext ${CMAKE_BINARY_DIR}/lib/ext)
Anton Komlevc0ad6042023-08-29 18:23:26 +010063add_subdirectory(../app_broker ${CMAKE_BINARY_DIR}/app_broker)
David Hu479ef002023-10-20 14:44:32 +080064if(TFM_NS_REG_TEST)
65 add_subdirectory(test/ns_regression)
66endif()
Anton Komlev84283b02023-08-16 10:57:56 +010067
68############################# TFM NS main app ##################################
69
70target_sources(tfm_ns
71 PRIVATE
72 test_app.c
Kevin Peng9dff9862023-10-09 11:06:08 +080073 $<$<BOOL:${CONFIG_GNU_SYSCALL_STUB_ENABLED}>:../app_broker/syscalls_stub.c>
Anton Komlev84283b02023-08-16 10:57:56 +010074)
75
76target_link_libraries(tfm_ns
77 PRIVATE
Jamie Fox6d4ee162023-11-27 17:27:37 +000078 os_wrapper
Anton Komlev84283b02023-08-16 10:57:56 +010079 tfm_test_broker
David Hu479ef002023-10-20 14:44:32 +080080 $<$<BOOL:${TFM_NS_REG_TEST}>:tfm_ns_tests>
81)
82
83target_compile_definitions(tfm_ns
84 PUBLIC
85 $<$<BOOL:${TFM_NS_REG_TEST}>:TFM_NS_REG_TEST>
Anton Komlev84283b02023-08-16 10:57:56 +010086)
87
88set_target_properties(tfm_ns PROPERTIES
89 SUFFIX ".axf"
90 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
91)
David Hu1c1b8162023-10-14 22:31:01 +080092
93target_add_scatter_file(tfm_ns ${CONFIG_SPE_PATH}/platform/linker_scripts)
94
95target_link_options(tfm_ns
96 PRIVATE
97 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hub4c9f9f2023-10-14 15:38:03 +080098 $<$<C_COMPILER_ID:ARMClang>:--map>
David Huc758b1e2023-11-01 14:51:03 +080099 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
David Hu1c1b8162023-10-14 22:31:01 +0800100)
David Hue90feae2023-10-14 15:17:44 +0800101
102add_convert_to_bin_target(tfm_ns)