xref: /arm-trusted-firmware/plat/mediatek/build_helpers/mtk_build_helpers.mk (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu#
2*91f16700Schasinglulu# Copyright (c) 2022, MediaTek Inc. All rights reserved.
3*91f16700Schasinglulu#
4*91f16700Schasinglulu# SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu#
6*91f16700Schasinglulu
7*91f16700Schasinglulu# Get local directory path
8*91f16700Schasingluludefine GET_LOCAL_DIR
9*91f16700Schasinglulu$(patsubst %/,%,$(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))))
10*91f16700Schasingluluendef
11*91f16700Schasinglulu
12*91f16700Schasinglulu# Clear module source variable
13*91f16700Schasingluludefine CLEAR_LOCAL_SRCS
14*91f16700Schasinglulu$(eval $(1) :=)
15*91f16700Schasingluluendef
16*91f16700Schasinglulu
17*91f16700Schasingluludefine EXPAND_SUB_MAKEFILE
18*91f16700Schasingluluinclude $(S)
19*91f16700Schasingluluendef
20*91f16700Schasinglulu
21*91f16700Schasinglulu# Expand sub rules.mk
22*91f16700Schasingluludefine INCLUDE_MAKEFILE
23*91f16700Schasinglulu$(eval MODULES_SUB_MAKEFILE := $(patsubst %,%/rules.mk,$(1)))
24*91f16700Schasinglulu$(foreach S,$(MODULES_SUB_MAKEFILE),$(eval $(EXPAND_SUB_MAKEFILE)))
25*91f16700Schasingluluendef
26*91f16700Schasinglulu
27*91f16700Schasinglulu# Determine option variable is defined or not then define it
28*91f16700Schasingluludefine add_defined_option
29*91f16700Schasingluluifdef $(1)
30*91f16700Schasingluluifeq ($(findstring $(value $(1)), $(uppercase_table)),)
31*91f16700SchasingluluDEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),)
32*91f16700Schasingluluelse
33*91f16700Schasingluluifeq ($(strip $(value $(1))),y)
34*91f16700SchasingluluDEFINES += -D$(1)$(if $(value $(1)),=1,)
35*91f16700Schasingluluendif
36*91f16700Schasingluluendif
37*91f16700Schasingluluendif
38*91f16700Schasingluluendef
39*91f16700Schasinglulu
40*91f16700Schasingluludefine EXPAND_RULES_MAKEFILE
41*91f16700SchasingluluLOCAL_SRCS-y :=
42*91f16700SchasingluluMODULE :=
43*91f16700SchasingluluSUB_RULES-y :=
44*91f16700Schasingluluinclude $(S)
45*91f16700Schasingluluendef
46*91f16700Schasinglulu
47*91f16700Schasinglulu# INCLUDE_MODULES macro expand included modules rules.mk
48*91f16700Schasinglulu# Arguments:
49*91f16700Schasinglulu#   $(1) = MODULES variables
50*91f16700Schasingluludefine INCLUDE_MODULES
51*91f16700Schasinglulu$(eval MODULES_TEMP := $(1))
52*91f16700Schasinglulu$(eval MODULES_MAKEFILE := $(patsubst %,%/rules.mk,$(MODULES_TEMP)))
53*91f16700Schasinglulu$(foreach S,$(MODULES_MAKEFILE),$(eval $(EXPAND_RULES_MAKEFILE)))
54*91f16700Schasingluluendef
55*91f16700Schasinglulu
56*91f16700Schasinglulu# MAKE_LOCALS expand module source file variable to BL${BL}_SOURCES
57*91f16700Schasinglulu# Arguments:
58*91f16700Schasinglulu#   $(1) = source file
59*91f16700Schasinglulu#   $(2) = BL stage (1, 2, 2u, 31, 32)
60*91f16700Schasingluludefine MAKE_LOCALS
61*91f16700Schasinglulu$(eval $(call uppercase,$(2))_SOURCES += $(1))
62*91f16700Schasingluluendef
63*91f16700Schasinglulu
64*91f16700Schasinglulu# MAKE_MODULE reference MAKE_OBJS.
65*91f16700Schasinglulu# Create module folder under out/bl$(BL)/$(module)
66*91f16700Schasinglulu# Arguments:
67*91f16700Schasinglulu#   $(1) = module name
68*91f16700Schasinglulu#   $(2) = source file
69*91f16700Schasinglulu#   $(3) = BL stage
70*91f16700Schasingluludefine MAKE_MODULE
71*91f16700Schasinglulu        $(eval MODULE := $(strip $(1)))
72*91f16700Schasinglulu        $(eval BUILD_DIR  := ${BUILD_PLAT}/${3})
73*91f16700Schasinglulu        $(eval SOURCES    := $(2))
74*91f16700Schasinglulu        $(eval OBJS_TEMP  := $(addprefix $(BUILD_DIR)/$(MODULE)/,$(call SOURCES_TO_OBJS,$(SOURCES))))
75*91f16700Schasinglulu        $(eval MODULE_OBJS += $(OBJS_TEMP))
76*91f16700Schasinglulu        # We use sort only to get a list of unique object directory names.
77*91f16700Schasinglulu        # ordering is not relevant but sort removes duplicates.
78*91f16700Schasinglulu        $(eval TEMP_OBJ_DIRS := $(sort $(dir ${OBJS_TEMP} ${LINKERFILE})))
79*91f16700Schasinglulu        # The $(dir ) function leaves a trailing / on the directory names
80*91f16700Schasinglulu        # Rip off the / to match directory names with make rule targets.
81*91f16700Schasinglulu        $(eval OBJ_DIRS := $(patsubst %/,%,$(TEMP_OBJ_DIRS)))
82*91f16700Schasinglulu
83*91f16700Schasinglulu$(eval $(foreach objd,${OBJ_DIRS},$(call MAKE_PREREQ_DIR,${objd},${BUILD_DIR})))
84*91f16700Schasinglulu${3}_dirs: | ${OBJ_DIRS}
85*91f16700Schasinglulu
86*91f16700Schasinglulu$(eval $(call MAKE_OBJS,$(BUILD_DIR)/$(MODULE),$(SOURCES),${3}))
87*91f16700Schasinglulu
88*91f16700Schasinglululibraries: $(OBJS_TEMP)
89*91f16700Schasingluluendef
90*91f16700Schasinglulu
91*91f16700Schasinglulu# Include MTK configuration files
92*91f16700Schasinglulu
93*91f16700Schasinglulu# MTK makefile variables
94*91f16700Schasingluluifeq (${COREBOOT},1)
95*91f16700SchasingluluMTK_COMMON_CFG := $(MTK_PLAT)/common/coreboot_config.mk
96*91f16700Schasingluluelse
97*91f16700SchasingluluMTK_COMMON_CFG := $(MTK_PLAT)/common/common_config.mk
98*91f16700Schasingluluendif
99*91f16700SchasingluluMTK_PLAT      := plat/mediatek
100*91f16700SchasingluluMTK_PLAT_SOC  := ${MTK_PLAT}/${MTK_SOC}
101*91f16700SchasingluluMTK_PLAT_CFG := $(MTK_PLAT_SOC)/plat_config.mk
102*91f16700SchasingluluMTK_PROJECT_CFG := $(MTK_PLAT)/project/$(PLAT)/project_config.mk
103*91f16700SchasingluluMTK_OPTIONS := $(MTK_PLAT)/build_helpers/options.mk
104*91f16700SchasingluluMTK_COND_EVAL := $(MTK_PLAT)/build_helpers/conditional_eval_options.mk
105*91f16700Schasinglulu
106*91f16700Schasinglulu# Indicate which BL should be built in command line
107*91f16700Schasingluluifeq (${NEED_BL32},yes)
108*91f16700SchasingluluMTK_BL := bl32
109*91f16700Schasingluluelse
110*91f16700SchasingluluMTK_BL := bl31
111*91f16700Schasingluluendif
112*91f16700Schasinglulu# Include common, platform, board level config
113*91f16700Schasingluluinclude $(MTK_COMMON_CFG)
114*91f16700Schasingluluinclude $(MTK_PLAT_CFG)
115*91f16700Schasinglulu-include $(MTK_PROJECT_CFG)
116*91f16700Schasingluluinclude $(MTK_COND_EVAL)
117*91f16700Schasingluluinclude $(MTK_OPTIONS)
118