Commit f1821790 authored by Alexei Fedorov's avatar Alexei Fedorov
Browse files

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: default avatarAlexei Fedorov <Alexei.Fedorov@arm.com>
parent 2736aca5
...@@ -185,13 +185,14 @@ target32-directive = -target arm-none-eabi ...@@ -185,13 +185,14 @@ target32-directive = -target arm-none-eabi
else else
target32-directive = -target armv8a-none-eabi 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) ifeq (${ARM_ARCH_MINOR},0)
march32-directive = -march=armv8-a march32-directive = -march=armv${ARM_ARCH_MAJOR}-a
march64-directive = -march=armv8-a march64-directive = -march=armv${ARM_ARCH_MAJOR}-a
else else
march32-directive = -march=armv8.${ARM_ARCH_MINOR}-a march32-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a
march64-directive = -march=armv8.${ARM_ARCH_MINOR}-a march64-directive = -march=armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a
endif endif
endif endif
...@@ -203,23 +204,43 @@ mem_tag_arch_support = yes ...@@ -203,23 +204,43 @@ mem_tag_arch_support = yes
endif endif
endif endif
# Enabled required option for memory stack tagging. Currently, these options are # Get architecture feature modifiers
# enabled only for clang and armclang compiler. 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) ifeq (${SUPPORT_STACK_MEMTAG},yes)
ifdef mem_tag_arch_support ifdef mem_tag_arch_support
# Check for armclang and clang compilers
ifneq ( ,$(filter $(notdir $(CC)),armclang clang)) 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) ifeq ($(notdir $(CC)),armclang)
TF_CFLAGS += -mmemtag-stack TF_CFLAGS += -mmemtag-stack
else ifeq ($(notdir $(CC)),clang) else ifeq ($(notdir $(CC)),clang)
TF_CFLAGS += -fsanitize=memtag TF_CFLAGS += -fsanitize=memtag
endif endif # armclang
endif endif # armclang clang
else else
$(error "Error: stack memory tagging is not supported for architecture \ $(error "Error: stack memory tagging is not supported for architecture \
${ARCH},armv${ARM_ARCH_MAJOR}.${ARM_ARCH_MINOR}-a") ${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
endif # Print features
$(info Arm Architecture Features specified: $(subst +, ,$(arch-features)))
endif # arch-features
ifneq ($(findstring armclang,$(notdir $(CC))),) ifneq ($(findstring armclang,$(notdir $(CC))),)
TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive) TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive)
......
...@@ -26,6 +26,12 @@ Common build options ...@@ -26,6 +26,12 @@ Common build options
``aarch64`` or ``aarch32`` as values. By default, it is defined to ``aarch64`` or ``aarch32`` as values. By default, it is defined to
``aarch64``. ``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 - ``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, compiling TF-A. Its value must be numeric, and defaults to 8 . See also,
*Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in
......
...@@ -19,6 +19,9 @@ AARCH32_SP := none ...@@ -19,6 +19,9 @@ AARCH32_SP := none
# The Target build architecture. Supported values are: aarch64, aarch32. # The Target build architecture. Supported values are: aarch64, aarch32.
ARCH := aarch64 ARCH := aarch64
# ARM Architecture feature modifiers: none by default
ARM_ARCH_FEATURE := none
# ARM Architecture major and minor versions: 8.0 by default. # ARM Architecture major and minor versions: 8.0 by default.
ARM_ARCH_MAJOR := 8 ARM_ARCH_MAJOR := 8
ARM_ARCH_MINOR := 0 ARM_ARCH_MINOR := 0
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment