Browse Source

Merge changes from topic "vendor_makefile_extension" into integration

* changes:
  feat(plat/mediatek/build_helpers): introduce mtk makefile
  build(makefile): add extra makefile variable for extension
pull/1985/head
Manish Pandey 3 years ago
committed by TrustedFirmware Code Review
parent
commit
357dd7f69e
  1. 8
      make_helpers/build_macros.mk
  2. 51
      plat/mediatek/build_helpers/conditional_eval_options.mk
  3. 139
      plat/mediatek/build_helpers/mtk_build_helpers.mk
  4. 30
      plat/mediatek/build_helpers/mtk_build_helpers_epilogue.mk
  5. 17
      plat/mediatek/build_helpers/options.mk

8
make_helpers/build_macros.mk

@ -1,5 +1,5 @@
# #
# Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved. # Copyright (c) 2015-2022, ARM Limited and Contributors. All rights reserved.
# #
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -489,6 +489,10 @@ ifeq ($(USE_ROMLIB),1)
$(ELF): romlib.bin $(ELF): romlib.bin
endif endif
# MODULE_OBJS can be assigned by vendors with different compiled
# object file path, and prebuilt object file path.
$(eval OBJS += $(MODULE_OBJS))
$(ELF): $(OBJS) $(LINKERFILE) | $(1)_dirs libraries $(BL_LIBS) $(ELF): $(OBJS) $(LINKERFILE) | $(1)_dirs libraries $(BL_LIBS)
$$(ECHO) " LD $$@" $$(ECHO) " LD $$@"
ifdef MAKE_BUILD_STRINGS ifdef MAKE_BUILD_STRINGS
@ -507,7 +511,7 @@ ifneq ($(findstring armlink,$(notdir $(LD))),)
$(BUILD_DIR)/build_message.o $(OBJS) $(BUILD_DIR)/build_message.o $(OBJS)
else ifneq ($(findstring gcc,$(notdir $(LD))),) else ifneq ($(findstring gcc,$(notdir $(LD))),)
$$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) -Wl,-Map=$(MAPFILE) \ $$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) -Wl,-Map=$(MAPFILE) \
-Wl,-T$(LINKERFILE) $(BUILD_DIR)/build_message.o \ -Wl,-dT $(LINKERFILE) $(EXTRA_LINKERFILE) $(BUILD_DIR)/build_message.o \
$(OBJS) $(LDPATHS) $(LIBWRAPPER) $(LDLIBS) $(BL_LIBS) $(OBJS) $(LDPATHS) $(LIBWRAPPER) $(LDLIBS) $(BL_LIBS)
else else
$$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) $(BL_LDFLAGS) -Map=$(MAPFILE) \ $$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) $(BL_LDFLAGS) -Map=$(MAPFILE) \

51
plat/mediatek/build_helpers/conditional_eval_options.mk

@ -0,0 +1,51 @@
#
# Copyright (c) 2022, MediaTek Inc. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Conditional makefile variable assignment
# Options depend on BUILD_TYPE variable
ifeq ($(BUILD_TYPE),release)
MTK_DEBUGSYS_LOCK := 1
MTK_GET_PERM_DIS := 1
ERRATA_KLEIN_2218950 := 0
ERRATA_KLEIN_2184257 := 0
ERRATA_KLEIN_BOOKER := 0
ERRATA_MTH_BOOKER := 0
ERRATA_MTHELP_BOOKER := 0
CRASH_REPORTING := 1
CONFIG_MTK_BL31_RAMDUMP := 0
endif
ifeq ($(BUILD_TYPE),debug)
MTK_PTP3_PROC_DEBUG := 1
MTK_SRAMRC_DEBUG := 1
MTK_IOMMU_DEBUG := 1
MTK_DCM_DEBUG := 1
MTK_EMI_MPU_DEBUG := 1
endif
ifeq (${SPD},none)
SPD_NONE:=1
$(eval $(call add_define,SPD_NONE))
endif
# TEE OS config
ifeq ($(SPD), tbase)
CONFIG_TBASE := y
endif
# MICROTRUST OS config
ifeq ($(SPD), teeid)
CONFIG_MICROTRUST_TEEI := y
endif
ifeq (${CONFIG_ARCH_ARM_V8_2},y)
ARCH_VERSION := armv8_2
endif
ifeq (${CONFIG_ARCH_ARM_V9},y)
ARCH_VERSION := armv9
endif

139
plat/mediatek/build_helpers/mtk_build_helpers.mk

@ -0,0 +1,139 @@
#
# Copyright (c) 2022, MediaTek Inc. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Get local directory path
define GET_LOCAL_DIR
$(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))))
endef
# Clear module source variable
define CLEAR_LOCAL_SRCS
$(eval $(1) :=)
endef
define EXPAND_SUB_MAKEFILE
include $(S)
endef
# Expand sub rules.mk
define INCLUDE_MAKEFILE
$(eval MODULES_SUB_MAKEFILE := $(patsubst %,%/rules.mk,$(1)))
$(foreach S,$(MODULES_SUB_MAKEFILE),$(eval $(EXPAND_SUB_MAKEFILE)))
endef
# Determine option variable is defined or not then define it
define add_defined_option
ifdef $(1)
ifeq ($(findstring $(value $(1)), $(uppercase_table)),)
DEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),)
else
ifeq ($(strip $(value $(1))),y)
DEFINES += -D$(1)$(if $(value $(1)),=1,)
endif
endif
endif
endef
define EXPAND_RULES_MAKEFILE
LOCAL_SRCS-y :=
MODULE :=
SUB_RULES-y :=
include $(S)
endef
# INCLUDE_MODULES macro expand included modules rules.mk
# Arguments:
# $(1) = MODULES variables
define INCLUDE_MODULES
$(eval MODULES_TEMP := $(1))
$(eval MODULES_MAKEFILE := $(patsubst %,%/rules.mk,$(MODULES_TEMP)))
$(foreach S,$(MODULES_MAKEFILE),$(eval $(EXPAND_RULES_MAKEFILE)))
endef
# MAKE_LOCALS expand module source file variable to BL${BL}_SOURCES
# Arguments:
# $(1) = source file
# $(2) = BL stage (1, 2, 2u, 31, 32)
define MAKE_LOCALS
$(eval $(call uppercase,$(2))_SOURCES += $(1))
endef
# MAKE_LINKERFILE change linker script source file name to
# target linker script
# $(1) = linker script source file
# $(2) = BL stage
define MAKE_LINKERFILE
$(eval EXTRA_GENERATED_LINKER_SCRIPT += $(BUILD_PLAT)/$(2)/$(patsubst %.ld.S,%.ld,$(notdir $(1))))
endef
# MAKE_LINKERFILE_ITER call MAKE_LINKERFILE iteratively
# $(1) = linker script source file
# $(2) = BL stage
define MAKE_LINKERFILE_ITER
$(eval $(foreach link_src,$(1),$(call MAKE_LINKERFILE,$(link_src),$(2))))
endef
# MAKE_LD_ITER generate the linker scripts using the C preprocessor iteratively
# $(1) = output linker script
# $(2) = input template
# $(3) = BL stage (1, 2, 2u, 31, 32)
define MAKE_LD_ITER
$(eval index_list=$(shell seq $(words $(1))))
$(eval $(foreach i, $(index_list), \
$(call MAKE_LD,$(word $(i), $(1)), $(word $(i), $(2)),$(3))))
endef
# MAKE_MODULE reference MAKE_OBJS.
# Create module folder under out/bl$(BL)/$(module)
# Arguments:
# $(1) = module name
# $(2) = source file
# $(3) = BL stage
define MAKE_MODULE
$(eval MODULE := $(strip $(1)))
$(eval BUILD_DIR := ${BUILD_PLAT}/${3})
$(eval SOURCES := $(2))
$(eval OBJS_TEMP := $(addprefix $(BUILD_DIR)/$(MODULE)/,$(call SOURCES_TO_OBJS,$(SOURCES))))
$(eval MODULE_OBJS += $(OBJS_TEMP))
# We use sort only to get a list of unique object directory names.
# ordering is not relevant but sort removes duplicates.
$(eval TEMP_OBJ_DIRS := $(sort $(dir ${OBJS_TEMP} ${LINKERFILE})))
# The $(dir ) function leaves a trailing / on the directory names
# Rip off the / to match directory names with make rule targets.
$(eval OBJ_DIRS := $(patsubst %/,%,$(TEMP_OBJ_DIRS)))
$(eval $(foreach objd,${OBJ_DIRS},$(call MAKE_PREREQ_DIR,${objd},${BUILD_DIR})))
${3}_dirs: | ${OBJ_DIRS}
$(eval $(call MAKE_OBJS,$(BUILD_DIR)/$(MODULE),$(SOURCES),${3}))
libraries: $(OBJS_TEMP)
endef
# Include MTK configuration files
# MTK makefile variables
MTK_PLAT := plat/mediatek
MTK_PLAT_SOC := ${MTK_PLAT}/${MTK_SOC}
MTK_COMMON_CFG := $(MTK_PLAT)/common/common_config.mk
MTK_PLAT_CFG := $(MTK_PLAT_SOC)/plat_config.mk
MTK_PROJECT_CFG := $(MTK_PLAT)/project/$(PLAT)/project_config.mk
MTK_OPTIONS := $(MTK_PLAT)/build_helpers/options.mk
MTK_COND_EVAL := $(MTK_PLAT)/build_helpers/conditional_eval_options.mk
# Indicate which BL should be built in command line
ifeq (${NEED_BL31},yes)
MTK_BL := bl31
endif
ifeq (${NEED_BL32},yes)
MTK_BL := bl32
endif
# Include common, platform, board level config
include $(MTK_COMMON_CFG)
include $(MTK_PLAT_CFG)
-include $(MTK_PROJECT_CFG)
include $(MTK_COND_EVAL)
include $(MTK_OPTIONS)

30
plat/mediatek/build_helpers/mtk_build_helpers_epilogue.mk

@ -0,0 +1,30 @@
#
# Copyright (c) 2022, MediaTek Inc. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Expand include modules
$(eval $(call INCLUDE_MODULES,$(MODULES-y)))
# Make next section align to page size
ifneq ($(MTK_EXTRA_LINKERFILE),)
$(eval $(call MAKE_LINKERFILE_ITER,$(MTK_LINKERFILE_SOURCE),bl31))
# EXTRA_GENERATED_LINKER_SCRIPT is a global variable of derived linker
# script list(from MTK_LINKERFILE_SOURCE) after MAKE_LINKERFILE_ITER
# function call
EXTRA_LINKERFILE += ${EXTRA_GENERATED_LINKER_SCRIPT}
# Expand derived linker script as build target
$(eval $(call MAKE_LD_ITER, $(EXTRA_GENERATED_LINKER_SCRIPT),$(MTK_LINKERFILE_SOURCE),bl31))
# mtk_align.ld MUST BE THE LAST LINKER SCRIPT!
EXTRA_LINKERFILE += ${MTK_PLAT}/include/mtk_align.ld
# bl31.ld should depend on EXTRA_LINKERFILE
$(eval ${BUILD_PLAT}/bl31/bl31.ld: ${EXTRA_LINKERFILE})
EXTRA_LINKERFILE := $(addprefix -T,$(EXTRA_LINKERFILE))
else
EXTRA_LINKERFILE :=
endif

17
plat/mediatek/build_helpers/options.mk

@ -0,0 +1,17 @@
#
# Copyright (c) 2022, MediaTek Inc. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# call add_defined_option to evaluate MTK defined value
$(eval $(call add_defined_option,MTK_SIP_KERNEL_BOOT_ENABLE))
$(eval $(call add_defined_option,PLAT_EXTRA_LD_SCRIPT))
$(eval $(call add_defined_option,MTK_EXTRA_LINKERFILE))
$(eval $(call add_defined_option,MTK_BL31_AS_BL2))
$(eval $(call add_defined_option,MTK_BL33_IS_64BIT))
$(eval $(call add_defined_option,PLAT_XLAT_TABLES_DYNAMIC))
$(eval $(call add_defined_option,MTK_ADAPTED))
$(eval $(call add_defined_option,MTK_SOC))
$(eval $(call add_defined_option,UART_CLOCK))
$(eval $(call add_defined_option,UART_BAUDRATE))
Loading…
Cancel
Save