1500d40d8SLeon Chen# 2500d40d8SLeon Chen# Copyright (c) 2022, MediaTek Inc. All rights reserved. 3500d40d8SLeon Chen# 4500d40d8SLeon Chen# SPDX-License-Identifier: BSD-3-Clause 5500d40d8SLeon Chen# 6500d40d8SLeon Chen 7500d40d8SLeon Chen# Get local directory path 8500d40d8SLeon Chendefine GET_LOCAL_DIR 9500d40d8SLeon Chen$(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))) 10500d40d8SLeon Chenendef 11500d40d8SLeon Chen 12500d40d8SLeon Chen# Clear module source variable 13500d40d8SLeon Chendefine CLEAR_LOCAL_SRCS 14500d40d8SLeon Chen$(eval $(1) :=) 15500d40d8SLeon Chenendef 16500d40d8SLeon Chen 17500d40d8SLeon Chendefine EXPAND_SUB_MAKEFILE 18500d40d8SLeon Cheninclude $(S) 19500d40d8SLeon Chenendef 20500d40d8SLeon Chen 21500d40d8SLeon Chen# Expand sub rules.mk 22500d40d8SLeon Chendefine INCLUDE_MAKEFILE 23500d40d8SLeon Chen$(eval MODULES_SUB_MAKEFILE := $(patsubst %,%/rules.mk,$(1))) 24500d40d8SLeon Chen$(foreach S,$(MODULES_SUB_MAKEFILE),$(eval $(EXPAND_SUB_MAKEFILE))) 25500d40d8SLeon Chenendef 26500d40d8SLeon Chen 27500d40d8SLeon Chen# Determine option variable is defined or not then define it 28500d40d8SLeon Chendefine add_defined_option 29500d40d8SLeon Chenifdef $(1) 30500d40d8SLeon Chenifeq ($(strip $(value $(1))),y) 31500d40d8SLeon ChenDEFINES += -D$(1)$(if $(value $(1)),=1,) 32a1cc10a9SHsin-Hsiung Wangelse ifneq ($(strip $(value $(1))),n) 333af4eb50SChris KayDEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),) 34500d40d8SLeon Chenendif 35500d40d8SLeon Chenendif 36500d40d8SLeon Chenendef 37500d40d8SLeon Chen 38500d40d8SLeon Chendefine EXPAND_RULES_MAKEFILE 39500d40d8SLeon ChenLOCAL_SRCS-y := 40500d40d8SLeon ChenMODULE := 41500d40d8SLeon ChenSUB_RULES-y := 42500d40d8SLeon Cheninclude $(S) 43500d40d8SLeon Chenendef 44500d40d8SLeon Chen 45500d40d8SLeon Chen# INCLUDE_MODULES macro expand included modules rules.mk 46500d40d8SLeon Chen# Arguments: 47500d40d8SLeon Chen# $(1) = MODULES variables 48500d40d8SLeon Chendefine INCLUDE_MODULES 49500d40d8SLeon Chen$(eval MODULES_TEMP := $(1)) 50500d40d8SLeon Chen$(eval MODULES_MAKEFILE := $(patsubst %,%/rules.mk,$(MODULES_TEMP))) 51500d40d8SLeon Chen$(foreach S,$(MODULES_MAKEFILE),$(eval $(EXPAND_RULES_MAKEFILE))) 52500d40d8SLeon Chenendef 53500d40d8SLeon Chen 54500d40d8SLeon Chen# MAKE_LOCALS expand module source file variable to BL${BL}_SOURCES 55500d40d8SLeon Chen# Arguments: 56500d40d8SLeon Chen# $(1) = source file 57500d40d8SLeon Chen# $(2) = BL stage (1, 2, 2u, 31, 32) 58500d40d8SLeon Chendefine MAKE_LOCALS 59500d40d8SLeon Chen$(eval $(call uppercase,$(2))_SOURCES += $(1)) 60500d40d8SLeon Chenendef 61500d40d8SLeon Chen 62500d40d8SLeon Chen# MAKE_MODULE reference MAKE_OBJS. 63500d40d8SLeon Chen# Create module folder under out/bl$(BL)/$(module) 64500d40d8SLeon Chen# Arguments: 65500d40d8SLeon Chen# $(1) = module name 66500d40d8SLeon Chen# $(2) = source file 67500d40d8SLeon Chen# $(3) = BL stage 68500d40d8SLeon Chendefine MAKE_MODULE 69500d40d8SLeon Chen $(eval MODULE := $(strip $(1))) 70500d40d8SLeon Chen $(eval BUILD_DIR := ${BUILD_PLAT}/${3}) 71500d40d8SLeon Chen $(eval SOURCES := $(2)) 72500d40d8SLeon Chen $(eval OBJS_TEMP := $(addprefix $(BUILD_DIR)/$(MODULE)/,$(call SOURCES_TO_OBJS,$(SOURCES)))) 73500d40d8SLeon Chen $(eval MODULE_OBJS += $(OBJS_TEMP)) 74*c7105798SGavin Liu $(eval BL := $(call uppercase,$(3))) 75500d40d8SLeon Chen 76*c7105798SGavin Liu$(eval $(call MAKE_OBJS,$(BUILD_DIR)/$(MODULE),$(SOURCES),${3},$(BL))) 77500d40d8SLeon Chen 78500d40d8SLeon Chenlibraries: $(OBJS_TEMP) 79500d40d8SLeon Chenendef 80500d40d8SLeon Chen 81500d40d8SLeon Chen# Include MTK configuration files 82500d40d8SLeon Chen 83500d40d8SLeon Chen# MTK makefile variables 84ef988aedSRex-BC Chenifeq (${COREBOOT},1) 85ef988aedSRex-BC ChenMTK_COMMON_CFG := $(MTK_PLAT)/common/coreboot_config.mk 86ef988aedSRex-BC Chenelse 87ef988aedSRex-BC ChenMTK_COMMON_CFG := $(MTK_PLAT)/common/common_config.mk 88ef988aedSRex-BC Chenendif 89500d40d8SLeon ChenMTK_PLAT := plat/mediatek 90500d40d8SLeon ChenMTK_PLAT_SOC := ${MTK_PLAT}/${MTK_SOC} 91500d40d8SLeon ChenMTK_PLAT_CFG := $(MTK_PLAT_SOC)/plat_config.mk 92500d40d8SLeon ChenMTK_PROJECT_CFG := $(MTK_PLAT)/project/$(PLAT)/project_config.mk 93500d40d8SLeon ChenMTK_OPTIONS := $(MTK_PLAT)/build_helpers/options.mk 94500d40d8SLeon ChenMTK_COND_EVAL := $(MTK_PLAT)/build_helpers/conditional_eval_options.mk 95500d40d8SLeon Chen 9652035deeSLeon ChenMTK_BL := bl31 979c41cc18SHsin-Hsiung Wang 98500d40d8SLeon Chen# Include common, platform, board level config 99500d40d8SLeon Cheninclude $(MTK_COMMON_CFG) 100500d40d8SLeon Cheninclude $(MTK_PLAT_CFG) 101500d40d8SLeon Chen-include $(MTK_PROJECT_CFG) 102500d40d8SLeon Cheninclude $(MTK_COND_EVAL) 103500d40d8SLeon Cheninclude $(MTK_OPTIONS) 104