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