Build: Remove toolchain reset mechanism

The preload.cmake and compiler/linker reset magic is not necessary in
the split build. Building S and NS sides seprartely allows setting
configuration for setting CPU and Arch explicitly.

The changes applied for an521 platforms. Builds for regression tests.

Signed-off-by: Anton Komlev <anton.komlev@arm.com>
Signed-off-by: Dávid Házi <david.hazi@arm.com>
Change-Id: I4a431eab8a3cb13af2267290805d396285f57385
diff --git a/toolchain_GNUARM.cmake b/toolchain_GNUARM.cmake
index 204f62f..a9417f6 100644
--- a/toolchain_GNUARM.cmake
+++ b/toolchain_GNUARM.cmake
@@ -29,205 +29,170 @@
 # with the Ninja generator.
 set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_LIST_DIR}/cmake/set_extensions.cmake)
 
-macro(tfm_toolchain_reset_compiler_flags)
-    set_property(DIRECTORY PROPERTY COMPILE_OPTIONS "")
+# Read platform settings for CPU, Arch and other important platform-specific
+# configuration options
+include(${CMAKE_SOURCE_DIR}/platform/ext/target/${TFM_PLATFORM}/config.cmake)
 
-    if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0.0)
-        add_compile_options(
-            # TO-DO: is this required anymore after split build?
-            -fmacro-prefix-map=${TFM_TEST_REPO_PATH}=TFM_TEST_REPO_PATH
-        )
+# ===================== SEt toolchain CPU and Arch =============================
+
+if (DEFINED TFM_SYSTEM_PROCESSOR)
+    if(TFM_SYSTEM_PROCESSOR MATCHES "cortex-m85")
+        # GNUARM does not support the -mcpu=cortex-m85 flag yet
+        # TODO: Remove this exception when the cortex-m85 support comes out.
+        message(WARNING "Cortex-m85 is not supported by GCC. Falling back to -march usage.")
+    else()
+        set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
+
+        if (DEFINED TFM_SYSTEM_DSP)
+            if (NOT TFM_SYSTEM_DSP)
+                string(APPEND CMAKE_SYSTEM_PROCESSOR "+nodsp")
+            endif()
+        endif()
+        # GCC specifies that '+nofp' is available on following M-profile cpus: 'cortex-m4',
+        # 'cortex-m7', 'cortex-m33', 'cortex-m35p' and 'cortex-m55'.
+        # Build fails if other M-profile cpu, such as 'cortex-m23', is added with '+nofp'.
+        # Explicitly list those cpu to align with GCC description.
+        if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
+            if(NOT CONFIG_TFM_ENABLE_FP AND
+                (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m4"
+                OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m7"
+                OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m33"
+                OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m35p"
+                OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55"))
+                    string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
+            endif()
+        endif()
+
+        if(TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
+            if(NOT CONFIG_TFM_ENABLE_MVE)
+                string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve")
+            endif()
+            if(NOT CONFIG_TFM_ENABLE_MVE_FP)
+                string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve.fp")
+            endif()
+        endif()
     endif()
 
-    add_compile_options(
-        -specs=nano.specs
-        -Wall
-        -Wno-format
-        -Wno-return-type
-        -Wno-unused-but-set-variable
-        -c
-        -fdata-sections
-        -ffunction-sections
-        -fno-builtin
-        -fshort-enums
-        -funsigned-char
-        -mthumb
-        -nostdlib
-        $<$<COMPILE_LANGUAGE:C>:-std=c99>
-        $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>
-        $<$<OR:$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<BOOL:${TFM_CODE_COVERAGE}>>:-g>
-    )
-endmacro()
-
-if(CONFIG_TFM_MEMORY_USAGE_QUIET)
-    set(MEMORY_USAGE_FLAG "")
-else()
-    set(MEMORY_USAGE_FLAG LINKER:--print-memory-usage)
 endif()
 
-macro(tfm_toolchain_reset_linker_flags)
-    set_property(DIRECTORY PROPERTY LINK_OPTIONS "")
+# CMAKE_SYSTEM_ARCH variable is not a built-in CMAKE variable. It is used to
+# set the compile and link flags when TFM_SYSTEM_PROCESSOR is not specified.
+# The variable name is choosen to align with the ARMCLANG toolchain file.
+set(CMAKE_SYSTEM_ARCH         ${TFM_SYSTEM_ARCHITECTURE})
 
-    add_link_options(
-        --entry=Reset_Handler
-        -specs=nano.specs
-        LINKER:-check-sections
-        LINKER:-fatal-warnings
-        LINKER:--gc-sections
-        LINKER:--no-wchar-size-warning
-        ${MEMORY_USAGE_FLAG}
-    )
-endmacro()
-
-macro(tfm_toolchain_set_processor_arch)
-    if (DEFINED TFM_SYSTEM_PROCESSOR)
-        if(TFM_SYSTEM_PROCESSOR MATCHES "cortex-m85")
-            # GNUARM does not support the -mcpu=cortex-m85 flag yet
-            # TODO: Remove this exception when the cortex-m85 support comes out.
-            message(WARNING "Cortex-m85 is not supported by GCC. Falling back to -march usage.")
-        else()
-            set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
-
-            if (DEFINED TFM_SYSTEM_DSP)
-                if (NOT TFM_SYSTEM_DSP)
-                    string(APPEND CMAKE_SYSTEM_PROCESSOR "+nodsp")
-                endif()
-            endif()
-            # GCC specifies that '+nofp' is available on following M-profile cpus: 'cortex-m4',
-            # 'cortex-m7', 'cortex-m33', 'cortex-m35p' and 'cortex-m55'.
-            # Build fails if other M-profile cpu, such as 'cortex-m23', is added with '+nofp'.
-            # Explicitly list those cpu to align with GCC description.
-            if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
-                if(NOT CONFIG_TFM_ENABLE_FP AND
-                   (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m4"
-                    OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m7"
-                    OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m33"
-                    OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m35p"
-                    OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55"))
-                        string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
-                endif()
-            endif()
-
-            if(TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
-                if(NOT CONFIG_TFM_ENABLE_MVE)
-                    string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve")
-                endif()
-                if(NOT CONFIG_TFM_ENABLE_MVE_FP)
-                    string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve.fp")
-                endif()
-            endif()
-        endif()
-
+if(TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
+    if(CONFIG_TFM_ENABLE_MVE)
+        string(APPEND CMAKE_SYSTEM_ARCH "+mve")
     endif()
-
-    # CMAKE_SYSTEM_ARCH variable is not a built-in CMAKE variable. It is used to
-    # set the compile and link flags when TFM_SYSTEM_PROCESSOR is not specified.
-    # The variable name is choosen to align with the ARMCLANG toolchain file.
-    set(CMAKE_SYSTEM_ARCH         ${TFM_SYSTEM_ARCHITECTURE})
-
-    if(TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
-        if(CONFIG_TFM_ENABLE_MVE)
-            string(APPEND CMAKE_SYSTEM_ARCH "+mve")
-        endif()
-        if(CONFIG_TFM_ENABLE_MVE_FP)
-            string(APPEND CMAKE_SYSTEM_ARCH "+mve.fp")
-        endif()
+    if(CONFIG_TFM_ENABLE_MVE_FP)
+        string(APPEND CMAKE_SYSTEM_ARCH "+mve.fp")
     endif()
+endif()
 
-    if (DEFINED TFM_SYSTEM_DSP)
-        # +nodsp modifier is only supported from GCC version 8.
-        if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
-            # armv8.1-m.main arch does not have +nodsp option
-            if ((NOT TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main") AND
-                NOT TFM_SYSTEM_DSP)
-                string(APPEND CMAKE_SYSTEM_ARCH "+nodsp")
-            endif()
-        endif()
-    endif()
-
+if (DEFINED TFM_SYSTEM_DSP)
+    # +nodsp modifier is only supported from GCC version 8.
     if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
-        if(CONFIG_TFM_ENABLE_FP)
-            string(APPEND CMAKE_SYSTEM_ARCH "+fp")
+        # armv8.1-m.main arch does not have +nodsp option
+        if ((NOT TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main") AND
+            NOT TFM_SYSTEM_DSP)
+            string(APPEND CMAKE_SYSTEM_ARCH "+nodsp")
         endif()
     endif()
+endif()
 
-endmacro()
-
-macro(tfm_toolchain_reload_compiler)
-    # CMAKE_C_COMPILER_VERSION is not guaranteed to be defined.
-    EXECUTE_PROCESS( COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION )
-
-    tfm_toolchain_set_processor_arch()
-    tfm_toolchain_reset_compiler_flags()
-    tfm_toolchain_reset_linker_flags()
-
-    if (GCC_VERSION VERSION_LESS 7.3.1)
-        message(FATAL_ERROR "Please use newer GNU Arm compiler version starting from 7.3.1.")
+if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
+    if(CONFIG_TFM_ENABLE_FP)
+        string(APPEND CMAKE_SYSTEM_ARCH "+fp")
     endif()
+endif()
 
-    if (GCC_VERSION VERSION_EQUAL 10.2.1)
-        message(FATAL_ERROR "GNU Arm compiler version 10-2020-q4-major has an issue in CMSE support."
-                            " Select other GNU Arm compiler versions instead."
-                            " See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99157 for the issue detail.")
+# CMAKE_C_COMPILER_VERSION is not guaranteed to be defined.
+EXECUTE_PROCESS( COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION )
+
+add_compile_options(
+    -specs=nano.specs
+    -Wall
+    -Wno-format
+    -Wno-return-type
+    -Wno-unused-but-set-variable
+    -c
+    -fdata-sections
+    -ffunction-sections
+    -fno-builtin
+    -fshort-enums
+    -funsigned-char
+    -mthumb
+    -nostdlib
+    $<$<COMPILE_LANGUAGE:C>:-std=c99>
+    $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>
+    $<$<OR:$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<BOOL:${TFM_CODE_COVERAGE}>>:-g>
+)
+
+add_link_options(
+    --entry=Reset_Handler
+    -specs=nano.specs
+    LINKER:-check-sections
+    LINKER:-fatal-warnings
+    LINKER:--gc-sections
+    LINKER:--no-wchar-size-warning
+)
+
+if(NOT CONFIG_TFM_MEMORY_USAGE_QUIET)
+    add_link_options(LINKER:--print-memory-usage)
+endif()
+
+if (GCC_VERSION VERSION_LESS 7.3.1)
+    message(FATAL_ERROR "Please use newer GNU Arm compiler version starting from 7.3.1.")
+endif()
+
+if (GCC_VERSION VERSION_EQUAL 10.2.1)
+    message(FATAL_ERROR "GNU Arm compiler version 10-2020-q4-major has an issue in CMSE support."
+                        " Select other GNU Arm compiler versions instead."
+                        " See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99157 for the issue detail.")
+endif()
+
+# GNU Arm compiler version greater equal than *11.3.Rel1*
+# has a linker issue that required system calls are missing,
+# such as _read and _write. Add stub functions of required
+# system calls to solve this issue.
+if (GCC_VERSION VERSION_GREATER_EQUAL 11.3.1)
+    set(CONFIG_GNU_SYSCALL_STUB_ENABLED TRUE)
+endif()
+
+if (CMAKE_SYSTEM_PROCESSOR)
+    set(CMAKE_C_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_CXX_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_ASM_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_C_LINK_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_ASM_LINK_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+else()
+    set(CMAKE_C_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
+    set(CMAKE_CXX_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
+    set(CMAKE_ASM_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
+    set(CMAKE_C_LINK_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
+    set(CMAKE_ASM_LINK_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
+endif()
+
+set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
+set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_INIT})
+set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
+
+set(BL2_COMPILER_CP_FLAG -mfloat-abi=soft)
+
+if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+    set(COMPILER_CP_FLAG -mfloat-abi=hard)
+    set(LINKER_CP_OPTION -mfloat-abi=hard)
+    if (CONFIG_TFM_ENABLE_FP OR CONFIG_TFM_ENABLE_MVE_FP)
+        set(COMPILER_CP_FLAG -mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH})
+        set(LINKER_CP_OPTION -mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH})
     endif()
+else()
+    set(COMPILER_CP_FLAG -mfloat-abi=soft)
+    set(LINKER_CP_OPTION -mfloat-abi=soft)
+endif()
 
-    # GNU Arm compiler version greater equal than *11.3.Rel1*
-    # has a linker issue that required system calls are missing,
-    # such as _read and _write. Add stub functions of required
-    # system calls to solve this issue.
-    if (GCC_VERSION VERSION_GREATER_EQUAL 11.3.1)
-        set(CONFIG_GNU_SYSCALL_STUB_ENABLED TRUE)
-    endif()
-
-    unset(CMAKE_C_FLAGS_INIT)
-    unset(CMAKE_CXX_FLAGS_INIT)
-    unset(CMAKE_ASM_FLAGS_INIT)
-
-    if (CMAKE_SYSTEM_PROCESSOR)
-        set(CMAKE_C_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_CXX_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_ASM_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_C_LINK_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_ASM_LINK_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-    else()
-        set(CMAKE_C_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
-        set(CMAKE_CXX_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
-        set(CMAKE_ASM_FLAGS_INIT "-march=${CMAKE_SYSTEM_ARCH}")
-        set(CMAKE_C_LINK_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
-        set(CMAKE_ASM_LINK_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
-    endif()
-
-    set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
-    set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_INIT})
-    set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
-
-    set(BL2_COMPILER_CP_FLAG -mfloat-abi=soft)
-
-    if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
-        set(COMPILER_CP_FLAG -mfloat-abi=hard)
-        set(LINKER_CP_OPTION -mfloat-abi=hard)
-        if (CONFIG_TFM_ENABLE_FP OR CONFIG_TFM_ENABLE_MVE_FP)
-            set(COMPILER_CP_FLAG -mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH})
-            set(LINKER_CP_OPTION -mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH})
-        endif()
-    else()
-        set(COMPILER_CP_FLAG -mfloat-abi=soft)
-        set(LINKER_CP_OPTION -mfloat-abi=soft)
-    endif()
-
-    # For GNU Arm Embedded Toolchain doesn't emit __ARM_ARCH_8_1M_MAIN__, adding this macro manually.
-    add_compile_definitions($<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__>)
-
-    # CMAKE_BUILD_TYPE=MinSizeRel default parameter is -Os.
-    # In ARMCLANG we redefined this variable to use -Oz level, but GCC still using -Os!
-    # GCC 11 not supports -Oz level, version 12 will.
-    # When this option will be available in GNUARM, set -Oz flag for both toolchains.
-endmacro()
-
-# Configure environment for the compiler setup run by cmake at the first
-# `project` call in <tfm_root>/CMakeLists.txt. After this mandatory setup is
-# done, all further compiler setup is done via tfm_toolchain_reload_compiler()
-tfm_toolchain_reload_compiler()
+# For GNU Arm Embedded Toolchain doesn't emit __ARM_ARCH_8_1M_MAIN__, adding this macro manually.
+add_compile_definitions($<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__>)
 
 macro(target_add_scatter_file target)
     target_link_options(${target}