blob: a095ba9150cd2abcb614cd3dc3fe2dffa46ea65f [file] [log] [blame]
Leon Chen500d40d2022-03-24 10:55:08 +08001#
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)
Leon Chen500d40d2022-03-24 10:55:08 +080030ifeq ($(strip $(value $(1))),y)
31DEFINES += -D$(1)$(if $(value $(1)),=1,)
Hsin-Hsiung Wanga1cc10a2024-07-12 14:58:05 +080032else ifneq ($(strip $(value $(1))),n)
Chris Kay3af4eb52024-05-29 22:09:26 +000033DEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),)
Leon Chen500d40d2022-03-24 10:55:08 +080034endif
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
Leon Chen500d40d2022-03-24 10:55:08 +080062# 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))
Gavin Liuc7105792025-01-14 22:36:33 +080074 $(eval BL := $(call uppercase,$(3)))
Leon Chen500d40d2022-03-24 10:55:08 +080075
Gavin Liuc7105792025-01-14 22:36:33 +080076$(eval $(call MAKE_OBJS,$(BUILD_DIR)/$(MODULE),$(SOURCES),${3},$(BL)))
Leon Chen500d40d2022-03-24 10:55:08 +080077
78libraries: $(OBJS_TEMP)
79endef
80
81# Include MTK configuration files
82
83# MTK makefile variables
Rex-BC Chenef988ae2022-08-09 19:37:25 +080084ifeq (${COREBOOT},1)
85MTK_COMMON_CFG := $(MTK_PLAT)/common/coreboot_config.mk
86else
87MTK_COMMON_CFG := $(MTK_PLAT)/common/common_config.mk
88endif
Leon Chen500d40d2022-03-24 10:55:08 +080089MTK_PLAT := plat/mediatek
90MTK_PLAT_SOC := ${MTK_PLAT}/${MTK_SOC}
Leon Chen500d40d2022-03-24 10:55:08 +080091MTK_PLAT_CFG := $(MTK_PLAT_SOC)/plat_config.mk
92MTK_PROJECT_CFG := $(MTK_PLAT)/project/$(PLAT)/project_config.mk
93MTK_OPTIONS := $(MTK_PLAT)/build_helpers/options.mk
94MTK_COND_EVAL := $(MTK_PLAT)/build_helpers/conditional_eval_options.mk
95
Leon Chen52035de2022-06-20 10:25:35 +080096MTK_BL := bl31
Hsin-Hsiung Wang9c41cc12023-11-16 09:31:19 +080097
Leon Chen500d40d2022-03-24 10:55:08 +080098# Include common, platform, board level config
99include $(MTK_COMMON_CFG)
100include $(MTK_PLAT_CFG)
101-include $(MTK_PROJECT_CFG)
102include $(MTK_COND_EVAL)
103include $(MTK_OPTIONS)