]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
TF-A: Add build option for Arm Feature Modifiers
authorAlexei Fedorov <Alexei.Fedorov@arm.com>
Mon, 7 Dec 2020 16:38:53 +0000 (16:38 +0000)
committerAlexei Fedorov <Alexei.Fedorov@arm.com>
Thu, 10 Dec 2020 15:31:51 +0000 (15:31 +0000)
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>
Makefile
docs/getting_started/build-options.rst
make_helpers/defaults.mk

index 5c9186ece35facf677fa83460c55c480c71bb106..f950eb834ac28a3cf45bb84ded4bef0ab1dceb5e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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)
index 8adf4ad8ba2a3e351486471ba7faf776fa0a28a2..d4eb6a768e9e8511c469445cfbc76d13ec1f838f 100644 (file)
@@ -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
index 578bd59876a8681ab7e2ae8b78eba0aa063ea5e1..9e5fe855727a662c9258482127c8d5fba16ebeec 100644 (file)
@@ -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