Allow setting compiler's target architecture
authorAlexei Fedorov <Alexei.Fedorov@arm.com>
Mon, 11 Mar 2019 16:51:47 +0000 (16:51 +0000)
committerAlexei Fedorov <Alexei.Fedorov@arm.com>
Tue, 12 Mar 2019 17:04:50 +0000 (17:04 +0000)
Change-Id: I56ea088f415bdb9077c385bd3450ff4b2cfa2eac
Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
Makefile
docs/firmware-design.rst

index 6386befd1aba3c252df493c1356501e2459ebd0f..5621c53e06f4f6beaecb0f96f393741447bb89ee 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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
index 9e206dc0f3ca212be9cdc38245271fe9b6e1c3db..52520ea12da94468d58c3fd1703d4a1a16a7bead 100644 (file)
@@ -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
 ~~~~~~~