diff options
author | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2019-03-11 16:51:47 +0000 |
---|---|---|
committer | Alexei Fedorov <Alexei.Fedorov@arm.com> | 2019-03-12 17:04:50 +0000 |
commit | fa6f774b285dc9ee4d312a955195a079fc4d2bb7 (patch) | |
tree | 82b0e2c24ec28f0242dabbff02cf283704e56c4c | |
parent | c48d02bade88b07fa7f43aa44e5217f68e5d047f (diff) |
Allow setting compiler's target architecture
Change-Id: I56ea088f415bdb9077c385bd3450ff4b2cfa2eac
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
-rw-r--r-- | Makefile | 24 | ||||
-rw-r--r-- | docs/firmware-design.rst | 6 |
2 files changed, 17 insertions, 13 deletions
@@ -147,26 +147,34 @@ target32-directive = -target arm-none-eabi # Will set march32-directive from platform configuration else target32-directive = -target armv8a-none-eabi + +# Set the compiler's target architecture profile based on ARM_ARCH_MINOR option +ifeq (${ARM_ARCH_MINOR},0) march32-directive = -march=armv8-a +march64-directive = -march=armv8-a +else +march32-directive = -march=armv8.${ARM_ARCH_MINOR}-a +march64-directive = -march=armv8.${ARM_ARCH_MINOR}-a +endif endif ifneq ($(findstring armclang,$(notdir $(CC))),) TF_CFLAGS_aarch32 = -target arm-arm-none-eabi $(march32-directive) -TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi -march=armv8-a +TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive) LD = $(LINKER) AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH)) CPP = $(CC) -E $(TF_CFLAGS_$(ARCH)) PP = $(CC) -E $(TF_CFLAGS_$(ARCH)) else ifneq ($(findstring clang,$(notdir $(CC))),) TF_CFLAGS_aarch32 = $(target32-directive) $(march32-directive) -TF_CFLAGS_aarch64 = -target aarch64-elf +TF_CFLAGS_aarch64 = -target aarch64-elf $(march64-directive) LD = $(LINKER) AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH)) CPP = $(CC) -E PP = $(CC) -E else TF_CFLAGS_aarch32 = $(march32-directive) -TF_CFLAGS_aarch64 = -march=armv8-a +TF_CFLAGS_aarch64 = $(march64-directive) LD = $(LINKER) endif @@ -182,15 +190,7 @@ TF_CFLAGS_aarch32 += -mno-unaligned-access TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align ASFLAGS_aarch32 = $(march32-directive) -ASFLAGS_aarch64 = -march=armv8-a - -# Set the compiler to ARMv8.3 mode so that it uses all the ARMv8.3-PAuth -# instructions. Keeping it in 8.0 would make the compiler emit -# backwards-compatible hint instructions, which needs more space. -ifeq (${ENABLE_PAUTH},1) -TF_CFLAGS_aarch64 += -march=armv8.3-a -ASFLAGS_aarch64 += -march=armv8.3-a -endif +ASFLAGS_aarch64 = $(march64-directive) WARNING1 := -Wextra WARNING1 += -Wunused -Wno-unused-parameter diff --git a/docs/firmware-design.rst b/docs/firmware-design.rst index 9e206dc0..52520ea1 100644 --- a/docs/firmware-design.rst +++ b/docs/firmware-design.rst @@ -2521,7 +2521,7 @@ section lists the usage of Architecture Extensions, and build flags controlling them. In general, and unless individually mentioned, the build options -``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` selects the Architecture Extension to +``ARM_ARCH_MAJOR`` and ``ARM_ARCH_MINOR`` select the Architecture Extension to target when building TF-A. Subsequent Arm Architecture Extensions are backward compatible with previous versions. @@ -2570,6 +2570,10 @@ Armv8.3-A ``CTX_INCLUDE_PAUTH_REGS`` to 1. This enables pointer authentication in BL1, BL2, BL31, and the TSP if it is used. + If ``ARM_ARCH_MAJOR == 8`` and ``ARM_ARCH_MINOR >= 3`` the code footprint of + enabling PAuth is lower because the compiler will use the optimized + PAuth instructions rather than the backwards-compatible ones. + Armv7-A ~~~~~~~ |