1*53ee8cc1Swenshuai.xi# ========================================================================== 2*53ee8cc1Swenshuai.xi# Generating modules.builtin 3*53ee8cc1Swenshuai.xi# ========================================================================== 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xisrc := $(obj) 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xiPHONY := __modbuiltin 8*53ee8cc1Swenshuai.xi__modbuiltin: 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi-include include/config/auto.conf 11*53ee8cc1Swenshuai.xi# tristate.conf sets tristate variables to uppercase 'Y' or 'M' 12*53ee8cc1Swenshuai.xi# That way, we get the list of built-in modules in obj-Y 13*53ee8cc1Swenshuai.xi-include include/config/tristate.conf 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xiinclude scripts/Kbuild.include 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xiifneq ($(KBUILD_SRC),) 18*53ee8cc1Swenshuai.xi# Create output directory if not already present 19*53ee8cc1Swenshuai.xi_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) 20*53ee8cc1Swenshuai.xiendif 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi# The filename Kbuild has precedence over Makefile 23*53ee8cc1Swenshuai.xikbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 24*53ee8cc1Swenshuai.xikbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) 25*53ee8cc1Swenshuai.xiinclude $(kbuild-file) 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xiinclude scripts/Makefile.lib 28*53ee8cc1Swenshuai.xi__subdir-Y := $(patsubst %/,%,$(filter %/, $(obj-Y))) 29*53ee8cc1Swenshuai.xisubdir-Y += $(__subdir-Y) 30*53ee8cc1Swenshuai.xisubdir-ym := $(sort $(subdir-y) $(subdir-Y) $(subdir-m)) 31*53ee8cc1Swenshuai.xisubdir-ym := $(addprefix $(obj)/,$(subdir-ym)) 32*53ee8cc1Swenshuai.xiobj-Y := $(addprefix $(obj)/,$(obj-Y)) 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.ximodbuiltin-subdirs := $(patsubst %,%/modules.builtin, $(subdir-ym)) 35*53ee8cc1Swenshuai.ximodbuiltin-mods := $(filter %.ko, $(obj-Y:.o=.ko)) 36*53ee8cc1Swenshuai.ximodbuiltin-target := $(obj)/modules.builtin 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi__modbuiltin: $(modbuiltin-target) $(subdir-ym) 39*53ee8cc1Swenshuai.xi @: 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi$(modbuiltin-target): $(subdir-ym) FORCE 42*53ee8cc1Swenshuai.xi $(Q)(for m in $(modbuiltin-mods); do echo kernel/$$m; done; \ 43*53ee8cc1Swenshuai.xi cat /dev/null $(modbuiltin-subdirs)) > $@ 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xiPHONY += FORCE 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xiFORCE: 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi# Descending 50*53ee8cc1Swenshuai.xi# --------------------------------------------------------------------------- 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xiPHONY += $(subdir-ym) 53*53ee8cc1Swenshuai.xi$(subdir-ym): 54*53ee8cc1Swenshuai.xi $(Q)$(MAKE) $(modbuiltin)=$@ 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi# Declare the contents of the .PHONY variable as phony. We keep that 58*53ee8cc1Swenshuai.xi# information in a variable se we can use it in if_changed and friends. 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi.PHONY: $(PHONY) 61