Build: Generalize build steps for various toolchains

Various toolchains have different behaviours and requirements in CMake
implementation.
Generalize several steps in build sequence in NS build, to conceal
differences between various toolchains.

 - Accept TFM_TOOLCHAIN_FILE from command line as the existing build
   system does. TFM_TOOLCHAIN_FILE conceals different setup steps in
   toolchains.
 - Call tfm_toolchain_reload_compiler() after project() to support
   Armclang to setup compiler flags after project().
 - Code of some build steps is moved from TF-M NS build example to
   tests build. NS target names are hard-coded in those steps.
   Remove those code from TF-M to avoid coupling NS and S again.

Signed-off-by: David Hu <david.hu@arm.com>
Change-Id: I1a2964ffed83e45f3d0aafce7ac4f4e9b553f3a6
diff --git a/tests_psa_arch/CMakeLists.txt b/tests_psa_arch/CMakeLists.txt
index ee80fb4..28f429b 100644
--- a/tests_psa_arch/CMakeLists.txt
+++ b/tests_psa_arch/CMakeLists.txt
@@ -31,14 +31,15 @@
 
 #--- NSPE side project ---------------------------------------------------------
 
-if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
-    set(CROSS_COMPILE         arm-none-eabi)
-    set(CMAKE_TOOLCHAIN_FILE  ${CONFIG_SPE_PATH}/cmake/toolchain_ns_GNUARM.cmake)
+if (NOT DEFINED TFM_TOOLCHAIN_FILE)
+    set(TFM_TOOLCHAIN_FILE    ${CONFIG_SPE_PATH}/cmake/toolchain_ns_GNUARM.cmake)
 endif()
 
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake)
 
+include(${TFM_TOOLCHAIN_FILE})
 project("TF-M PSA Arch tests" LANGUAGES C)
+tfm_toolchain_reload_compiler()
 
 add_executable(tfm_ns)
 
@@ -83,3 +84,5 @@
     PRIVATE
         $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/tfm_ns.map>
 )
+
+add_convert_to_bin_target(tfm_ns)