blob: b5bd5ecfa126d21ba9a0242bee7256b5a3069d8a [file] [log] [blame]
Anton Komlevc0ad6042023-08-29 18:23:26 +01001#-------------------------------------------------------------------------------
2# Copyright (c) 2023, Arm Limited. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7#
8# This CMake script used in a split build only. In the legacy 'sinlge' build
9# this file is ignoed. Please don't be confused.
10#
11cmake_minimum_required(VERSION 3.15)
12
13# This is important to add this SPE subdirectory at first as it
14# brings configuration from TF-M build
15add_subdirectory(${CONFIG_SPE_PATH} ${CMAKE_BINARY_DIR}/spe)
16
David Hu87b46a82023-10-21 23:23:42 +080017####################### NS application libraries #######################
Anton Komlevc0ad6042023-08-29 18:23:26 +010018
David Hu87b46a82023-10-21 23:23:42 +080019# Build all the NS application libraries here under app_broker
20# Those NS libraries depend on each other. It is more convenient to sort out the dependencies here.
21#
22# Those NS libraries also link to libraries exported from TF-M secure build. Specify all the
23# dependencies on TF-M exported libraries here, rather than under each NS library folder.
24# Therefore, NS library can be shared and re-used in other downstream projects, without specially
25# handling the differences of dependencies and paths in NS builds.
26
27# Interface files exported from TF-M secure build
28set(SPE_INSTALL_INTERFACE_SRC ${CONFIG_SPE_PATH}/interface/src)
29set(SPE_INSTALL_INTERFACE_INC ${CONFIG_SPE_PATH}/interface/include)
30# lib parth
31set(APP_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/../lib)
32
David Hu87b46a82023-10-21 23:23:42 +080033# OS wrapper library consists of the wrapper layer of RTOSes, such as RTX
34add_library(os_wrapper STATIC)
35
36target_sources(os_wrapper
37 PRIVATE
38 ${CMAKE_CURRENT_LIST_DIR}/os_wrapper_cmsis_rtos_v2.c
Xinyu Zhang09174dc2023-11-01 14:32:00 +080039 $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${CMAKE_CURRENT_LIST_DIR}/tfm_nsid_map_table.c>
Anton Komlevc0ad6042023-08-29 18:23:26 +010040)
41
David Hu87b46a82023-10-21 23:23:42 +080042target_include_directories(os_wrapper
43 PUBLIC
44 ${CMAKE_CURRENT_LIST_DIR}/../lib/os_wrapper
45 # Some NS files include "os_wrapper/xxx.h" instead
46 ${CMAKE_CURRENT_LIST_DIR}/../lib
47 # Some OS wrapper header files are exported from TF-M secure build
48 ${SPE_INSTALL_INTERFACE_INC}
49)
50
51target_link_libraries(os_wrapper
52 PRIVATE
53 RTX_OS
54 tfm_nsid_manager
55)
56
57# NSID manager
58add_library(tfm_nsid_manager INTERFACE)
59
60target_include_directories(tfm_nsid_manager
61 INTERFACE
62 ${APP_LIB_DIR}/nsid_manager
63)
64
65target_sources(tfm_nsid_manager
66 INTERFACE
67 $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${APP_LIB_DIR}/nsid_manager/tfm_nsid_manager.c>
68)
69
70target_compile_definitions(tfm_nsid_manager
71 INTERFACE
72 $<$<BOOL:${TFM_NS_MANAGE_NSID}>:TFM_NS_MANAGE_NSID>
73 $<$<BOOL:${TEST_NS_MANAGE_NSID}>:TEST_NS_MANAGE_NSID>
74)
75
David Hu87b46a82023-10-21 23:23:42 +080076target_sources(RTX_OS
77 INTERFACE
Jamie Fox6d4ee162023-11-27 17:27:37 +000078 # Provide TZ context management stub to RTOS if protected by Trustzone
David Hu87b46a82023-10-21 23:23:42 +080079 $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:${APP_LIB_DIR}/nsid_manager/tz_shim_layer.c>
Jamie Fox6d4ee162023-11-27 17:27:37 +000080 # Provide CMSIS-RTX config implementation
81 os_config_cmsis_rtx.c
David Hu87b46a82023-10-21 23:23:42 +080082)
83
84target_link_libraries(RTX_OS
85 INTERFACE
86 tfm_nsid_manager
87)
88
89# Multi-core library
90if(TFM_PARTITION_NS_AGENT_MAILBOX)
91 add_library(ns_multi_core STATIC)
92
93 target_sources(ns_multi_core
94 PRIVATE
95 $<$<NOT:$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>>:${SPE_INSTALL_INTERFACE_SRC}/multi_core/tfm_ns_mailbox.c>
96 $<$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>:${SPE_INSTALL_INTERFACE_SRC}/multi_core/tfm_ns_mailbox_thread.c>
97 # NS RTOS specific implementation of NS mailbox
98 ${APP_LIB_DIR}/multi_core/tfm_ns_mailbox_rtos_api.c
99 $<$<BOOL:${TEST_NS_MULTI_CORE}>:${APP_LIB_DIR}/multi_core/tfm_ns_mailbox_test.c>
100 )
101
102 target_compile_definitions(ns_multi_core
103 PUBLIC
104 $<$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>:TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD>
105 TFM_MULTI_CORE_NS_OS
106 )
107
108 target_link_libraries(ns_multi_core
109 PRIVATE
110 platform_ns
111 tfm_api_ns
112 os_wrapper
113 )
114endif()
115
David Hu479ef002023-10-20 14:44:32 +0800116# TF-M ns logging
117add_library(tfm_ns_log STATIC EXCLUDE_FROM_ALL)
118
119target_sources(tfm_ns_log
120 PRIVATE
121 ${APP_LIB_DIR}/log/tfm_log_raw.c
122)
123
124target_include_directories(tfm_ns_log
125 PUBLIC
126 ${APP_LIB_DIR}/log/
127)
128
129target_link_libraries(tfm_ns_log
130 PRIVATE
131 platform_ns
132)
133
David Hu87b46a82023-10-21 23:23:42 +0800134################## Update plaform_ns with NS settings #################
135
136target_include_directories(platform_ns
137 PUBLIC
138 $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:${SPE_INSTALL_INTERFACE_INC}/multi_core>
139 ${SPE_INSTALL_INTERFACE_INC}
140)
141
142target_compile_definitions(platform_ns
143 PUBLIC
144 $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:TFM_MULTI_CORE_NS_OS>
145)
146
147################# Update NS interface with NS settings ################
148
149target_sources(tfm_api_ns
150 PRIVATE
151 # NS specific implementation of NS interface dispatcher
152 $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:${SPE_INSTALL_INTERFACE_SRC}/os_wrapper/tfm_ns_interface_rtos.c>
153)
154
155target_compile_definitions(tfm_api_ns
156 PUBLIC
157 $<$<BOOL:${TEST_NS_MULTI_CORE}>:TFM_MULTI_CORE_TEST>
158)
159
160target_link_libraries(tfm_api_ns
161 PRIVATE
162 $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:os_wrapper>
163)
164
165######################## NS application broker ########################
166
167add_library(tfm_test_broker STATIC)
168
169target_sources(tfm_test_broker
170 PRIVATE
171 main_ns.c
David Hu87b46a82023-10-21 23:23:42 +0800172)
173
174target_include_directories(tfm_test_broker
175 PUBLIC
176 .
177)
Anton Komlevc0ad6042023-08-29 18:23:26 +0100178
179target_link_libraries(tfm_test_broker
David Hu87b46a82023-10-21 23:23:42 +0800180 PRIVATE
181 os_wrapper
182 tfm_nsid_manager
Anton Komlevc0ad6042023-08-29 18:23:26 +0100183 PUBLIC
David Hu87b46a82023-10-21 23:23:42 +0800184 RTX_OS
Anton Komlevc0ad6042023-08-29 18:23:26 +0100185 tfm_api_ns
David Hu479ef002023-10-20 14:44:32 +0800186 tfm_ns_log
David Hu87b46a82023-10-21 23:23:42 +0800187 $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:ns_multi_core>
Anton Komlevc0ad6042023-08-29 18:23:26 +0100188)
David Hu479ef002023-10-20 14:44:32 +0800189
190target_compile_definitions(tfm_test_broker
191 PUBLIC
192 $<$<BOOL:${TFM_NS_REG_TEST}>:TFM_NS_REG_TEST>
193)