Build: Update app_broker build
Update app_broker build to make dependencies more stable.
- Sort NS library folder structure.
Move common library folders out of app_broker. Place them under lib
folder. Move CMSIS to lib/ext.
It is expected that users can re-use those library in other NS
integration with TF-M.
- NS libraries depend on each other and therefore the dependencies are
complicated. Build those NS libraries under app_broker to more
easily sort out dependencies. Remove build files from library
folders.
Signed-off-by: David Hu <david.hu@arm.com>
Change-Id: I8c2ff7bbec6c03738b9cbe49fd286a5147293ba5
diff --git a/app_broker/CMakeLists.txt b/app_broker/CMakeLists.txt
index cc6622c..2933833 100644
--- a/app_broker/CMakeLists.txt
+++ b/app_broker/CMakeLists.txt
@@ -14,27 +14,158 @@
# brings configuration from TF-M build
add_subdirectory(${CONFIG_SPE_PATH} ${CMAKE_BINARY_DIR}/spe)
-add_subdirectory(log)
-add_subdirectory(CMSIS)
-add_subdirectory(os_wrapper)
+####################### NS application libraries #######################
-add_library(tfm_test_broker STATIC
- main_ns.c
+# Build all the NS application libraries here under app_broker
+# Those NS libraries depend on each other. It is more convenient to sort out the dependencies here.
+#
+# Those NS libraries also link to libraries exported from TF-M secure build. Specify all the
+# dependencies on TF-M exported libraries here, rather than under each NS library folder.
+# Therefore, NS library can be shared and re-used in other downstream projects, without specially
+# handling the differences of dependencies and paths in NS builds.
+
+# Interface files exported from TF-M secure build
+set(SPE_INSTALL_INTERFACE_SRC ${CONFIG_SPE_PATH}/interface/src)
+set(SPE_INSTALL_INTERFACE_INC ${CONFIG_SPE_PATH}/interface/include)
+# lib parth
+set(APP_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/../lib)
+
+# TF-M logging
+add_subdirectory(${APP_LIB_DIR}/log ${CMAKE_CURRENT_BINARY_DIR}/lib/log)
+
+# OS wrapper library consists of the wrapper layer of RTOSes, such as RTX
+add_library(os_wrapper STATIC)
+
+target_sources(os_wrapper
+ PRIVATE
+ ${CMAKE_CURRENT_LIST_DIR}/os_wrapper_cmsis_rtos_v2.c
)
-target_include_directories(tfm_test_broker PUBLIC .)
+target_include_directories(os_wrapper
+ PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/../lib/os_wrapper
+ # Some NS files include "os_wrapper/xxx.h" instead
+ ${CMAKE_CURRENT_LIST_DIR}/../lib
+ # Some OS wrapper header files are exported from TF-M secure build
+ ${SPE_INSTALL_INTERFACE_INC}
+)
+
+target_link_libraries(os_wrapper
+ PRIVATE
+ RTX_OS
+ tfm_nsid_manager
+)
+
+# NSID manager
+add_library(tfm_nsid_manager INTERFACE)
+
+target_include_directories(tfm_nsid_manager
+ INTERFACE
+ ${APP_LIB_DIR}/nsid_manager
+)
+
+target_sources(tfm_nsid_manager
+ INTERFACE
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${APP_LIB_DIR}/nsid_manager/tfm_nsid_manager.c>
+)
+
+target_compile_definitions(tfm_nsid_manager
+ INTERFACE
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:TFM_NS_MANAGE_NSID>
+ $<$<BOOL:${TEST_NS_MANAGE_NSID}>:TEST_NS_MANAGE_NSID>
+)
+
+# Provide TZ context management stub to RTOS if protected by Trustzone
+target_sources(RTX_OS
+ INTERFACE
+ $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:${APP_LIB_DIR}/nsid_manager/tz_shim_layer.c>
+)
+
+target_link_libraries(RTX_OS
+ INTERFACE
+ tfm_nsid_manager
+)
+
+# Multi-core library
+if(TFM_PARTITION_NS_AGENT_MAILBOX)
+ add_library(ns_multi_core STATIC)
+
+ target_sources(ns_multi_core
+ PRIVATE
+ $<$<NOT:$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>>:${SPE_INSTALL_INTERFACE_SRC}/multi_core/tfm_ns_mailbox.c>
+ $<$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>:${SPE_INSTALL_INTERFACE_SRC}/multi_core/tfm_ns_mailbox_thread.c>
+ # NS RTOS specific implementation of NS mailbox
+ ${APP_LIB_DIR}/multi_core/tfm_ns_mailbox_rtos_api.c
+ $<$<BOOL:${TEST_NS_MULTI_CORE}>:${APP_LIB_DIR}/multi_core/tfm_ns_mailbox_test.c>
+ )
+
+ target_compile_definitions(ns_multi_core
+ PUBLIC
+ $<$<BOOL:${TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD}>:TFM_MULTI_CORE_NS_OS_MAILBOX_THREAD>
+ TFM_MULTI_CORE_NS_OS
+ )
+
+ target_link_libraries(ns_multi_core
+ PRIVATE
+ platform_ns
+ tfm_api_ns
+ os_wrapper
+ )
+endif()
+
+################## Update plaform_ns with NS settings #################
+
+target_include_directories(platform_ns
+ PUBLIC
+ $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:${SPE_INSTALL_INTERFACE_INC}/multi_core>
+ ${SPE_INSTALL_INTERFACE_INC}
+)
+
+target_compile_definitions(platform_ns
+ PUBLIC
+ $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:TFM_MULTI_CORE_NS_OS>
+)
+
+################# Update NS interface with NS settings ################
+
+target_sources(tfm_api_ns
+ PRIVATE
+ # NS specific implementation of NS interface dispatcher
+ $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:${SPE_INSTALL_INTERFACE_SRC}/os_wrapper/tfm_ns_interface_rtos.c>
+)
+
+target_compile_definitions(tfm_api_ns
+ PUBLIC
+ $<$<BOOL:${TEST_NS_MULTI_CORE}>:TFM_MULTI_CORE_TEST>
+)
+
+target_link_libraries(tfm_api_ns
+ PRIVATE
+ $<$<BOOL:${CONFIG_TFM_USE_TRUSTZONE}>:os_wrapper>
+)
+
+######################## NS application broker ########################
+
+add_library(tfm_test_broker STATIC)
+
+target_sources(tfm_test_broker
+ PRIVATE
+ main_ns.c
+ $<$<BOOL:${TFM_NS_MANAGE_NSID}>:${CMAKE_CURRENT_LIST_DIR}/tfm_nsid_map_table.c>
+)
+
+target_include_directories(tfm_test_broker
+ PUBLIC
+ .
+)
target_link_libraries(tfm_test_broker
+ PRIVATE
+ os_wrapper
+ tfm_nsid_manager
PUBLIC
+ RTX_OS
tfm_api_ns
tfm_log
- os_wrapper
+ $<$<BOOL:${TFM_PARTITION_NS_AGENT_MAILBOX}>:ns_multi_core>
)
-
-add_subdirectory(nsid_manager)
-target_link_libraries(tfm_test_broker PUBLIC tfm_nsid_manager)
-
-if (TFM_PARTITION_NS_AGENT_MAILBOX)
- add_subdirectory(multi_core)
- target_link_libraries(tfm_test_broker PUBLIC ns_multi_core)
-endif()