Allow setting compiler's target architecture

Change-Id: I56ea088f415bdb9077c385bd3450ff4b2cfa2eac
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
This commit is contained in:
Alexei Fedorov 2019-03-11 16:51:47 +00:00
parent c48d02bade
commit fa6f774b28
2 changed files with 17 additions and 13 deletions

View File

@ -147,26 +147,34 @@ target32-directive = -target arm-none-eabi
# Will set march32-directive from platform configuration # Will set march32-directive from platform configuration
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
ifeq (${ARM_ARCH_MINOR},0)
march32-directive = -march=armv8-a 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 endif
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)
TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi -march=armv8-a TF_CFLAGS_aarch64 = -target aarch64-arm-none-eabi $(march64-directive)
LD = $(LINKER) LD = $(LINKER)
AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH)) AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH))
CPP = $(CC) -E $(TF_CFLAGS_$(ARCH)) CPP = $(CC) -E $(TF_CFLAGS_$(ARCH))
PP = $(CC) -E $(TF_CFLAGS_$(ARCH)) PP = $(CC) -E $(TF_CFLAGS_$(ARCH))
else ifneq ($(findstring clang,$(notdir $(CC))),) else ifneq ($(findstring clang,$(notdir $(CC))),)
TF_CFLAGS_aarch32 = $(target32-directive) $(march32-directive) TF_CFLAGS_aarch32 = $(target32-directive) $(march32-directive)
TF_CFLAGS_aarch64 = -target aarch64-elf TF_CFLAGS_aarch64 = -target aarch64-elf $(march64-directive)
LD = $(LINKER) LD = $(LINKER)
AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH)) AS = $(CC) -c -x assembler-with-cpp $(TF_CFLAGS_$(ARCH))
CPP = $(CC) -E CPP = $(CC) -E
PP = $(CC) -E PP = $(CC) -E
else else
TF_CFLAGS_aarch32 = $(march32-directive) TF_CFLAGS_aarch32 = $(march32-directive)
TF_CFLAGS_aarch64 = -march=armv8-a TF_CFLAGS_aarch64 = $(march64-directive)
LD = $(LINKER) LD = $(LINKER)
endif endif
@ -182,15 +190,7 @@ TF_CFLAGS_aarch32 += -mno-unaligned-access
TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align
ASFLAGS_aarch32 = $(march32-directive) ASFLAGS_aarch32 = $(march32-directive)
ASFLAGS_aarch64 = -march=armv8-a ASFLAGS_aarch64 = $(march64-directive)
# 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
WARNING1 := -Wextra WARNING1 := -Wextra
WARNING1 += -Wunused -Wno-unused-parameter WARNING1 += -Wunused -Wno-unused-parameter

View File

@ -2521,7 +2521,7 @@ section lists the usage of Architecture Extensions, and build flags
controlling them. controlling them.
In general, and unless individually mentioned, the build options 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 target when building TF-A. Subsequent Arm Architecture Extensions are backward
compatible with previous versions. compatible with previous versions.
@ -2570,6 +2570,10 @@ Armv8.3-A
``CTX_INCLUDE_PAUTH_REGS`` to 1. This enables pointer authentication in BL1, ``CTX_INCLUDE_PAUTH_REGS`` to 1. This enables pointer authentication in BL1,
BL2, BL31, and the TSP if it is used. 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 Armv7-A
~~~~~~~ ~~~~~~~