toolchain: Remove toolchain reset magic

Removed compiler/linker reset magic for IAR and Armclang.
It is not necessary in the split build.

Signed-off-by: Dávid Házi <david.hazi@arm.com>
Change-Id: I03cc11595764c6219ab9cd684d512bff3bd985d2
diff --git a/toolchain_ARMCLANG.cmake b/toolchain_ARMCLANG.cmake
index 964b032..3e632da 100644
--- a/toolchain_ARMCLANG.cmake
+++ b/toolchain_ARMCLANG.cmake
@@ -23,35 +23,137 @@
 # with the Ninja generator.
 set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_LIST_DIR}/cmake/set_extensions.cmake)
 
+# CMAKE_C_COMPILER_VERSION is not guaranteed to be defined.
+EXECUTE_PROCESS( COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE ARMCLANG_VERSION )
+string(REGEX MATCH "([0-9]+\.[0-9]+)" ARMCLANG_VERSION "${ARMCLANG_VERSION}")
+set(ARMCLANG_VERSION ${CMAKE_MATCH_1})
+
 if(NOT DEFINED CMAKE_OBJCOPY)
     set(CMAKE_OBJCOPY ${CROSS_COMPILE}-objcopy CACHE FILEPATH "Path to objcopy")
 endif()
 
-macro(tfm_toolchain_reset_compiler_flags)
-    set_property(DIRECTORY PROPERTY COMPILE_OPTIONS "")
+if (DEFINED TFM_SYSTEM_PROCESSOR)
+    set(CMAKE_SYSTEM_PROCESSOR       ${TFM_SYSTEM_PROCESSOR})
 
-    add_compile_options(
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-ignored-optimization-argument>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-unused-command-line-argument>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wall>
-        # Don't error when the MBEDTLS_NULL_ENTROPY warning is shown
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-error=cpp>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-c>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fdata-sections>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-ffunction-sections>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fno-builtin>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fshort-enums>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fshort-wchar>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-funsigned-char>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-masm=auto>
-        $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-nostdlib>
-        $<$<COMPILE_LANGUAGE:C>:-std=c99>
-        $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>
-        $<$<COMPILE_LANGUAGE:ASM>:--cpu=${CMAKE_ASM_CPU_FLAG}>
-        $<$<AND:$<COMPILE_LANGUAGE:C>,$<BOOL:${TFM_DEBUG_SYMBOLS}>>:-g>
-        $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<BOOL:${TFM_DEBUG_SYMBOLS}>>:-g>
-    )
-endmacro()
+    if (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
+        message(WARNING "MVE is not yet supported using ARMCLANG")
+        string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve")
+    endif()
+
+    if (DEFINED TFM_SYSTEM_DSP)
+        if(NOT TFM_SYSTEM_DSP)
+            string(APPEND CMAKE_SYSTEM_PROCESSOR "+nodsp")
+        endif()
+    endif()
+
+    # ARMCLANG specifies that '+nofp' is available on following M-profile cpus:
+    # 'cortex-m4', 'cortex-m7', 'cortex-m33', 'cortex-m35p', 'cortex-m55' and 'cortex-m85'.
+    # Build fails if other M-profile cpu, such as 'cortex-m23', is added with '+nofp'.
+    # Explicitly list those cpu to align with ARMCLANG description.
+    if (NOT CONFIG_TFM_FLOAT_ABI STREQUAL "hard" 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"
+        OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85"))
+            string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
+    endif()
+
+    string(REGEX REPLACE "\\+nodsp" ".no_dsp" CMAKE_ASM_CPU_FLAG "${CMAKE_SYSTEM_PROCESSOR}")
+    string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
+    string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
+else()
+    set(CMAKE_ASM_CPU_FLAG  ${TFM_SYSTEM_ARCHITECTURE})
+
+    # Armasm uses different syntax than armclang for architecture targets
+    string(REGEX REPLACE "\\armv" "" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
+    string(REGEX REPLACE "\\armv" "" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
+
+    # Modifiers are additive instead of subtractive (.fp Vs .no_fp)
+    if (TFM_SYSTEM_DSP)
+        string(APPEND CMAKE_ASM_CPU_FLAG ".dsp")
+    endif()
+
+    if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+        string(APPEND CMAKE_ASM_CPU_FLAG ".fp")
+    endif()
+endif()
+
+# CMAKE_SYSTEM_ARCH is an ARMCLANG CMAKE internal variable, used to set
+# compile and linker flags up until CMake 3.21 where CMP0123 was introduced:
+# https://cmake.org/cmake/help/latest/policy/CMP0123.html
+# Another use of this variable is to statisfy a requirement for ARMCLANG to
+# set either the target CPU or the Architecture. This variable needs to be
+# set to allow targeting architectures without a specific CPU.
+set(CMAKE_SYSTEM_ARCH            ${TFM_SYSTEM_ARCHITECTURE})
+
+set(CMAKE_C_COMPILER_TARGET      arm-${CROSS_COMPILE})
+set(CMAKE_CXX_COMPILER_TARGET    arm-${CROSS_COMPILE})
+set(CMAKE_ASM_COMPILER_TARGET    arm-${CROSS_COMPILE})
+
+# MVE is currently not supported in case of armclang
+if (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
+    string(APPEND CMAKE_SYSTEM_ARCH "+nomve")
+endif()
+
+if (DEFINED TFM_SYSTEM_DSP)
+    if(NOT TFM_SYSTEM_DSP)
+        string(APPEND CMAKE_SYSTEM_ARCH "+nodsp")
+    endif()
+endif()
+
+# Cmake's ARMClang support has several issues with compiler validation. To
+# avoid these, we set the list of supported -mcpu and -march variables to
+# the ones we intend to use so that the validation will never fail.
+include(Compiler/ARMClang)
+set(CMAKE_C_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
+set(CMAKE_C_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
+set(CMAKE_CXX_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
+set(CMAKE_CXX_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
+set(CMAKE_ASM_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
+set(CMAKE_ASM_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
+
+add_compile_options(
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-ignored-optimization-argument>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-unused-command-line-argument>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wall>
+    # Don't error when the MBEDTLS_NULL_ENTROPY warning is shown
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-error=cpp>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-c>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fdata-sections>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-ffunction-sections>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fno-builtin>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fshort-enums>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fshort-wchar>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-funsigned-char>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-masm=auto>
+    $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-nostdlib>
+    $<$<COMPILE_LANGUAGE:C>:-std=c99>
+    $<$<COMPILE_LANGUAGE:CXX>:-std=c++11>
+    $<$<COMPILE_LANGUAGE:ASM>:--cpu=${CMAKE_ASM_CPU_FLAG}>
+    $<$<AND:$<COMPILE_LANGUAGE:C>,$<BOOL:${TFM_DEBUG_SYMBOLS}>>:-g>
+    $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<BOOL:${TFM_DEBUG_SYMBOLS}>>:-g>
+)
+
+add_link_options(
+    ${MEMORY_USAGE_FLAG}
+    --strict
+    --symbols
+    --xref
+    $<$<AND:$<VERSION_GREATER:${TFM_ISOLATION_LEVEL},1>,$<STREQUAL:"${TEST_PSA_API}","IPC">>:--no-merge>
+    # Suppress link warnings that are consistant (and therefore hopefully
+    # harmless)
+    # https://developer.arm.com/documentation/100074/0608/linker-errors-and-warnings/list-of-the-armlink-error-and-warning-messages
+    # Empty region description
+    --diag_suppress=6312
+    # Ns section matches pattern
+    --diag_suppress=6314
+    # Duplicate input files
+    --diag_suppress=6304
+    # Pattern only matches removed unused sections.
+    --diag_suppress=6329
+)
 
 if(CONFIG_TFM_MEMORY_USAGE_QUIET)
     set(MEMORY_USAGE_FLAG "")
@@ -59,256 +161,120 @@
     set(MEMORY_USAGE_FLAG --info=summarysizes,sizes,totals,unused,veneers)
 endif()
 
-macro(tfm_toolchain_reset_linker_flags)
-    set_property(DIRECTORY PROPERTY LINK_OPTIONS "")
+if (ARMCLANG_VERSION VERSION_LESS 6.13)
+    message(FATAL_ERROR "Please select newer Arm compiler version starting from 6.13.")
+endif()
 
-    add_link_options(
-        ${MEMORY_USAGE_FLAG}
-        --strict
-        --symbols
-        --xref
-        $<$<AND:$<VERSION_GREATER:${TFM_ISOLATION_LEVEL},1>,$<STREQUAL:"${TEST_PSA_API}","IPC">>:--no-merge>
-        # Suppress link warnings that are consistant (and therefore hopefully
-        # harmless)
-        # https://developer.arm.com/documentation/100074/0608/linker-errors-and-warnings/list-of-the-armlink-error-and-warning-messages
-        # Empty region description
-        --diag_suppress=6312
-        # Ns section matches pattern
-        --diag_suppress=6314
-        # Duplicate input files
-        --diag_suppress=6304
-        # Pattern only matches removed unused sections.
-        --diag_suppress=6329
+if (ARMCLANG_VERSION VERSION_GREATER_EQUAL 6.15 AND
+    ARMCLANG_VERSION VERSION_LESS 6.18)
+    message(FATAL_ERROR "Armclang 6.15~6.17 may cause MemManage fault."
+                        " This defect has been fixed since Armclang 6.18."
+                        " See [SDCOMP-59788] in Armclang 6.18 release note for details."
+                        " Please use other Armclang versions instead.")
+endif()
+
+if (CMAKE_SYSTEM_PROCESSOR)
+    set(CMAKE_C_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_CXX_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_C_LINK_FLAGS   "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_CXX_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
+    set(CMAKE_ASM_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
+    # But armlink doesn't support this +dsp syntax
+    string(REGEX REPLACE "\\+nodsp" "" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nodsp" "" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nodsp" "" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
+    # And uses different syntax for +nofp
+    string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
+
+    string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
+    string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
+else()
+    set(CMAKE_C_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
+    set(CMAKE_CXX_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
+endif()
+
+set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
+
+set(BL2_COMPILER_CP_FLAG
+    $<$<COMPILE_LANGUAGE:C>:-mfpu=softvfp>
+    $<$<COMPILE_LANGUAGE:ASM>:--fpu=softvfp>
+)
+# As BL2 does not use hardware FPU, specify '--fpu=SoftVFP' explicitly to use software
+# library functions for BL2 to override any implicit FPU option, such as '--cpu' option.
+# Because the implicit hardware FPU option enforces BL2 to initialize FPU but hardware FPU
+# is not actually enabled in BL2, it will cause BL2 runtime fault.
+set(BL2_LINKER_CP_OPTION --fpu=SoftVFP)
+
+set(BL1_COMPILER_CP_FLAG
+    $<$<COMPILE_LANGUAGE:C>:-mfpu=softvfp>
+    $<$<COMPILE_LANGUAGE:ASM>:--fpu=softvfp>
+)
+set(BL1_LINKER_CP_OPTION --fpu=SoftVFP)
+
+if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+    set(COMPILER_CP_FLAG
+        $<$<COMPILE_LANGUAGE:C>:-mfloat-abi=hard>
     )
-endmacro()
-
-macro(tfm_toolchain_set_processor_arch)
-    if (DEFINED TFM_SYSTEM_PROCESSOR)
-        set(CMAKE_SYSTEM_PROCESSOR       ${TFM_SYSTEM_PROCESSOR})
-
-        if (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
-            message(WARNING "MVE is not yet supported using ARMCLANG")
-            string(APPEND CMAKE_SYSTEM_PROCESSOR "+nomve")
-        endif()
-
-        if (DEFINED TFM_SYSTEM_DSP)
-            if(NOT TFM_SYSTEM_DSP)
-                string(APPEND CMAKE_SYSTEM_PROCESSOR "+nodsp")
-            endif()
-        endif()
-
-        # ARMCLANG specifies that '+nofp' is available on following M-profile cpus:
-        # 'cortex-m4', 'cortex-m7', 'cortex-m33', 'cortex-m35p', 'cortex-m55' and 'cortex-m85'.
-        # Build fails if other M-profile cpu, such as 'cortex-m23', is added with '+nofp'.
-        # Explicitly list those cpu to align with ARMCLANG description.
-        if (NOT CONFIG_TFM_FLOAT_ABI STREQUAL "hard" 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"
-            OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85"))
-                string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
-        endif()
-
-        string(REGEX REPLACE "\\+nodsp" ".no_dsp" CMAKE_ASM_CPU_FLAG "${CMAKE_SYSTEM_PROCESSOR}")
-        string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
-        string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
-    else()
-        set(CMAKE_ASM_CPU_FLAG  ${TFM_SYSTEM_ARCHITECTURE})
-
-        # Armasm uses different syntax than armclang for architecture targets
-        string(REGEX REPLACE "\\armv" "" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
-        string(REGEX REPLACE "\\armv" "" CMAKE_ASM_CPU_FLAG "${CMAKE_ASM_CPU_FLAG}")
-
-        # Modifiers are additive instead of subtractive (.fp Vs .no_fp)
-        if (TFM_SYSTEM_DSP)
-            string(APPEND CMAKE_ASM_CPU_FLAG ".dsp")
-        endif()
-
-        if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
-            string(APPEND CMAKE_ASM_CPU_FLAG ".fp")
-        endif()
+    if (CONFIG_TFM_ENABLE_FP)
+        set(COMPILER_CP_FLAG
+            $<$<COMPILE_LANGUAGE:C>:-mfpu=${CONFIG_TFM_FP_ARCH};-mfloat-abi=hard>
+            $<$<COMPILE_LANGUAGE:ASM>:--fpu=${CONFIG_TFM_FP_ARCH_ASM}>
+        )
+        # armasm and armlink have the same option "--fpu" and are both used to
+        # specify the target FPU architecture. So the supported FPU architecture
+        # names can be shared by armasm and armlink.
+        set(LINKER_CP_OPTION --fpu=${CONFIG_TFM_FP_ARCH_ASM})
     endif()
-
-    # CMAKE_SYSTEM_ARCH is an ARMCLANG CMAKE internal variable, used to set
-    # compile and linker flags up until CMake 3.21 where CMP0123 was introduced:
-    # https://cmake.org/cmake/help/latest/policy/CMP0123.html
-    # This behavior is overwritten by setting CMAKE_C_FLAGS in
-    # tfm_toolchain_reload_compiler.
-    # Another use of this variable is to statisfy a requirement for ARMCLANG to
-    # set either the target CPU or the Architecture. This variable needs to be
-    # set to allow targeting architectures without a specific CPU.
-    set(CMAKE_SYSTEM_ARCH            ${TFM_SYSTEM_ARCHITECTURE})
-
-    set(CMAKE_C_COMPILER_TARGET      arm-${CROSS_COMPILE})
-    set(CMAKE_CXX_COMPILER_TARGET    arm-${CROSS_COMPILE})
-    set(CMAKE_ASM_COMPILER_TARGET    arm-${CROSS_COMPILE})
-
-    # MVE is currently not supported in case of armclang
-    if (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main")
-        string(APPEND CMAKE_SYSTEM_ARCH "+nomve")
-    endif()
-
-    if (DEFINED TFM_SYSTEM_DSP)
-        if(NOT TFM_SYSTEM_DSP)
-            string(APPEND CMAKE_SYSTEM_ARCH "+nodsp")
-        endif()
-    endif()
-
-    # Cmake's ARMClang support has several issues with compiler validation. To
-    # avoid these, we set the list of supported -mcpu and -march variables to
-    # the ones we intend to use so that the validation will never fail.
-    include(Compiler/ARMClang)
-    set(CMAKE_C_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
-    set(CMAKE_C_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
-    set(CMAKE_CXX_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
-    set(CMAKE_CXX_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
-    set(CMAKE_ASM_COMPILER_PROCESSOR_LIST ${CMAKE_SYSTEM_PROCESSOR})
-    set(CMAKE_ASM_COMPILER_ARCH_LIST ${CMAKE_SYSTEM_ARCH})
-endmacro()
-
-macro(tfm_toolchain_reload_compiler)
-    tfm_toolchain_set_processor_arch()
-    tfm_toolchain_reset_compiler_flags()
-    tfm_toolchain_reset_linker_flags()
-
-    unset(CMAKE_C_FLAGS_INIT)
-    unset(CMAKE_CXX_FLAGS_INIT)
-    unset(CMAKE_C_LINK_FLAGS)
-    unset(CMAKE_ASM_FLAGS_INIT)
-    unset(CMAKE_ASM_LINK_FLAGS)
-    unset(__mcpu_flag_set)
-    unset(__march_flag_set)
-
-    include(Compiler/ARMClang)
-    __compiler_armclang(C)
-    include(Compiler/ARMCC-ASM)
-    __compiler_armcc(ASM)
-
-    if (CMAKE_C_COMPILER_VERSION VERSION_LESS 6.13)
-        message(FATAL_ERROR "Please select newer Arm compiler version starting from 6.13.")
-    endif()
-
-    if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.15 AND
-        CMAKE_C_COMPILER_VERSION VERSION_LESS 6.18)
-        message(FATAL_ERROR "Armclang 6.15~6.17 may cause MemManage fault."
-                            " This defect has been fixed since Armclang 6.18."
-                            " See [SDCOMP-59788] in Armclang 6.18 release note for details."
-                            " Please use other Armclang versions instead.")
-    endif()
-
-    set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
-
-    if (DEFINED TFM_SYSTEM_PROCESSOR)
-        set(CMAKE_C_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_CXX_FLAGS "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_C_LINK_FLAGS   "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_CXX_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
-        set(CMAKE_ASM_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}")
-        # But armlink doesn't support this +dsp syntax
-        string(REGEX REPLACE "\\+nodsp" "" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nodsp" "" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nodsp" "" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
-        # And uses different syntax for +nofp
-        string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nofp" ".no_fp" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
-
-        string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_C_LINK_FLAGS   "${CMAKE_C_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
-        string(REGEX REPLACE "\\+nomve" ".no_mve" CMAKE_ASM_LINK_FLAGS "${CMAKE_ASM_LINK_FLAGS}")
-    else()
-        set(CMAKE_C_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
-        set(CMAKE_CXX_FLAGS "-march=${CMAKE_SYSTEM_ARCH}")
-    endif()
-
-    set(BL2_COMPILER_CP_FLAG
+else()
+    set(COMPILER_CP_FLAG
         $<$<COMPILE_LANGUAGE:C>:-mfpu=softvfp>
         $<$<COMPILE_LANGUAGE:ASM>:--fpu=softvfp>
     )
-    # As BL2 does not use hardware FPU, specify '--fpu=SoftVFP' explicitly to use software
-    # library functions for BL2 to override any implicit FPU option, such as '--cpu' option.
-    # Because the implicit hardware FPU option enforces BL2 to initialize FPU but hardware FPU
-    # is not actually enabled in BL2, it will cause BL2 runtime fault.
-    set(BL2_LINKER_CP_OPTION --fpu=SoftVFP)
+    set(LINKER_CP_OPTION --fpu=SoftVFP)
+endif()
 
-    set(BL1_COMPILER_CP_FLAG
-        $<$<COMPILE_LANGUAGE:C>:-mfpu=softvfp>
-        $<$<COMPILE_LANGUAGE:ASM>:--fpu=softvfp>
-    )
-    set(BL1_LINKER_CP_OPTION --fpu=SoftVFP)
+# Workaround for issues with --depend-single-line with armasm and Ninja
+if (CMAKE_GENERATOR STREQUAL "Ninja")
+    set( CMAKE_DEPFILE_FLAGS_ASM "--depend=<OBJECT>.d")
+endif()
 
-    if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
-        set(COMPILER_CP_FLAG
-            $<$<COMPILE_LANGUAGE:C>:-mfloat-abi=hard>
-        )
-        if (CONFIG_TFM_ENABLE_FP)
-            set(COMPILER_CP_FLAG
-                $<$<COMPILE_LANGUAGE:C>:-mfpu=${CONFIG_TFM_FP_ARCH};-mfloat-abi=hard>
-                $<$<COMPILE_LANGUAGE:ASM>:--fpu=${CONFIG_TFM_FP_ARCH_ASM}>
-            )
-            # armasm and armlink have the same option "--fpu" and are both used to
-            # specify the target FPU architecture. So the supported FPU architecture
-            # names can be shared by armasm and armlink.
-            set(LINKER_CP_OPTION --fpu=${CONFIG_TFM_FP_ARCH_ASM})
-        endif()
+set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG")
+
+#
+# Pointer Authentication Code and Branch Target Identification (PACBTI) Options
+#
+if (${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_NONE)
+    set(BRANCH_PROTECTION_OPTIONS "none")
+elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_STANDARD)
+    set(BRANCH_PROTECTION_OPTIONS "standard")
+elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_PACRET)
+    set(BRANCH_PROTECTION_OPTIONS "pac-ret")
+elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_PACRET_LEAF)
+    set(BRANCH_PROTECTION_OPTIONS "pac-ret+leaf")
+elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_BTI)
+    set(BRANCH_PROTECTION_OPTIONS "bti")
+endif()
+
+if(NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_DISABLED)
+    if(ARMCLANG_VERSION VERSION_LESS 6.18)
+        message(FATAL_ERROR "Your compiler does not support BRANCH_PROTECTION")
     else()
-        set(COMPILER_CP_FLAG
-            $<$<COMPILE_LANGUAGE:C>:-mfpu=softvfp>
-            $<$<COMPILE_LANGUAGE:ASM>:--fpu=softvfp>
-        )
-        set(LINKER_CP_OPTION --fpu=SoftVFP)
-    endif()
+        if((TFM_SYSTEM_PROCESSOR MATCHES "cortex-m85") AND
+            (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main"))
+            message(NOTICE "BRANCH_PROTECTION enabled with: ${BRANCH_PROTECTION_OPTIONS}")
 
-    # Workaround for issues with --depend-single-line with armasm and Ninja
-    if (CMAKE_GENERATOR STREQUAL "Ninja")
-        set( CMAKE_DEPFILE_FLAGS_ASM "--depend=<OBJECT>.d")
-    endif()
+            string(APPEND CMAKE_C_FLAGS " -mbranch-protection=${BRANCH_PROTECTION_OPTIONS}")
+            string(APPEND CMAKE_CXX_FLAGS " -mbranch-protection=${BRANCH_PROTECTION_OPTIONS}")
 
-    set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG")
-
-    #
-    # Pointer Authentication Code and Branch Target Identification (PACBTI) Options
-    #
-    if (${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_NONE)
-        set(BRANCH_PROTECTION_OPTIONS "none")
-    elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_STANDARD)
-        set(BRANCH_PROTECTION_OPTIONS "standard")
-    elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_PACRET)
-        set(BRANCH_PROTECTION_OPTIONS "pac-ret")
-    elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_PACRET_LEAF)
-        set(BRANCH_PROTECTION_OPTIONS "pac-ret+leaf")
-    elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_BTI)
-        set(BRANCH_PROTECTION_OPTIONS "bti")
-    endif()
-
-    if(NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_DISABLED)
-        if(CMAKE_C_COMPILER_VERSION VERSION_LESS 6.18)
-            message(FATAL_ERROR "Your compiler does not support BRANCH_PROTECTION")
+            add_link_options(--library_security=pacbti-m)
         else()
-            if((TFM_SYSTEM_PROCESSOR MATCHES "cortex-m85") AND
-                (TFM_SYSTEM_ARCHITECTURE STREQUAL "armv8.1-m.main"))
-                message(NOTICE "BRANCH_PROTECTION enabled with: ${BRANCH_PROTECTION_OPTIONS}")
-
-                string(APPEND CMAKE_C_FLAGS " -mbranch-protection=${BRANCH_PROTECTION_OPTIONS}")
-                string(APPEND CMAKE_CXX_FLAGS " -mbranch-protection=${BRANCH_PROTECTION_OPTIONS}")
-
-                add_link_options(--library_security=pacbti-m)
-            else()
-                message(FATAL_ERROR "Your architecture does not support BRANCH_PROTECTION")
-            endif()
+            message(FATAL_ERROR "Your architecture does not support BRANCH_PROTECTION")
         endif()
     endif()
-
-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_set_processor_arch()
-tfm_toolchain_reset_compiler_flags()
-tfm_toolchain_reset_linker_flags()
+endif()
 
 # Behaviour for handling scatter files is so wildly divergent between compilers
 # that this macro is required.