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 /Makefile | |
parent | 2736aca5972d66f4a36267dbb458b3730e95e40e (diff) |
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>
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 43 |
1 files changed, 32 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) |