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: I2c047fbd167819ab7c1798ac25ded66b92824ec7
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 59d1ca0..4107548 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
#-------------------------------------------------------------------------------
-# Copyright (c) 2020-2023, Arm Limited. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited. All rights reserved.
# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
#
@@ -38,7 +38,6 @@
set(CMAKE_CXX_COMPILER_FORCED true)
project("Trusted Firmware M" VERSION ${TFM_VERSION} LANGUAGES C CXX ASM)
-tfm_toolchain_reload_compiler()
add_subdirectory(lib/backtrace)
add_subdirectory(lib/ext)
diff --git a/platform/ns/toolchain_ns_ARMCLANG.cmake b/platform/ns/toolchain_ns_ARMCLANG.cmake
index 403a781..e7abfd3 100644
--- a/platform/ns/toolchain_ns_ARMCLANG.cmake
+++ b/platform/ns/toolchain_ns_ARMCLANG.cmake
@@ -1,5 +1,5 @@
#-------------------------------------------------------------------------------
-# Copyright (c) 2023, Arm Limited. All rights reserved.
+# Copyright (c) 2023-2024, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
@@ -25,6 +25,11 @@
# with the Ninja generator.
set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_LIST_DIR}/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()
@@ -32,237 +37,200 @@
# Set compiler ID explicitly as it's not detected at this moment
set(CMAKE_C_COMPILER_ID ARMClang)
-macro(tfm_toolchain_reset_compiler_flags)
- set_property(DIRECTORY PROPERTY COMPILE_OPTIONS "")
-
- 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()
-
set(MEMORY_USAGE_FLAG --info=summarysizes,sizes,totals,unused,veneers)
-macro(tfm_toolchain_reset_linker_flags)
- set_property(DIRECTORY PROPERTY LINK_OPTIONS "")
+if (DEFINED TFM_SYSTEM_PROCESSOR)
+ set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
- 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
- )
-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()
- 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")
+ 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_ARCH "+nodsp")
+ string(APPEND CMAKE_SYSTEM_PROCESSOR "+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.")
+ # 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()
- 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.")
+ 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()
- 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()
-
- # This flag is used to check if toolchain has fixed VLLDM vulnerability
- # Check command will fail if C flags consist of keyword other than cpu/arch type.
- set(CP_CHECK_C_FLAGS ${CMAKE_C_FLAGS})
-
if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
- set(COMPILER_CP_C_FLAG "-mfloat-abi=hard")
- if (CONFIG_TFM_ENABLE_FP)
- set(COMPILER_CP_C_FLAG "-mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH}")
- set(COMPILER_CP_ASM_FLAG "--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()
- else()
- set(COMPILER_CP_C_FLAG "-mfpu=softvfp")
- set(COMPILER_CP_ASM_FLAG "--fpu=softvfp")
- set(LINKER_CP_OPTION "--fpu=SoftVFP")
+ string(APPEND CMAKE_ASM_CPU_FLAG ".fp")
endif()
+endif()
- string(APPEND CMAKE_C_FLAGS " " ${COMPILER_CP_C_FLAG})
- string(APPEND CMAKE_ASM_FLAGS " " ${COMPILER_CP_ASM_FLAG})
- string(APPEND CMAKE_C_LINK_FLAGS " " ${LINKER_CP_OPTION})
- string(APPEND CMAKE_ASM_LINK_FLAGS " " ${LINKER_CP_OPTION})
+# 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})
- # Workaround for issues with --depend-single-line with armasm and Ninja
- if (CMAKE_GENERATOR STREQUAL "Ninja")
- set( CMAKE_DEPFILE_FLAGS_ASM "--depend=<OBJECT>.d")
+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()
- set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG")
-endmacro()
+# 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})
-# 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()
+if (ARMCLANG_VERSION VERSION_LESS 6.13)
+ message(FATAL_ERROR "Please select newer Arm compiler version starting from 6.13.")
+endif()
+
+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})
+
+# This flag is used to check if toolchain has fixed VLLDM vulnerability
+# Check command will fail if C flags consist of keyword other than cpu/arch type.
+set(CP_CHECK_C_FLAGS ${CMAKE_C_FLAGS})
+
+if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+ set(COMPILER_CP_C_FLAG "-mfloat-abi=hard")
+ if (CONFIG_TFM_ENABLE_FP)
+ set(COMPILER_CP_C_FLAG "-mfloat-abi=hard -mfpu=${CONFIG_TFM_FP_ARCH}")
+ set(COMPILER_CP_ASM_FLAG "--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()
+else()
+ set(COMPILER_CP_C_FLAG "-mfpu=softvfp")
+ set(COMPILER_CP_ASM_FLAG "--fpu=softvfp")
+ set(LINKER_CP_OPTION "--fpu=SoftVFP")
+endif()
+
+string(APPEND CMAKE_C_FLAGS " " ${COMPILER_CP_C_FLAG})
+string(APPEND CMAKE_ASM_FLAGS " " ${COMPILER_CP_ASM_FLAG})
+string(APPEND CMAKE_C_LINK_FLAGS " " ${LINKER_CP_OPTION})
+string(APPEND CMAKE_ASM_LINK_FLAGS " " ${LINKER_CP_OPTION})
+
+# 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()
+
+set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG")
+
+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
+)
macro(add_convert_to_bin_target target)
get_target_property(bin_dir ${target} RUNTIME_OUTPUT_DIRECTORY)
diff --git a/platform/ns/toolchain_ns_GNUARM.cmake b/platform/ns/toolchain_ns_GNUARM.cmake
index ea7c8c6..b90b8ca 100644
--- a/platform/ns/toolchain_ns_GNUARM.cmake
+++ b/platform/ns/toolchain_ns_GNUARM.cmake
@@ -55,7 +55,7 @@
endif()
endif()
# GCC specifies that '+nofp' is available on following M-profile cpus: 'cortex-m4',
- # 'cortex-m7', 'cortex-m33', 'cortex-m35p' and 'cortex-m55'.
+ # '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 GCC description.
if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
@@ -64,7 +64,8 @@
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-m55"
+ OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85"))
string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
endif()
endif()
@@ -126,8 +127,13 @@
# 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.
+#
+# READONLY linker script attribute is not supported in older
+# GNU Arm compilers. For these version the preprocessor will
+# remove the READONLY string from the linker scripts.
if (GCC_VERSION VERSION_GREATER_EQUAL 11.3.1)
set(CONFIG_GNU_SYSCALL_STUB_ENABLED TRUE)
+ set(CONFIG_GNU_LINKER_READONLY_ATTRIBUTE TRUE)
endif()
if (CMAKE_SYSTEM_PROCESSOR)
@@ -168,19 +174,6 @@
# 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__=1>)
-# 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.
-#
-# READONLY linker script attribute is not supported in older
-# GNU Arm compilers. For these version the preprocessor will
-# remove the READONLY string from the linker scripts.
-if (GCC_VERSION VERSION_GREATER_EQUAL 11.3.1)
- set(CONFIG_GNU_SYSCALL_STUB_ENABLED TRUE)
- set(CONFIG_GNU_LINKER_READONLY_ATTRIBUTE TRUE)
-endif()
-
add_compile_options(
-specs=nano.specs
-specs=nosys.specs
@@ -325,7 +318,3 @@
DEPENDS ${target}_hex
)
endmacro()
-
-# A dummy macro to align with Armclang workaround
-macro(tfm_toolchain_reload_compiler)
-endmacro()
diff --git a/platform/ns/toolchain_ns_IARARM.cmake b/platform/ns/toolchain_ns_IARARM.cmake
index b3e2108..7a27a8f 100644
--- a/platform/ns/toolchain_ns_IARARM.cmake
+++ b/platform/ns/toolchain_ns_IARARM.cmake
@@ -36,111 +36,83 @@
string(REGEX MATCH "[v,V]([0-9]+\.[0-9]+\.[0-9]+)*" IAR_VERSION "${IAR_VERSION}")
set(IAR_VERSION ${CMAKE_MATCH_1})
-macro(tfm_toolchain_reset_compiler_flags)
- set_property(DIRECTORY PROPERTY COMPILE_OPTIONS "")
+if(${TFM_SYSTEM_PROCESSOR} STREQUAL "cortex-m0plus")
+ set(CMAKE_SYSTEM_PROCESSOR Cortex-M0+)
+else()
+ set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
+endif()
- add_compile_options(
- $<$<COMPILE_LANGUAGE:C,CXX>:-e>
- $<$<COMPILE_LANGUAGE:C,CXX>:--dlib_config=full>
- $<$<COMPILE_LANGUAGE:C,CXX>:--silent>
- $<$<COMPILE_LANGUAGE:C,CXX>:-DNO_TYPEOF>
- $<$<COMPILE_LANGUAGE:C,CXX>:-D_NO_DEFINITIONS_IN_HEADER_FILES>
- $<$<COMPILE_LANGUAGE:C,CXX>:--diag_suppress=Pe546,Pe940,Pa082,Pa084>
- $<$<COMPILE_LANGUAGE:C,CXX>:--no_path_in_file_macros>
- $<$<AND:$<COMPILE_LANGUAGE:C,CXX,ASM>,$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<CONFIG:Release,MinSizeRel>>:-r>
- )
-endmacro()
+if (DEFINED TFM_SYSTEM_DSP)
+ if(NOT TFM_SYSTEM_DSP)
+ string(APPEND CMAKE_SYSTEM_PROCESSOR ".no_dsp")
+ endif()
+endif()
-macro(tfm_toolchain_reset_linker_flags)
- set_property(DIRECTORY PROPERTY LINK_OPTIONS "")
+set(CMAKE_C_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_ASM_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_C_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_ASM_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- add_link_options(
- --silent
- --semihosting
- --redirect __write=__write_buffered
- --diag_suppress=lp005
- )
-endmacro()
+set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
+set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
-macro(tfm_toolchain_set_processor_arch)
- if(${TFM_SYSTEM_PROCESSOR} STREQUAL "cortex-m0plus")
- set(CMAKE_SYSTEM_PROCESSOR Cortex-M0+)
- else()
- set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
+# Can't use the highest optimization with IAR on v8.1m arch because of the
+# compilation bug in mbedcrypto
+if ((CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.20") AND
+ (CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL "9.32.1") AND
+ ((TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85") OR
+ (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55")) AND
+ (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug")))
+ message(FATAL_ERROR "Only debug build available for M55 and M85"
+ " cores with IAR version between 9.20 and 9.32.1")
+endif()
+
+if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+ if (CONFIG_TFM_ENABLE_FP)
+ set(COMPILER_CP_C_FLAG "--fpu=${CONFIG_TFM_FP_ARCH_ASM}")
+ set(COMPILER_CP_ASM_FLAG "--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()
+else()
+ set(COMPILER_CP_C_FLAG "--fpu=none")
+ set(COMPILER_CP_ASM_FLAG "--fpu=none")
+ set(LINKER_CP_OPTION "--fpu=none")
+endif()
- if (DEFINED TFM_SYSTEM_DSP)
- if(NOT TFM_SYSTEM_DSP)
- string(APPEND CMAKE_SYSTEM_PROCESSOR ".no_dsp")
- endif()
- endif()
-endmacro()
+string(APPEND CMAKE_C_FLAGS " " ${COMPILER_CP_C_FLAG})
+string(APPEND CMAKE_ASM_FLAGS " " ${COMPILER_CP_ASM_FLAG})
+string(APPEND CMAKE_C_LINK_FLAGS " " ${LINKER_CP_OPTION})
+string(APPEND CMAKE_ASM_LINK_FLAGS " " ${LINKER_CP_OPTION})
-macro(tfm_toolchain_reload_compiler)
- tfm_toolchain_set_processor_arch()
- tfm_toolchain_reset_compiler_flags()
- tfm_toolchain_reset_linker_flags()
+add_compile_definitions(
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv6-m>:__ARM_ARCH_6M__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>:__ARM_ARCH_7M__=1>
+ $<$<AND:$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>,$<BOOL:__ARM_FEATURE_DSP>>:__ARM_ARCH_7EM__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.base>:__ARM_ARCH_8M_BASE__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.main>:__ARM_ARCH_8M_MAIN__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__=1>
+)
- unset(CMAKE_C_FLAGS_INIT)
- unset(CMAKE_C_LINK_FLAGS)
- unset(CMAKE_ASM_FLAGS_INIT)
- unset(CMAKE_ASM_LINK_FLAGS)
+add_compile_options(
+ $<$<COMPILE_LANGUAGE:C,CXX>:-e>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--dlib_config=full>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--silent>
+ $<$<COMPILE_LANGUAGE:C,CXX>:-DNO_TYPEOF>
+ $<$<COMPILE_LANGUAGE:C,CXX>:-D_NO_DEFINITIONS_IN_HEADER_FILES>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--diag_suppress=Pe546,Pe940,Pa082,Pa084>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--no_path_in_file_macros>
+ $<$<AND:$<COMPILE_LANGUAGE:C,CXX,ASM>,$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<CONFIG:Release,MinSizeRel>>:-r>
+)
- set(CMAKE_C_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_ASM_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_C_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_ASM_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
-
- set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
- set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
-
- # Can't use the highest optimization with IAR on v8.1m arch because of the
- # compilation bug in mbedcrypto
- if ((CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "9.20") AND
- (CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL "9.32.1") AND
- ((TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85") OR
- (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55")) AND
- (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug")))
- message(FATAL_ERROR "Only debug build available for M55 and M85"
- " cores with IAR version between 9.20 and 9.32.1")
- endif()
-
- if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
- if (CONFIG_TFM_ENABLE_FP)
- set(COMPILER_CP_C_FLAG "--fpu=${CONFIG_TFM_FP_ARCH_ASM}")
- set(COMPILER_CP_ASM_FLAG "--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()
- else()
- set(COMPILER_CP_C_FLAG "--fpu=none")
- set(COMPILER_CP_ASM_FLAG "--fpu=none")
- set(LINKER_CP_OPTION "--fpu=none")
- endif()
-
- string(APPEND CMAKE_C_FLAGS " " ${COMPILER_CP_C_FLAG})
- string(APPEND CMAKE_ASM_FLAGS " " ${COMPILER_CP_ASM_FLAG})
- string(APPEND CMAKE_C_LINK_FLAGS " " ${LINKER_CP_OPTION})
- string(APPEND CMAKE_ASM_LINK_FLAGS " " ${LINKER_CP_OPTION})
-
- add_compile_definitions(
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv6-m>:__ARM_ARCH_6M__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>:__ARM_ARCH_7M__=1>
- $<$<AND:$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>,$<BOOL:__ARM_FEATURE_DSP>>:__ARM_ARCH_7EM__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.base>:__ARM_ARCH_8M_BASE__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.main>:__ARM_ARCH_8M_MAIN__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__=1>
- )
-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()
+add_link_options(
+ --silent
+ --semihosting
+ --redirect __write=__write_buffered
+ --diag_suppress=lp005
+)
# Specify the scatter file used to link `target`.
# Behaviour for handling scatter files is so wildly divergent between compilers
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.
diff --git a/toolchain_GNUARM.cmake b/toolchain_GNUARM.cmake
index bac2286..074fac4 100644
--- a/toolchain_GNUARM.cmake
+++ b/toolchain_GNUARM.cmake
@@ -48,7 +48,7 @@
endif()
endif()
# GCC specifies that '+nofp' is available on following M-profile cpus: 'cortex-m4',
- # 'cortex-m7', 'cortex-m33', 'cortex-m35p' and 'cortex-m55'.
+ # '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 GCC description.
if(GCC_VERSION VERSION_GREATER_EQUAL "8.0.0")
@@ -57,7 +57,8 @@
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-m55"
+ OR TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85"))
string(APPEND CMAKE_SYSTEM_PROCESSOR "+nofp")
endif()
endif()
@@ -408,7 +409,3 @@
ARGS $<TARGET_FILE:${dependency}> --wildcard ${SYMBOL_LIST} $<TARGET_FILE:${dependency}>
)
endmacro()
-
-# A dummy macro to align with Armclang workaround
-macro(tfm_toolchain_reload_compiler)
-endmacro()
diff --git a/toolchain_IARARM.cmake b/toolchain_IARARM.cmake
index bcff3ef..83156fe 100644
--- a/toolchain_IARARM.cmake
+++ b/toolchain_IARARM.cmake
@@ -37,165 +37,137 @@
# CMAKE_C_COMPILER_VERSION is not guaranteed to be defined.
EXECUTE_PROCESS( COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE IAR_VERSION )
-string(REGEX MATCH "[v,V]([0-9]+\.[0-9]+\.[0-9]+)*" IAR_VERSION "${IAR_VERSION}")
+string(REGEX MATCH "[v,V]([0-9]+\.[0-9]+\.[0-9]+)" IAR_VERSION "${IAR_VERSION}")
set(IAR_VERSION ${CMAKE_MATCH_1})
-macro(tfm_toolchain_reset_compiler_flags)
- set_property(DIRECTORY PROPERTY COMPILE_OPTIONS "")
+if(${TFM_SYSTEM_PROCESSOR} STREQUAL "cortex-m0plus")
+ set(CMAKE_SYSTEM_PROCESSOR Cortex-M0+)
+else()
+ set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
+endif()
- add_compile_options(
- $<$<COMPILE_LANGUAGE:C,CXX>:-e>
- $<$<COMPILE_LANGUAGE:C,CXX>:--dlib_config=full>
- $<$<COMPILE_LANGUAGE:C,CXX>:--silent>
- $<$<COMPILE_LANGUAGE:C,CXX>:-DNO_TYPEOF>
- $<$<COMPILE_LANGUAGE:C,CXX>:-D_NO_DEFINITIONS_IN_HEADER_FILES>
- $<$<COMPILE_LANGUAGE:C,CXX>:--diag_suppress=Pe546,Pe940,Pa082,Pa084>
- $<$<COMPILE_LANGUAGE:C,CXX>:--no_path_in_file_macros>
- $<$<AND:$<COMPILE_LANGUAGE:C,CXX,ASM>,$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<CONFIG:Release,MinSizeRel>>:-r>
+if (DEFINED TFM_SYSTEM_DSP)
+ if(NOT TFM_SYSTEM_DSP)
+ string(APPEND CMAKE_SYSTEM_PROCESSOR ".no_dsp")
+ endif()
+endif()
+
+add_compile_options(
+ $<$<COMPILE_LANGUAGE:C,CXX>:-e>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--dlib_config=full>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--silent>
+ $<$<COMPILE_LANGUAGE:C,CXX>:-DNO_TYPEOF>
+ $<$<COMPILE_LANGUAGE:C,CXX>:-D_NO_DEFINITIONS_IN_HEADER_FILES>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--diag_suppress=Pe546,Pe940,Pa082,Pa084>
+ $<$<COMPILE_LANGUAGE:C,CXX>:--no_path_in_file_macros>
+ $<$<AND:$<COMPILE_LANGUAGE:C,CXX,ASM>,$<BOOL:${TFM_DEBUG_SYMBOLS}>,$<CONFIG:Release,MinSizeRel>>:-r>
+)
+
+add_link_options(
+ --silent
+ --semihosting
+ --redirect __write=__write_buffered
+ --diag_suppress=lp005,Lp023
+)
+
+set(CMAKE_C_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_ASM_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_C_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+set(CMAKE_ASM_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
+
+set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
+set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
+
+# Can't use the highest optimization with IAR on v8.1m arch because of the
+# compilation bug in mbedcrypto
+if ((IAR_VERSION VERSION_GREATER_EQUAL "9.20") AND
+ (IAR_VERSION VERSION_LESS_EQUAL "9.32.1") AND
+ ((TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85") OR
+ (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55")) AND
+ (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug")))
+ message(FATAL_ERROR "Only debug build available for M55 and M85"
+ " cores with IAR version between 9.20 and 9.32.1")
+endif()
+
+set(BL2_COMPILER_CP_FLAG
+ $<$<COMPILE_LANGUAGE:C>:--fpu=none>
+ $<$<COMPILE_LANGUAGE:ASM>:--fpu=none>
+)
+# As BL2 does not use hardware FPU, specify '--fpu=none' 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=none)
+
+set(BL1_COMPILER_CP_FLAG
+ $<$<COMPILE_LANGUAGE:C>:--fpu=none>
+ $<$<COMPILE_LANGUAGE:ASM>:--fpu=none>
+)
+set(BL1_LINKER_CP_OPTION --fpu=none)
+
+if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
+ set(COMPILER_CP_FLAG
+ $<$<COMPILE_LANGUAGE:C>:-mfloat-abi=hard>
)
-endmacro()
-macro(tfm_toolchain_reset_linker_flags)
- set_property(DIRECTORY PROPERTY LINK_OPTIONS "")
-
- add_link_options(
- --silent
- --semihosting
- --redirect __write=__write_buffered
- --diag_suppress=lp005,Lp023
- )
-endmacro()
-
-macro(tfm_toolchain_set_processor_arch)
- if(${TFM_SYSTEM_PROCESSOR} STREQUAL "cortex-m0plus")
- set(CMAKE_SYSTEM_PROCESSOR Cortex-M0+)
- else()
- set(CMAKE_SYSTEM_PROCESSOR ${TFM_SYSTEM_PROCESSOR})
+ if (CONFIG_TFM_ENABLE_FP)
+ set(COMPILER_CP_FLAG
+ $<$<COMPILE_LANGUAGE:C>:--fpu=${CONFIG_TFM_FP_ARCH_ASM}>
+ $<$<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()
-
- if (DEFINED TFM_SYSTEM_DSP)
- if(NOT TFM_SYSTEM_DSP)
- string(APPEND CMAKE_SYSTEM_PROCESSOR ".no_dsp")
- endif()
- endif()
-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_C_LINK_FLAGS)
- unset(CMAKE_ASM_FLAGS_INIT)
- unset(CMAKE_ASM_LINK_FLAGS)
-
- set(CMAKE_C_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_ASM_FLAGS_INIT "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_C_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
- set(CMAKE_ASM_LINK_FLAGS "--cpu ${CMAKE_SYSTEM_PROCESSOR}")
-
- set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_INIT})
- set(CMAKE_ASM_FLAGS ${CMAKE_ASM_FLAGS_INIT})
-
- # Can't use the highest optimization with IAR on v8.1m arch because of the
- # compilation bug in mbedcrypto
- if ((IAR_VERSION VERSION_GREATER_EQUAL "9.20") AND
- (IAR_VERSION VERSION_LESS_EQUAL "9.32.1") AND
- ((TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m85") OR
- (TFM_SYSTEM_PROCESSOR STREQUAL "cortex-m55")) AND
- (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug")))
- message(FATAL_ERROR "Only debug build available for M55 and M85"
- " cores with IAR version between 9.20 and 9.32.1")
- endif()
-
- set(BL2_COMPILER_CP_FLAG
+else()
+ set(COMPILER_CP_FLAG
$<$<COMPILE_LANGUAGE:C>:--fpu=none>
$<$<COMPILE_LANGUAGE:ASM>:--fpu=none>
)
- # As BL2 does not use hardware FPU, specify '--fpu=none' 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=none)
+ set(LINKER_CP_OPTION --fpu=none)
+endif()
- set(BL1_COMPILER_CP_FLAG
- $<$<COMPILE_LANGUAGE:C>:--fpu=none>
- $<$<COMPILE_LANGUAGE:ASM>:--fpu=none>
- )
- set(BL1_LINKER_CP_OPTION --fpu=none)
+add_compile_definitions(
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv6-m>:__ARM_ARCH_6M__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>:__ARM_ARCH_7M__=1>
+ $<$<AND:$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>,$<BOOL:__ARM_FEATURE_DSP>>:__ARM_ARCH_7EM__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.base>:__ARM_ARCH_8M_BASE__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.main>:__ARM_ARCH_8M_MAIN__=1>
+ $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__=1>
+)
- if (CONFIG_TFM_FLOAT_ABI STREQUAL "hard")
- set(COMPILER_CP_FLAG
- $<$<COMPILE_LANGUAGE:C>:-mfloat-abi=hard>
- )
+#
+# Pointer Authentication Code and Branch Target Identification (PACBTI) Options
+#
+if(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_STANDARD)
+ set(BRANCH_PROTECTION_OPTIONS "bti+pac-ret")
+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)
+ message(FATAL_ERROR "${CONFIG_TFM_BRANCH_PROTECTION_FEAT} option is not supported on IAR Compiler.")
+elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_BTI)
+ set(BRANCH_PROTECTION_OPTIONS "bti")
+endif()
- if (CONFIG_TFM_ENABLE_FP)
- set(COMPILER_CP_FLAG
- $<$<COMPILE_LANGUAGE:C>:--fpu=${CONFIG_TFM_FP_ARCH_ASM}>
- $<$<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})
+if(NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_DISABLED AND
+ NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_NONE)
+ if (IAR_VERSION VERSION_LESS "9.40.1")
+ message(FATAL_ERROR "Only IAR version 9.40.1 and above supports PAC+BTI.")
endif()
- else()
- set(COMPILER_CP_FLAG
- $<$<COMPILE_LANGUAGE:C>:--fpu=none>
- $<$<COMPILE_LANGUAGE:ASM>:--fpu=none>
- )
- set(LINKER_CP_OPTION --fpu=none)
- endif()
- add_compile_definitions(
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv6-m>:__ARM_ARCH_6M__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>:__ARM_ARCH_7M__=1>
- $<$<AND:$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv7-m>,$<BOOL:__ARM_FEATURE_DSP>>:__ARM_ARCH_7EM__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.base>:__ARM_ARCH_8M_BASE__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8-m.main>:__ARM_ARCH_8M_MAIN__=1>
- $<$<STREQUAL:${TFM_SYSTEM_ARCHITECTURE},armv8.1-m.main>:__ARM_ARCH_8_1M_MAIN__=1>
- )
+ 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}")
- #
- # Pointer Authentication Code and Branch Target Identification (PACBTI) Options
- #
- if(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_STANDARD)
- set(BRANCH_PROTECTION_OPTIONS "bti+pac-ret")
- 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)
- message(FATAL_ERROR "${CONFIG_TFM_BRANCH_PROTECTION_FEAT} option is not supported on IAR Compiler.")
- elseif(${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_BTI)
- set(BRANCH_PROTECTION_OPTIONS "bti")
- endif()
+ string(APPEND CMAKE_C_FLAGS " --branch_protection=${BRANCH_PROTECTION_OPTIONS}")
+ string(APPEND CMAKE_CXX_FLAGS " --branch_protection=${BRANCH_PROTECTION_OPTIONS}")
- if(NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_DISABLED AND
- NOT ${CONFIG_TFM_BRANCH_PROTECTION_FEAT} STREQUAL BRANCH_PROTECTION_NONE)
- if (IAR_VERSION VERSION_LESS "9.40.1")
- message(FATAL_ERROR "Only IAR version 9.40.1 and above supports PAC+BTI.")
- 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}")
-
- string(APPEND CMAKE_C_FLAGS " --branch_protection=${BRANCH_PROTECTION_OPTIONS}")
- string(APPEND CMAKE_CXX_FLAGS " --branch_protection=${BRANCH_PROTECTION_OPTIONS}")
-
- add_link_options(--library_security=pacbti-m)
- else()
- 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()
+ add_link_options(--library_security=pacbti-m)
+ else()
+ message(FATAL_ERROR "Your architecture does not support BRANCH_PROTECTION")
+ endif()
+endif()
# Behaviour for handling scatter files is so wildly divergent between compilers
# that this macro is required.