Build: Simplify TF-M regression test config parse
Search regression test config passed via command line. If regression
test flags are found in CMake cache variables and values are set to ON,
enable corresponding regression test flag in TF-M build.
It can get rid of long list in if condition check of regression test
configs. Developers only need to name regression test group starting
with "TEST_NS" or "TEST_S", without updating the long if condition
check.
Change-Id: I83f0589390d2120afe94feb9f0867f4aa8187202
Signed-off-by: David Hu <david.hu@arm.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5ad39c3..2a75bfd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,7 +106,7 @@
endif()
add_subdirectory(platform)
-if(NS AND TFM_TEST)
+if(TFM_NS_REG_TEST OR TFM_S_REG_TEST)
# Set to ${TFM_TEST_REPO_PATH}/test by default
add_subdirectory(${TFM_TEST_PATH} ${CMAKE_CURRENT_BINARY_DIR}/test)
endif()
diff --git a/config/check_config.cmake b/config/check_config.cmake
index 7a800bf..ce65791 100644
--- a/config/check_config.cmake
+++ b/config/check_config.cmake
@@ -30,7 +30,7 @@
tfm_invalid_config(TFM_MULTI_CORE_TOPOLOGY AND NOT TFM_PSA_API)
tfm_invalid_config(TFM_PLAT_SPECIFIC_MULTI_CORE_COMM AND NOT TFM_MULTI_CORE_TOPOLOGY)
-tfm_invalid_config(TFM_TEST AND TEST_PSA_API)
+tfm_invalid_config((TFM_S_REG_TEST OR TFM_NS_REG_TEST) AND TEST_PSA_API)
tfm_invalid_config(TFM_PARTITION_PROTECTED_STORAGE AND NOT TFM_PARTITION_INTERNAL_TRUSTED_STORAGE)
tfm_invalid_config((TFM_PARTITION_PROTECTED_STORAGE AND PS_ROLLBACK_PROTECTION) AND NOT TFM_PARTITION_PLATFORM)
@@ -87,6 +87,6 @@
########################### Test check config ##################################
-if(TFM_TEST)
+if(TFM_S_REG_TEST OR TFM_NS_REG_TEST)
include(config/tests/check_config.cmake)
endif()
diff --git a/config/set_config.cmake b/config/set_config.cmake
index cd3b05c..0027063 100644
--- a/config/set_config.cmake
+++ b/config/set_config.cmake
@@ -50,33 +50,35 @@
# Load defaults, setting options not already set
include(config/config_default.cmake)
-# Load TF-M test suites setting
-if (TEST_S OR
- TEST_NS OR
- TEST_NS_ATTESTATION OR
- TEST_NS_T_COSE OR
- TEST_NS_QCBOR OR
- TEST_NS_AUDIT OR
- TEST_NS_CORE OR
- TEST_NS_CRYPTO OR
- TEST_NS_ITS OR
- TEST_NS_PS OR
- TEST_NS_PLATFORM OR
- TEST_NS_FWU OR
- TEST_NS_IPC OR
- TEST_NS_SLIH_IRQ OR
- TEST_NS_FLIH_IRQ OR
- TEST_NS_MULTI_CORE OR
- TEST_S_ATTESTATION OR
- TEST_S_AUDIT OR
- TEST_S_CRYPTO OR
- TEST_S_ITS OR
- TEST_S_PS OR
- TEST_S_PLATFORM OR
- TEST_S_FWU OR
- TEST_S_IPC)
+# Load TF-M regression test suites setting
- # TFM_TEST is an internal cmake temporary value to manage tf-m-tests source
- set(TFM_TEST ON)
+get_cmake_property(CACHE_VARS CACHE_VARIABLES)
+# By default all non-secure regression tests are disabled.
+# If TEST_NS or TEST_NS_XXX flag is passed via command line and set to ON,
+# selected corresponding features to support non-secure regression tests.
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_NS.*" _NS_TEST_FOUND "${CACHE_VAR}")
+ if (_NS_TEST_FOUND AND "${${CACHE_VAR}}")
+ # TFM_NS_REG_TEST is a TF-M internal cmake flag to manage building
+ # tf-m-tests non-secure regression tests related source
+ set(TFM_NS_REG_TEST ON)
+ break()
+ endif()
+endforeach()
+
+# By default all secure regression tests are disabled.
+# If TEST_S or TEST_S_XXX flag is passed via command line and set to ON,
+# selected corresponding features to support secure regression tests.
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_S.*" _S_TEST_FOUND "${CACHE_VAR}")
+ if (_S_TEST_FOUND AND "${${CACHE_VAR}}")
+ # TFM_S_REG_TEST is a TF-M internal cmake flag to manage building
+ # tf-m-tests secure regression tests related source
+ set(TFM_S_REG_TEST ON)
+ break()
+ endif()
+endforeach()
+
+if (TFM_NS_REG_TEST OR TFM_S_REG_TEST)
include(config/tests/set_config.cmake)
endif()
diff --git a/config/tests/check_config.cmake b/config/tests/check_config.cmake
index 60f3c17..cae376a 100644
--- a/config/tests/check_config.cmake
+++ b/config/tests/check_config.cmake
@@ -49,6 +49,9 @@
tfm_invalid_config((NOT TFM_MULTI_CORE_TOPOLOGY) AND TEST_NS_MULTI_CORE)
tfm_invalid_config(TEST_NS_T_COSE AND SYMMETRIC_INITIAL_ATTESTATION)
+# So far all regression tests are triggered from NS app
+tfm_invalid_config(NOT NS)
+
########################## Check suites dependence #############################
tfm_invalid_config(TEST_NS_PS AND NOT TEST_NS_ITS)
diff --git a/config/tests/set_config.cmake b/config/tests/set_config.cmake
index cf6e2df..2536d3a 100644
--- a/config/tests/set_config.cmake
+++ b/config/tests/set_config.cmake
@@ -65,35 +65,24 @@
########################## Test framework sync #################################
-# Force TEST_NS ON if single NS test ON
-if (TEST_NS_ATTESTATION OR
- TEST_NS_T_COSE OR
- TEST_NS_QCBOR OR
- TEST_NS_AUDIT OR
- TEST_NS_CORE OR
- TEST_NS_CRYPTO OR
- TEST_NS_ITS OR
- TEST_NS_PS OR
- TEST_NS_PLATFORM OR
- TEST_NS_FWU OR
- TEST_NS_IPC OR
- TEST_NS_SLIH_IRQ OR
- TEST_NS_FLIH_IRQ OR
- TEST_NS_MULTI_CORE)
- set(TEST_FRAMEWORK_NS ON CACHE BOOL "Whether to build NS regression tests framework")
-endif()
+get_cmake_property(CACHE_VARS CACHE_VARIABLES)
+# Force TEST_FRAMEWORK_NS ON if single NS test ON
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_NS_.*" _NS_TEST_FOUND "${CACHE_VAR}")
+ if (_NS_TEST_FOUND AND "${${CACHE_VAR}}")
+ set(TEST_FRAMEWORK_NS ON CACHE BOOL "Whether to build NS regression tests framework")
+ break()
+ endif()
+endforeach()
-# Force TEST_S ON if single S test ON
-if (TEST_S_ATTESTATION OR
- TEST_S_AUDIT OR
- TEST_S_CRYPTO OR
- TEST_S_ITS OR
- TEST_S_PS OR
- TEST_S_PLATFORM OR
- TEST_S_FWU OR
- TEST_S_IPC)
- set(TEST_FRAMEWORK_S ON CACHE BOOL "Whether to build S regression tests framework")
-endif()
+# Force TEST_FRAMEWORK_S ON if single S test ON
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_S_.*" _S_TEST_FOUND "${CACHE_VAR}")
+ if (_S_TEST_FOUND AND "${${CACHE_VAR}}")
+ set(TEST_FRAMEWORK_S ON CACHE BOOL "Whether to build S regression tests framework")
+ break()
+ endif()
+endforeach()
########################## Load default config #################################
diff --git a/lib/ext/tf-m-tests/tf-m-tests.cmake b/lib/ext/tf-m-tests/tf-m-tests.cmake
new file mode 100644
index 0000000..1220cce
--- /dev/null
+++ b/lib/ext/tf-m-tests/tf-m-tests.cmake
@@ -0,0 +1,46 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2021, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+get_cmake_property(CACHE_VARS CACHE_VARIABLES)
+
+# By default all non-secure regression tests are disabled.
+# If TEST_NS or TEST_NS_XXX flag is passed via command line and set to ON,
+# selected corresponding features to support non-secure regression tests.
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_NS.*" _NS_TEST_FOUND "${CACHE_VAR}")
+ if (_NS_TEST_FOUND AND "${${CACHE_VAR}}")
+ # TFM_NS_REG_TEST is a TF-M internal cmake flag to manage building
+ # tf-m-tests non-secure regression tests related source
+ set(TFM_NS_REG_TEST ON)
+ break()
+ endif()
+endforeach()
+
+# By default all secure regression tests are disabled.
+# If TEST_S or TEST_S_XXX flag is passed via command line and set to ON,
+# selected corresponding features to support secure regression tests.
+foreach(CACHE_VAR ${CACHE_VARS})
+ string(REGEX MATCH "^TEST_S.*" _S_TEST_FOUND "${CACHE_VAR}")
+ if (_S_TEST_FOUND AND "${${CACHE_VAR}}")
+ # TFM_S_REG_TEST is a TF-M internal cmake flag to manage building
+ # tf-m-tests secure regression tests related source
+ set(TFM_S_REG_TEST ON)
+ break()
+ endif()
+endforeach()
+
+# If NS app, secure regression test or non-secure regression test is enabled,
+# fetch tf-m-tests repo.
+# The conditiions are actually overlapped but it can make the logic more clear.
+# Besides, the dependencies between NS app and regression tests will be
+# optimized later.
+if (NS OR TFM_S_REG_TEST OR TFM_NS_REG_TEST)
+ # Set tf-m-tests repo config
+ include(${CMAKE_SOURCE_DIR}/lib/ext/tf-m-tests/repo_config_default.cmake)
+ # Fetch tf-m-tests repo
+ include(${CMAKE_SOURCE_DIR}/lib/ext/tf-m-tests/fetch_repo.cmake)
+endif()
diff --git a/platform/ext/target/arm/mps2/an519/CMakeLists.txt b/platform/ext/target/arm/mps2/an519/CMakeLists.txt
index 4f165a2..ff87a9a 100644
--- a/platform/ext/target/arm/mps2/an519/CMakeLists.txt
+++ b/platform/ext/target/arm/mps2/an519/CMakeLists.txt
@@ -94,7 +94,7 @@
native_drivers/arm_uart_drv.c
$<$<AND:$<NOT:$<BOOL:${TEST_NS_SLIH_IRQ}>>,$<NOT:$<BOOL:${TEST_NS_FLIH_IRQ}>>>:${CMAKE_CURRENT_SOURCE_DIR}/native_drivers/timer_cmsdk/timer_cmsdk.c>
${CMAKE_SOURCE_DIR}/platform/ext/common/tfm_hal_isolation_mpu_v8m.c
- $<$<BOOL:${TFM_TEST}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+ $<$<OR:$<BOOL:${TFM_S_REG_TEST}>,$<BOOL:${TFM_NS_REG_TEST}>>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
$<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
)
diff --git a/platform/ext/target/arm/mps2/an521/CMakeLists.txt b/platform/ext/target/arm/mps2/an521/CMakeLists.txt
index 851eed6..26820f0 100644
--- a/platform/ext/target/arm/mps2/an521/CMakeLists.txt
+++ b/platform/ext/target/arm/mps2/an521/CMakeLists.txt
@@ -100,7 +100,7 @@
native_drivers/arm_uart_drv.c
$<$<AND:$<NOT:$<BOOL:${TEST_NS_SLIH_IRQ}>>,$<NOT:$<BOOL:${TEST_NS_FLIH_IRQ}>>>:${CMAKE_CURRENT_SOURCE_DIR}/native_drivers/timer_cmsdk/timer_cmsdk.c>
${CMAKE_SOURCE_DIR}/platform/ext/common/tfm_hal_isolation_mpu_v8m.c
- $<$<BOOL:${TFM_TEST}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+ $<$<OR:$<BOOL:${TFM_S_REG_TEST}>,$<BOOL:${TFM_NS_REG_TEST}>>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
$<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
)
diff --git a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
index e47bc35..8d80833 100644
--- a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
@@ -116,7 +116,7 @@
Native_Driver/uart_pl011_drv.c
$<$<NOT:$<BOOL:${TEST_NS_SLIH_IRQ}>>:${CMAKE_CURRENT_SOURCE_DIR}/Native_Driver/timer_cmsdk_drv.c>
${CMAKE_SOURCE_DIR}/platform/ext/common/tfm_hal_isolation_mpu_v8m.c
- $<$<BOOL:${TFM_TEST}>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
+ $<$<OR:$<BOOL:${TFM_S_REG_TEST}>,$<BOOL:${TFM_NS_REG_TEST}>>:${CMAKE_CURRENT_SOURCE_DIR}/plat_test.c>
$<$<BOOL:${TFM_PARTITION_PLATFORM}>:${CMAKE_CURRENT_SOURCE_DIR}/services/src/tfm_platform_system.c>
$<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox/platform_multicore.c>
$<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox/platform_ns_mailbox.c>
diff --git a/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt b/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
index bbbdc53..f7b7767 100644
--- a/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
+++ b/platform/ext/target/stm/common/stm32l5xx/CMakeLists.txt
@@ -19,7 +19,7 @@
target_compile_definitions(platform_region_defs
INTERFACE
- $<$<BOOL:${TFM_TEST}>:FLASH_LAYOUT_FOR_TEST>
+ $<$<OR:$<BOOL:${TFM_NS_REG_TEST}>,$<BOOL:${TFM_S_REG_TEST}>>:FLASH_LAYOUT_FOR_TEST>
)
#========================= Platform common defs ===============================#
@@ -219,7 +219,7 @@
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
DESTINATION ${CMAKE_BINARY_DIR} )
-if (${TFM_TEST})
+if (TFM_S_REG_TEST OR TFM_NS_REG_TEST)
#the define FLASH_LAYOUT_FOR_TEST
#increase SECURE and NON SECURE IMAGE and modify the content of low_level_device.c from BL2 (low_level_flash.c)
set(FLAGS_FOR_BL2_PREPROCESSING
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 574643c..6a2d01f 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -15,7 +15,7 @@
set(MANIFEST_LISTS ${CMAKE_CURRENT_BINARY_DIR}/${list_name})
-if (TFM_TEST)
+if (TFM_NS_REG_TEST OR TFM_S_REG_TEST)
list(APPEND TEMP_EXTRA_MANIFEST_LISTS ${TFM_TEST_PATH}/test_services/tfm_test_manifest_list.yaml)
endif()