Build: Convert interface dir to modern cmake
Rewrite cmake files inside the interface directory. Remove generated
files as they are now generated into the build tree. Modify header
includes where include paths have changed.
WARNING: This change will not build in isolation, it requires _all_
other cmake changes to successfully build. It is split out only for
clarity of changes.
Change-Id: I9ebfb1e31bebcba4a45ea3bb9ed0aa1c3d1c144d
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt
new file mode 100644
index 0000000..acf6c56
--- /dev/null
+++ b/interface/CMakeLists.txt
@@ -0,0 +1,119 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+cmake_minimum_required(VERSION 3.13)
+cmake_policy(SET CMP0076 NEW)
+cmake_policy(SET CMP0079 NEW)
+
+
+if (TFM_MULTI_CORE_TOPOLOGY)
+ include(${CMAKE_SOURCE_DIR}/platform/ext/target/${TFM_PLATFORM}/preload_ns.cmake)
+ # The platform target is created in this directory/file so that it has the
+ # same settings as the main ns target.
+ add_library(platform_ns STATIC)
+endif()
+
+###################### PSA interface (header only) #############################
+
+add_library(psa_interface INTERFACE)
+
+target_include_directories(psa_interface
+ INTERFACE
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ ${CMAKE_BINARY_DIR}/generated/interface/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/os_wrapper
+)
+
+# PSA interface files are generated from a template
+add_dependencies(psa_interface
+ tfm_generated_files
+)
+
+target_link_libraries(psa_interface
+ INTERFACE
+ tfm_partition_defs
+)
+
+target_compile_definitions(psa_interface
+ INTERFACE
+ $<$<BOOL:${TFM_PSA_API}>:TFM_PSA_API>
+ $<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:TFM_NS_CLIENT_IDENTIFICATION>
+ $<$<BOOL:${CONFIG_TFM_ENABLE_CTX_MGMT}>:CONFIG_TFM_ENABLE_CTX_MGMT>
+ $<$<BOOL:${TFM_ISOLATION_LEVEL}>:TFM_LVL=${TFM_ISOLATION_LEVEL}>
+ $<$<VERSION_GREATER:${TFM_ISOLATION_LEVEL},1>:CONFIG_TFM_ENABLE_MEMORY_PROTECT>
+ $<$<BOOL:${TFM_MULTI_CORE_TOPOLOGY}>:TFM_MULTI_CORE_TOPOLOGY>
+)
+
+###################### PSA api (S lib) #########################################
+
+target_sources(tfm_secure_api
+ INTERFACE
+ $<$<BOOL:${TFM_PSA_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/psa/psa_client.c>
+ $<$<BOOL:${TFM_PSA_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/psa/psa_service.c>
+ $<$<BOOL:${TFM_PSA_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/psa/psa_lifecycle.c>
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/log/tfm_log_raw.c
+)
+
+###################### PSA api (NS lib) ########################################
+
+add_library(psa_api_ns STATIC)
+
+target_sources(psa_api_ns
+ PRIVATE
+ $<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:src/tfm_nspm_svc_handler.c>
+ $<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:src/tfm_nspm_api.c>
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/log/tfm_log_raw.c
+)
+
+if (${TFM_PSA_API})
+ target_sources(psa_api_ns PRIVATE
+ $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_platform_ipc_api.c>
+ $<$<BOOL:${TFM_PARTITION_PROTECTED_STORAGE}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_ps_ipc_api.c>
+ $<$<BOOL:${TFM_PARTITION_INTERNAL_TRUSTED_STORAGE}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_its_ipc_api.c>
+ $<$<BOOL:${TFM_PARTITION_CRYPTO}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_crypto_ipc_api.c>
+ $<$<BOOL:${TFM_PARTITION_INITIAL_ATTESTATION}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_initial_attestation_ipc_api.c>
+ )
+
+ if (TFM_MULTI_CORE_TOPOLOGY)
+ target_sources(psa_api_ns PRIVATE
+ src/tfm_ns_mailbox.c
+ src/tfm_multi_core_api.c
+ src/tfm_multi_core_psa_ns_api.c
+ )
+ else()
+ target_sources(psa_api_ns PRIVATE
+ src/tfm_ns_interface.c
+ src/tfm_psa_ns_api.c
+ )
+ endif()
+else()
+ target_sources(psa_api_ns PRIVATE
+ $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_platform_func_api.c>
+ $<$<BOOL:${TFM_PARTITION_AUDIT_LOG}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_audit_func_api.c>
+ $<$<BOOL:${TFM_PARTITION_PROTECTED_STORAGE}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_ps_func_api.c>
+ $<$<BOOL:${TFM_PARTITION_INTERNAL_TRUSTED_STORAGE}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_its_func_api.c>
+ $<$<BOOL:${TFM_PARTITION_CRYPTO}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_crypto_func_api.c>
+ $<$<BOOL:${TFM_PARTITION_INITIAL_ATTESTATION}>:${CMAKE_CURRENT_SOURCE_DIR}/src/tfm_initial_attestation_func_api.c>
+ src/tfm_psa_ns_api.c
+ )
+ if (NOT TFM_MULTI_CORE_TOPOLOGY)
+ target_sources(psa_api_ns PRIVATE
+ src/tfm_ns_interface.c
+ )
+ endif()
+
+endif()
+
+target_link_libraries(psa_api_ns
+ PUBLIC
+ psa_interface
+ PRIVATE
+ platform_ns
+ # CMSIS is currently only required to provide the NS client IDs. In
+ # future, this should probably be made more OS agnostic
+ $<$<BOOL:${TFM_NS_CLIENT_IDENTIFICATION}>:CMSIS_5_tfm_ns>
+)