Browse Source

Merge changes from topic "gr/build_refac" into integration

* changes:
  refactor(build): minor updates
  refactor(build): remove enabling feat
  fix(build): march handling with arch-features
  refactor(build): refactor mandatory options
pull/1999/merge
Manish Pandey 9 months ago
committed by TrustedFirmware Code Review
parent
commit
c666a929c1
  1. 20
      Makefile
  2. 100
      make_helpers/arch_features.mk
  3. 12
      make_helpers/build_macros.mk
  4. 11
      make_helpers/march.mk

20
Makefile

@ -160,15 +160,6 @@ endif #(ARM_ARCH_MAJOR)
################################################################################
arch-features = ${ARM_ARCH_FEATURE}
# Set the compiler's architecture feature modifiers
ifneq ($(arch-features), none)
# Strip "none+" from arch-features
arch-features := $(subst none+,,$(arch-features))
march-directive := $(march-directive)+$(arch-features)
# Print features
$(info Arm Architecture Features specified: $(subst +, ,$(arch-features)))
endif #(arch-features)
ifneq ($(findstring clang,$(notdir $(CC))),)
ifneq ($(findstring armclang,$(notdir $(CC))),)
TF_CFLAGS_aarch32 := -target arm-arm-none-eabi
@ -232,8 +223,6 @@ endif #(AARCH32_INSTRUCTION_SET)
TF_CFLAGS_aarch32 += -mno-unaligned-access
TF_CFLAGS_aarch64 += -mgeneral-regs-only -mstrict-align
ASFLAGS += $(march-directive)
##############################################################################
# WARNINGS Configuration
###############################################################################
@ -691,6 +680,7 @@ endif
include ${MAKE_HELPERS_DIRECTORY}march.mk
TF_CFLAGS += $(march-directive)
ASFLAGS += $(march-directive)
# This internal flag is common option which is set to 1 for scenarios
# when the BL2 is running in EL3 level. This occurs in two scenarios -
@ -1039,12 +1029,6 @@ ifeq (${ENABLE_RME},1)
endif
endif
# Determine if FEAT_RNG is supported
ENABLE_FEAT_RNG = $(if $(findstring rng,${arch-features}),1,0)
# Determine if FEAT_SB is supported
ENABLE_FEAT_SB = $(if $(findstring sb,${arch-features}),1,0)
ifeq ($(PSA_CRYPTO),1)
$(info PSA_CRYPTO is an experimental feature)
endif
@ -1170,7 +1154,6 @@ $(eval $(call assert_booleans,\
ENABLE_AMU_FCONF \
AMU_RESTRICT_COUNTERS \
ENABLE_ASSERTIONS \
ENABLE_FEAT_SB \
ENABLE_PIE \
ENABLE_PMF \
ENABLE_PSCI_STAT \
@ -1267,6 +1250,7 @@ $(eval $(call assert_numerics,\
ENABLE_FEAT_RNG_TRAP \
ENABLE_FEAT_SEL2 \
ENABLE_FEAT_TCR2 \
ENABLE_FEAT_SB \
ENABLE_FEAT_S2PIE \
ENABLE_FEAT_S1PIE \
ENABLE_FEAT_S2POE \

100
make_helpers/arch_features.mk

@ -8,39 +8,56 @@
# and enables them based on the configured architecture version.
# This file follows the following format:
# - Enable mandatory feature if applicable to an Arch Version.
# - Enable mandatory feature if not updated, as applicable to an Arch Version.
# - By default disable any mandatory features if they have not been defined yet.
# - Disable or enable any optional feature this would be enabled/disabled if needed by platform.
#
################################################################################
# Enable Mandatory features based on Arch versions.
# Enable Mandatory features if not updated yet, based on Arch versions.
################################################################################
#
# Enable the features which are mandatory from ARCH version 8.1 and upwards.
ifeq "8.1" "$(word 1, $(sort 8.1 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_PAN ?= 1
ENABLE_FEAT_VHE ?= 1
armv8-1-a-feats := ENABLE_FEAT_PAN ENABLE_FEAT_VHE
FEAT_LIST := ${armv8-1-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.2 and upwards.
ifeq "8.2" "$(word 1, $(sort 8.2 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_RAS ?= 1
armv8-2-a-feats := ENABLE_FEAT_RAS
# 8.1 Compliant
armv8-2-a-feats += ${armv8-1-a-feats}
FEAT_LIST := ${armv8-2-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.3 and upwards.
ifeq "8.3" "$(word 1, $(sort 8.3 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.2 Compliant
armv8-3-a-feats += ${armv8-2-a-feats}
FEAT_LIST := ${armv8-3-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.4 and upwards.
ifeq "8.4" "$(word 1, $(sort 8.4 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_SEL2 ?= 1
ENABLE_TRF_FOR_NS ?= 1
ENABLE_FEAT_DIT ?= 1
armv8-4-a-feats := ENABLE_FEAT_SEL2 ENABLE_TRF_FOR_NS ENABLE_FEAT_DIT
# 8.3 Compliant
armv8-4-a-feats += ${armv8-3-a-feats}
FEAT_LIST := ${armv8-4-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.5 and upwards.
ifeq "8.5" "$(word 1, $(sort 8.5 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_RNG ?= 1
ENABLE_FEAT_SB ?= 1
armv8-5-a-feats := ENABLE_FEAT_RNG ENABLE_FEAT_SB
# 8.4 Compliant
armv8-5-a-feats += ${armv8-4-a-feats}
FEAT_LIST := ${armv8-5-a-feats}
# Enable Memory tagging, Branch Target Identification for aarch64 only.
ifeq ($(ARCH), aarch64)
mem_tag_arch_support ?= yes
@ -50,23 +67,70 @@ endif
# Enable the features which are mandatory from ARCH version 8.6 and upwards.
ifeq "8.6" "$(word 1, $(sort 8.6 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_ECV ?= 1
ENABLE_FEAT_FGT ?= 1
armv8-6-a-feats := ENABLE_FEAT_ECV ENABLE_FEAT_FGT
# 8.5 Compliant
armv8-6-a-feats += ${armv8-5-a-feats}
FEAT_LIST := ${armv8-6-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.7 and upwards.
ifeq "8.7" "$(word 1, $(sort 8.7 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_HCX ?= 1
armv8-7-a-feats := ENABLE_FEAT_HCX
# 8.6 Compliant
armv8-7-a-feats += ${armv8-6-a-feats}
FEAT_LIST := ${armv8-7-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.8 and upwards.
ifeq "8.8" "$(word 1, $(sort 8.8 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.7 Compliant
armv8-7-a-feats += ${armv8-7-a-feats}
FEAT_LIST := ${armv8-8-a-feats}
endif
# Enable the features which are mandatory from ARCH version 8.9 and upwards.
ifeq "8.9" "$(word 1, $(sort 8.9 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
ENABLE_FEAT_TCR2 ?= 1
armv8-9-a-feats := ENABLE_FEAT_TCR2
# 8.8 Compliant
armv8-9-a-feats += ${armv8-8-a-feats}
FEAT_LIST := ${armv8-9-a-feats}
endif
# Enable the features which are mandatory from ARCH version 9.0 and upwards.
ifeq "9.0" "$(word 1, $(sort 9.0 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.5 Compliant
armv9-0-a-feats += ${armv8-5-a-feats}
FEAT_LIST := ${armv9-0-a-feats}
endif
# Enable the features which are mandatory from ARCH version 9.1 and upwards.
ifeq "9.1" "$(word 1, $(sort 9.1 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.6 and 9.0 Compliant
armv9-1-a-feats += ${armv8-6-a-feats} ${armv9-0-a-feats}
FEAT_LIST := ${armv9-1-a-feats}
endif
# Enable the features which are mandatory from ARCH version 9.2 and upwards.
ifeq "9.2" "$(word 1, $(sort 9.2 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.7 and 9.1 Compliant
armv9-2-a-feats += ${armv8-7-a-feats} ${armv9-1-a-feats}
FEAT_LIST := ${armv9-2-a-feats}
endif
# Enable the features which are mandatory from ARCH version 9.3 and upwards.
ifeq "9.3" "$(word 1, $(sort 9.3 $(ARM_ARCH_MAJOR).$(ARM_ARCH_MINOR)))"
# 8.8 and 9.2 Compliant
armv9-3-a-feats += ${armv8-8-a-feats} ${armv9-2-a-feats}
FEAT_LIST := ${armv9-3-a-feats}
endif
# Set all FEAT_* in FEAT_LIST to '1' if they are not yet defined or set
# from build commandline options or platform makefile.
$(eval $(call default_ones, ${sort ${FEAT_LIST}}))
#
################################################################################
# Set mandatory features by default to zero.
# Set mandatory features by default to zero, if they are not already updated.
################################################################################
#
@ -298,9 +362,6 @@ ENABLE_FEAT_S1POE ?= 0
# 9.0
#----
# Flag to enable Realm Management Extension (FEAT_RME).
ENABLE_RME ?= 0
# Scalable Matrix Extension for non-secure world.
ENABLE_SME_FOR_NS ?= 0
@ -326,6 +387,9 @@ endif
# 9.2
#----
# Flag to enable Realm Management Extension (FEAT_RME).
ENABLE_RME ?= 0
# Scalable Matrix Extension version 2 for non-secure world.
ENABLE_SME2_FOR_NS ?= 0

12
make_helpers/build_macros.mk

@ -50,6 +50,18 @@ define default_zeros
$(foreach var,$1,$(eval $(call default_zero,$(var))))
endef
# Convenience function for setting a variable to 1 if not previously set
# $(eval $(call default_one,FOO))
define default_one
$(eval $(1) ?= 1)
endef
# Convenience function for setting a list of variables to 1 if not previously set
# $(eval $(call default_ones,FOO BAR))
define default_ones
$(foreach var,$1,$(eval $(call default_one,$(var))))
endef
# Convenience function for adding build definitions
# $(eval $(call add_define,FOO)) will have:
# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise

11
make_helpers/march.mk

@ -1,5 +1,5 @@
#
# Copyright (c) 2023, Arm Limited. All rights reserved.
# Copyright (c) 2023-2024, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
@ -82,4 +82,13 @@ endif # not clang
march-directive := -march=${provided-march}
# Set the compiler's architecture feature modifiers
ifneq ($(arch-features), none)
# Strip "none+" from arch-features
arch-features := $(subst none+,,$(arch-features))
march-directive := $(march-directive)+$(arch-features)
# Print features
$(info Arm Architecture Features specified: $(subst +, ,$(arch-features)))
endif #(arch-features)
endif # MARCH_DIRECTIVE

Loading…
Cancel
Save