1# 2# Copyright (c) 2022, MediaTek Inc. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6 7# Get local directory path 8define GET_LOCAL_DIR 9$(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))) 10endef 11 12# Clear module source variable 13define CLEAR_LOCAL_SRCS 14$(eval $(1) :=) 15endef 16 17define EXPAND_SUB_MAKEFILE 18include $(S) 19endef 20 21# Expand sub rules.mk 22define INCLUDE_MAKEFILE 23$(eval MODULES_SUB_MAKEFILE := $(patsubst %,%/rules.mk,$(1))) 24$(foreach S,$(MODULES_SUB_MAKEFILE),$(eval $(EXPAND_SUB_MAKEFILE))) 25endef 26 27# Determine option variable is defined or not then define it 28define add_defined_option 29ifdef $(1) 30ifeq ($(strip $(value $(1))),y) 31DEFINES += -D$(1)$(if $(value $(1)),=1,) 32else ifneq ($(strip $(value $(1))),n) 33DEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),) 34endif 35endif 36endef 37 38define EXPAND_RULES_MAKEFILE 39LOCAL_SRCS-y := 40MODULE := 41SUB_RULES-y := 42include $(S) 43endef 44 45# INCLUDE_MODULES macro expand included modules rules.mk 46# Arguments: 47# $(1) = MODULES variables 48define INCLUDE_MODULES 49$(eval MODULES_TEMP := $(1)) 50$(eval MODULES_MAKEFILE := $(patsubst %,%/rules.mk,$(MODULES_TEMP))) 51$(foreach S,$(MODULES_MAKEFILE),$(eval $(EXPAND_RULES_MAKEFILE))) 52endef 53 54# MAKE_LOCALS expand module source file variable to BL${BL}_SOURCES 55# Arguments: 56# $(1) = source file 57# $(2) = BL stage (1, 2, 2u, 31, 32) 58define MAKE_LOCALS 59$(eval $(call uppercase,$(2))_SOURCES += $(1)) 60endef 61 62# MAKE_MODULE reference MAKE_OBJS. 63# Create module folder under out/bl$(BL)/$(module) 64# Arguments: 65# $(1) = module name 66# $(2) = source file 67# $(3) = BL stage 68define MAKE_MODULE 69 $(eval MODULE := $(strip $(1))) 70 $(eval BUILD_DIR := ${BUILD_PLAT}/${3}) 71 $(eval SOURCES := $(2)) 72 $(eval OBJS_TEMP := $(addprefix $(BUILD_DIR)/$(MODULE)/,$(call SOURCES_TO_OBJS,$(SOURCES)))) 73 $(eval MODULE_OBJS += $(OBJS_TEMP)) 74 75$(eval $(call MAKE_OBJS,$(BUILD_DIR)/$(MODULE),$(SOURCES),${3})) 76 77libraries: $(OBJS_TEMP) 78endef 79 80# Include MTK configuration files 81 82# MTK makefile variables 83ifeq (${COREBOOT},1) 84MTK_COMMON_CFG := $(MTK_PLAT)/common/coreboot_config.mk 85else 86MTK_COMMON_CFG := $(MTK_PLAT)/common/common_config.mk 87endif 88MTK_PLAT := plat/mediatek 89MTK_PLAT_SOC := ${MTK_PLAT}/${MTK_SOC} 90MTK_PLAT_CFG := $(MTK_PLAT_SOC)/plat_config.mk 91MTK_PROJECT_CFG := $(MTK_PLAT)/project/$(PLAT)/project_config.mk 92MTK_OPTIONS := $(MTK_PLAT)/build_helpers/options.mk 93MTK_COND_EVAL := $(MTK_PLAT)/build_helpers/conditional_eval_options.mk 94 95MTK_BL := bl31 96 97# Include common, platform, board level config 98include $(MTK_COMMON_CFG) 99include $(MTK_PLAT_CFG) 100-include $(MTK_PROJECT_CFG) 101include $(MTK_COND_EVAL) 102include $(MTK_OPTIONS) 103