Build: Improve handling of CMSIS RTX lib

Also add necessary platform files for the core testsuite

Change-Id: Ibfa4ba5f8c0beeca1f333f5be87c8ce8a0910ec9
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/config/config_default.cmake b/config/config_default.cmake
index e5ad040..31d1ad0 100644
--- a/config/config_default.cmake
+++ b/config/config_default.cmake
@@ -106,6 +106,8 @@
 
 ################################## Tests #######################################
 
+set(TFM_INTERACTIVE_TEST                OFF         CACHE BOOL      "Enable interactive tests")
+
 set(TFM_CRYPTO_TEST_ALG_CBC             ON          CACHE BOOL      "Test CBC cryptography mode")
 set(TFM_CRYPTO_TEST_ALG_CCM             ON          CACHE BOOL      "Test CCM cryptography mode")
 set(TFM_CRYPTO_TEST_ALG_CFB             ON          CACHE BOOL      "Test CFB cryptography mode")
diff --git a/lib/ext/CMSIS_5/CMakeLists.txt b/lib/ext/CMSIS_5/CMakeLists.txt
new file mode 100644
index 0000000..6c5167d
--- /dev/null
+++ b/lib/ext/CMSIS_5/CMakeLists.txt
@@ -0,0 +1,37 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+add_library(CMSIS_5_RTX_V8MMN STATIC IMPORTED GLOBAL)
+add_library(CMSIS_5_RTX_V8MBN STATIC IMPORTED GLOBAL)
+add_library(CMSIS_5_RTX_CM3 STATIC IMPORTED GLOBAL)
+
+if ("${CMAKE_C_COMPILER_ID}" STREQUAL GNU)
+    set_target_properties(CMSIS_5_RTX_V8MMN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a)
+    set_target_properties(CMSIS_5_RTX_V8MBN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a)
+    set_target_properties(CMSIS_5_RTX_CM3   PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_CM3.a)
+elseif("${CMAKE_C_COMPILER_ID}" STREQUAL ARMClang)
+    set_target_properties(CMSIS_5_RTX_V8MMN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib)
+    set_target_properties(CMSIS_5_RTX_V8MBN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib)
+    set_target_properties(CMSIS_5_RTX_CM3   PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_CM3.lib)
+elseif("${CMAKE_C_COMPILER_ID}" STREQUAL IAR)
+    set_target_properties(CMSIS_5_RTX_V8MMN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/libRTX_V8MMN.a)
+    set_target_properties(CMSIS_5_RTX_V8MBN PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/libRTX_V8MBN.a)
+    set_target_properties(CMSIS_5_RTX_CM3   PROPERTIES IMPORTED_LOCATION ${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/libRTX_CM3.a)
+else()
+    message(FATAL_ERROR "${CMAKE_C_COMPILER_ID} does not have CMSIS RTX static libraries set up")
+endif()
+
+target_link_libraries(CMSIS_5_RTX_V8MMN
+    INTERFACE
+        tfm_s_veneers
+)
+
+target_link_libraries(CMSIS_5_RTX_V8MBN
+    INTERFACE
+        tfm_s_veneers
+)
+
diff --git a/lib/ext/CMakeLists.txt b/lib/ext/CMakeLists.txt
index 25277d7..ced2557 100644
--- a/lib/ext/CMakeLists.txt
+++ b/lib/ext/CMakeLists.txt
@@ -10,6 +10,7 @@
 add_subdirectory(t_cose)
 add_subdirectory(mbedcrypto)
 add_subdirectory(tf-m-tests)
+add_subdirectory(CMSIS_5)
 if(BL2)
     add_subdirectory(mcuboot)
 endif()
diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt
index de11459..1f63404 100644
--- a/platform/CMakeLists.txt
+++ b/platform/CMakeLists.txt
@@ -85,6 +85,7 @@
 target_link_libraries(platform_ns
     PUBLIC
         platform_region_defs
+        psa_interface
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/cypress/psoc64/CMakeLists.txt b/platform/ext/target/cypress/psoc64/CMakeLists.txt
index 8db6030..ad2adfa 100644
--- a/platform/ext/target/cypress/psoc64/CMakeLists.txt
+++ b/platform/ext/target/cypress/psoc64/CMakeLists.txt
@@ -48,11 +48,10 @@
             $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/gcc/psoc6_ns.ld>
             $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/iar/psoc6_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_CM3.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_CM3.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_CM3.a>
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            # CM4 without FP support uses CM3 libs
+            CMSIS_5_RTX_CM3
     )
 endif()
 
@@ -108,6 +107,9 @@
         ./nv_counters.c
         ./services/src/tfm_platform_system.c
         ./dummy_crypto_keys.c
+        ./Device/Source/device_definition.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_definitions(platform_s
@@ -165,6 +167,9 @@
         ./Native_Driver/generated_source/cycfg_system.c
         ./mailbox/platform_multicore.c
         ./CMSIS_Driver/Driver_USART.c
+        ./Device/Source/device_definition.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
diff --git a/platform/ext/target/mps2/an519/CMakeLists.txt b/platform/ext/target/mps2/an519/CMakeLists.txt
index 98686ff..af6b650 100644
--- a/platform/ext/target/mps2/an519/CMakeLists.txt
+++ b/platform/ext/target/mps2/an519/CMakeLists.txt
@@ -41,14 +41,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/gcc/mps2_an519_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/iar/mps2_an519_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -97,8 +92,8 @@
         native_drivers/ppc_sse200_drv.c
         native_drivers/arm_uart_drv.c
         native_drivers/timer_cmsdk/timer_cmsdk.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -117,18 +112,23 @@
 target_sources(platform_ns
     PRIVATE
         native_drivers/arm_uart_drv.c
+        native_drivers/timer_cmsdk/timer_cmsdk.c
         cmsis_drivers/Driver_USART.c
         retarget/platform_retarget_dev.c
         cmsis_core/system_cmsdk_mps2_an519.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
     PUBLIC
         .
+        ../common
         ${PLATFORM_DIR}/..
         retarget
         cmsis_core
         native_drivers
+        native_drivers/timer_cmsdk
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/mps2/an521/CMakeLists.txt b/platform/ext/target/mps2/an521/CMakeLists.txt
index c434b2b..d827173 100644
--- a/platform/ext/target/mps2/an521/CMakeLists.txt
+++ b/platform/ext/target/mps2/an521/CMakeLists.txt
@@ -42,14 +42,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/gcc/mps2_an521_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/iar/mps2_an521_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -98,8 +93,8 @@
         native_drivers/ppc_sse200_drv.c
         native_drivers/arm_uart_drv.c
         native_drivers/timer_cmsdk/timer_cmsdk.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -118,18 +113,23 @@
 target_sources(platform_ns
     PRIVATE
         native_drivers/arm_uart_drv.c
+        native_drivers/timer_cmsdk/timer_cmsdk.c
         cmsis_drivers/Driver_USART.c
         retarget/platform_retarget_dev.c
         cmsis_core/system_cmsdk_mps2_an521.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
     PUBLIC
         .
+        ../common
         ${PLATFORM_DIR}/..
         retarget
         cmsis_core
         native_drivers
+        native_drivers/timer_cmsdk
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/mps2/an539/CMakeLists.txt b/platform/ext/target/mps2/an539/CMakeLists.txt
index a4a450a..a25b28f 100644
--- a/platform/ext/target/mps2/an539/CMakeLists.txt
+++ b/platform/ext/target/mps2/an539/CMakeLists.txt
@@ -42,14 +42,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/gcc/an539_mps2_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/iar/an539_mps2_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -100,10 +95,12 @@
         native_drivers/mpu_armv8m_drv.c
         native_drivers/ppc_sse123_drv.c
         native_drivers/uart_cmsdk_drv.c
+        native_drivers/systimer_armv8-m_drv.c
+        native_drivers/syscounter_armv8-m_cntrl_drv.c
         spm_hal.c
         target_cfg.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -125,11 +122,16 @@
         device/source/device_definition.c
         native_drivers/uart_cmsdk_drv.c
         cmsis_drivers/Driver_USART.c
+        native_drivers/systimer_armv8-m_drv.c
+        native_drivers/syscounter_armv8-m_cntrl_drv.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
     PUBLIC
         .
+        ../common
         ${PLATFORM_DIR}/..
         device/include
         device/config
diff --git a/platform/ext/target/mps2/fvp_sse300/CMakeLists.txt b/platform/ext/target/mps2/fvp_sse300/CMakeLists.txt
index 9a13356..b9407e1 100644
--- a/platform/ext/target/mps2/fvp_sse300/CMakeLists.txt
+++ b/platform/ext/target/mps2/fvp_sse300/CMakeLists.txt
@@ -46,14 +46,9 @@
         # $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/gcc/fvp_sse300_mps2_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/iar/fvp_sse300_mps2_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            # $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
-            tfm_spm
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -105,8 +100,8 @@
         native_drivers/mpu_armv8m_drv.c
         cmsis_drivers/Driver_MPC.c
         cmsis_drivers/Driver_SSE300_PPC.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_link_libraries(platform_s
@@ -129,17 +124,20 @@
 
 target_sources(platform_ns
     PRIVATE
-    device/source/system_core_init.c
-    device/source/device_definition.c
-    native_drivers/uart_cmsdk_drv.c
-    native_drivers/systimer_armv8-m_drv.c
-    cmsis_drivers/Driver_USART.c
-    cmsis_drivers/Driver_Flash.c
+        device/source/system_core_init.c
+        device/source/device_definition.c
+        native_drivers/uart_cmsdk_drv.c
+        native_drivers/systimer_armv8-m_drv.c
+        cmsis_drivers/Driver_USART.c
+        cmsis_drivers/Driver_Flash.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
     PUBLIC
         .
+        ../common
         ${PLATFORM_DIR}/..
         cmsis_drivers
         cmsis_drivers/config
@@ -148,6 +146,7 @@
         device/include
         device/source/armclang
         native_drivers
+        native_drivers/timer_cmsdk
         partition
         services/src
         native_drivers
diff --git a/platform/ext/target/mps2/sse-200_aws/CMakeLists.txt b/platform/ext/target/mps2/sse-200_aws/CMakeLists.txt
index 7725ecb..b77193c 100644
--- a/platform/ext/target/mps2/sse-200_aws/CMakeLists.txt
+++ b/platform/ext/target/mps2/sse-200_aws/CMakeLists.txt
@@ -42,14 +42,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/gcc/sse-200_aws_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/iar/sse-200_aws_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -97,9 +92,9 @@
         target_cfg.c
         native_drivers/ppc_sse200_drv.c
         native_drivers/uart_cmsdk_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
         native_drivers/timer_cmsdk/timer_cmsdk_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -117,18 +112,23 @@
 target_sources(platform_ns
     PRIVATE
         native_drivers/uart_cmsdk_drv.c
+        native_drivers/timer_cmsdk/timer_cmsdk_drv.c
         cmsis_drivers/Driver_USART.c
         retarget/platform_retarget_dev.c
         cmsis_core/system_cmsdk_sse-200_aws.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
     PUBLIC
         .
+        ../common
         ${PLATFORM_DIR}/..
         retarget
         cmsis_core
         native_drivers
+        native_drivers/timer_cmsdk
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/mps3/an524/CMakeLists.txt b/platform/ext/target/mps3/an524/CMakeLists.txt
index d24e29d..f56b0ed 100644
--- a/platform/ext/target/mps3/an524/CMakeLists.txt
+++ b/platform/ext/target/mps3/an524/CMakeLists.txt
@@ -42,14 +42,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/gcc/mps3_an524_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/device/source/iar/mps3_an524_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MBN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MBN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MBN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MBN
     )
 endif()
 
@@ -94,11 +89,12 @@
         native_drivers/mpu_armv8m_drv.c
         native_drivers/ppc_sse200_drv.c
         native_drivers/uart_cmsdk_drv.c
+        native_drivers/timer_cmsdk_drv.c
         spm_hal.c
         target_cfg.c
         native_drivers/ppc_sse200_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -119,7 +115,10 @@
         device/source/system_core_init.c
         device/source/device_definition.c
         native_drivers/uart_cmsdk_drv.c
+        native_drivers/timer_cmsdk_drv.c
         cmsis_drivers/Driver_USART.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
diff --git a/platform/ext/target/musca_a/CMakeLists.txt b/platform/ext/target/musca_a/CMakeLists.txt
index 6b7ca6b..5d1f2f3 100644
--- a/platform/ext/target/musca_a/CMakeLists.txt
+++ b/platform/ext/target/musca_a/CMakeLists.txt
@@ -43,14 +43,9 @@
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/gcc/musca_ns.ld>
         $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/iar/musca_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MMN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MMN
     )
 endif()
 
@@ -101,8 +96,8 @@
         Native_Driver/ppc_sse200_drv.c
         Native_Driver/uart_pl011_drv.c
         Native_Driver/timer_cmsdk_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -121,10 +116,13 @@
 target_sources(platform_ns
     PRIVATE
         Native_Driver/uart_pl011_drv.c
+        Native_Driver/timer_cmsdk_drv.c
         Native_Driver/musca_a1_scc_drv.c
         CMSIS_Driver/Driver_USART.c
         Device/Source/system_core_init.c
         Device/Source/device_definition.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
@@ -135,6 +133,7 @@
         Device/Include
         Native_Driver
         Libraries
+        services/include
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/musca_b1/CMakeLists.txt b/platform/ext/target/musca_b1/CMakeLists.txt
index 06b3bf9..c71d50b 100644
--- a/platform/ext/target/musca_b1/CMakeLists.txt
+++ b/platform/ext/target/musca_b1/CMakeLists.txt
@@ -38,13 +38,9 @@
         $<$<C_COMPILER_ID:ARMClang>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/armclang/musca_ns.sct>
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/gcc/musca_ns.ld>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MMN
     )
 endif()
 
@@ -96,8 +92,8 @@
         Native_Driver/ppc_sse200_drv.c
         Native_Driver/uart_pl011_drv.c
         Native_Driver/timer_cmsdk_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -116,10 +112,13 @@
 target_sources(platform_ns
     PRIVATE
         Native_Driver/uart_pl011_drv.c
+        Native_Driver/timer_cmsdk_drv.c
         CMSIS_Driver/Driver_USART.c
         Device/Source/system_core_init.c
         Native_Driver/musca_b1_scc_drv.c
         Device/Source/device_definition.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
@@ -130,6 +129,7 @@
         Device/Include
         Native_Driver
         Libraries
+        services/include
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/musca_s1/CMakeLists.txt b/platform/ext/target/musca_s1/CMakeLists.txt
index 1da5f6f..37d6236 100644
--- a/platform/ext/target/musca_s1/CMakeLists.txt
+++ b/platform/ext/target/musca_s1/CMakeLists.txt
@@ -38,13 +38,9 @@
         $<$<C_COMPILER_ID:ARMClang>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/armclang/musca_ns.sct>
         $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/gcc/musca_ns.ld>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MMN
     )
 endif()
 
@@ -91,9 +87,9 @@
         Native_Driver/cache_drv.c
         spm_hal.c
         target_cfg.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
         Native_Driver/timer_cmsdk_drv.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -112,9 +108,12 @@
 target_sources(platform_ns
     PRIVATE
         Native_Driver/uart_pl011_drv.c
+        Native_Driver/timer_cmsdk_drv.c
         CMSIS_Driver/Driver_USART.c
         Device/Source/system_core_init.c
         Device/Source/device_definition.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
@@ -124,6 +123,7 @@
         Device/Config
         Device/Include
         Native_Driver
+        services/include
 )
 
 #========================= Platform BL2 =======================================#
diff --git a/platform/ext/target/nxp/lpcxpresso55s69/CMakeLists.txt b/platform/ext/target/nxp/lpcxpresso55s69/CMakeLists.txt
index 9d1eb9f..eb61b86 100644
--- a/platform/ext/target/nxp/lpcxpresso55s69/CMakeLists.txt
+++ b/platform/ext/target/nxp/lpcxpresso55s69/CMakeLists.txt
@@ -37,13 +37,9 @@
             $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/armgcc/LPC55S69_cm33_core0_ns.ld>
             $<$<C_COMPILER_ID:IAR>:${CMAKE_CURRENT_SOURCE_DIR}/Device/Source/iar/LPC55S69_cm33_core0_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MMN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MMN
     )
 endif()
 
@@ -121,8 +117,8 @@
         ../common/Native_Driver/utilities/debug_console/fsl_debug_console.c
         ../common/Native_Driver/utilities/str/fsl_str.c
         ../lpcxpresso55s69/Native_Driver/system_LPC55S69_cm33_core0.c
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
-        $<$<BOOL:TFM_PARTITION_PLATFORM>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_compile_options(platform_s
@@ -167,6 +163,8 @@
         ${PLATFORM_DIR}/ext/target/nxp/common/Native_Driver/utilities/fsl_sbrk.c
         ${PLATFORM_DIR}/ext/target/nxp/common/Native_Driver/utilities/debug_console/fsl_debug_console.c
         ${PLATFORM_DIR}/ext/target/nxp/common/Native_Driver/utilities/str/fsl_str.c
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+        $<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
 )
 
 target_include_directories(platform_ns
diff --git a/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt b/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
index 175e55f..947e270 100644
--- a/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
+++ b/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
@@ -34,14 +34,9 @@
         $<$<C_COMPILER_ID:ARMClang>:${STM_COMMON_DIR}/stm32l5xx/Device/Source/armclang/stm32l5xx_ns.sct>
         $<$<C_COMPILER_ID:IAR>:${STM_COMMON_DIR}/stm32l5xx/Device/Source/iar/stm32l5xx_ns.icf>
     )
-    target_link_libraries(tfm_ns
-        PRIVATE
-            $<$<C_COMPILER_ID:ARMClang>:${CMSIS_5_PATH}/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib>
-            $<$<C_COMPILER_ID:GNU>:${CMSIS_5_PATH}/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a>
-            $<$<C_COMPILER_ID:IAR>:${CMSIS_5_PATH}/RTOS2/RTX/Library/IAR/RTX_V8MMN.a>
-            # These libraries require linking to the veneers, so the veneers are
-            # marked again here as a link dependency to get the ordering right
-            tfm_s_veneers
+    target_link_libraries(CMSIS_5_tfm_ns
+        INTERFACE
+            CMSIS_5_RTX_V8MMN
     )
 endif()