diff options
author | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2020-12-07 16:38:53 +0000 |
---|---|---|
committer | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2020-12-10 15:31:51 +0000 |
commit | f18217902a4c84c2cb6695164ffa1db540a0146b (patch) | |
tree | 44dd1c041c1b75d0022832bc4393a5ab8f268e1e | |
parent | 2736aca5972d66f4a36267dbb458b3730e95e40e (diff) | |
download | platform_external_arm-trusted-firmware-f18217902a4c84c2cb6695164ffa1db540a0146b.tar.gz platform_external_arm-trusted-firmware-f18217902a4c84c2cb6695164ffa1db540a0146b.tar.bz2 platform_external_arm-trusted-firmware-f18217902a4c84c2cb6695164ffa1db540a0146b.zip |
TF-A: Add build option for Arm Feature Modifiers
This patch adds a new ARM_ARCH_FEATURE build option
to add support for compiler's feature modifiers.
It has the form '[no]feature+...' and defaults to
'none'. This option translates into compiler option
'-march=armvX[.Y]-a+[no]feature+...'.
Change-Id: I37742f270a898f5d6968e146cbcc04cbf53ef2ad
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
-rw-r--r-- | Makefile | 43 | ||||
-rw-r--r-- | docs/getting_started/build-options.rst | 6 | ||||
-rw-r--r-- | make_helpers/defaults.mk | 3 |
3 files changed, 41 insertions, 11 deletions
@@ -185,13 +185,14 @@ target32-directive = -target arm-none-eabi else target32-directive = -target armv8a-none-eabi -# Set the compiler's target architecture profile based on ARM_ARCH_MINOR option +# Set the compiler's target architecture profile based on +# ARM_ARCH_MAJOR ARM_ARCH_MINOR options ifeq (${ARM_ARCH_MINOR},0) -march32-directive = -march=armv8-a -march64-directive = -march=armv8-a +march32-directive = -march=armv${ARM_ARCH_MAJOR}-a +march64-directive = -march=armv${ARM_ARCH_MAJOR}-a else -march32-directive = -march=armv8.${ARM_ARCH_MINOR}-a -march64-directive = -march=armv8.${ARM_ARCH_MINOR}-a +march32-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a +march64-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a endif endif @@ -203,23 +204,43 @@ mem_tag_arch_support = yes endif endif -# Enabled required option for memory stack tagging. Currently, these options are -# enabled only for clang and armclang compiler. +# Get architecture feature modifiers +arch-features = ${ARM_ARCH_FEATURE} + +# Enable required options for memory stack tagging. +# Currently, these options are enabled only for clang and armclang compiler. ifeq (${SUPPORT_STACK_MEMTAG},yes) ifdef mem_tag_arch_support +# Check for armclang and clang compilers ifneq ( ,$(filter $(notdir $(CC)),armclang clang)) -march64-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a+memtag +# Add "memtag" architecture feature modifier if not specified +ifeq ( ,$(findstring memtag,$(arch-features))) +arch-features := $(arch-features)+memtag +endif # memtag ifeq ($(notdir $(CC)),armclang) TF_CFLAGS += -mmemtag-stack else ifeq ($(notdir $(CC)),clang) TF_CFLAGS += -fsanitize=memtag -endif -endif +endif # armclang +endif # armclang clang else $(error "Error: stack memory tagging is not supported for architecture \ ${ARCH},armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a") +endif # mem_tag_arch_support +endif # SUPPORT_STACK_MEMTAG + +# Set the compiler's architecture feature modifiers +ifneq ($(arch-features), none) +# Strip "none+" from arch-features +arch-features := $(subst none+,,$(arch-features)) +ifeq ($(ARCH), aarch32) +march32-directive := $(march32-directive)+$(arch-features) +else +march64-directive := $(march64-directive)+$(arch-features) endif -endif +# Print features +$(info Arm Architecture Features specified: $(subst +, ,$(arch-features))) +endif # arch-features ifneq ($(findstring armclang,$(notdir $(CC))),) TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive) diff --git a/docs/getting_started/build-options.rst b/docs/getting_started/build-options.rst index 8adf4ad8b..d4eb6a768 100644 --- a/docs/getting_started/build-options.rst +++ b/docs/getting_started/build-options.rst @@ -26,6 +26,12 @@ Common build options ``aarch64`` or ``aarch32`` as values. By default, it is defined to ``aarch64``. +- ``ARM_ARCH_FEATURE``: Optional Arm Architecture build option which specifies + one or more feature modifiers. This option has the form ``[no]feature+...`` + and defaults to ``none``. It translates into compiler option + ``-march=armvX[.Y]-a+[no]feature+...``. See compiler's documentation for the + list of supported feature modifiers. + - ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when compiling TF-A. Its value must be numeric, and defaults to 8 . See also, *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index 578bd5987..9e5fe8557 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -19,6 +19,9 @@ AARCH32_SP := none # The Target build architecture. Supported values are: aarch64, aarch32. ARCH := aarch64 +# ARM Architecture feature modifiers: none by default +ARM_ARCH_FEATURE := none + # ARM Architecture major and minor versions: 8.0 by default. ARM_ARCH_MAJOR := 8 ARM_ARCH_MINOR := 0 |