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