1*53ee8cc1Swenshuai.xi# ========================================================================== 2*53ee8cc1Swenshuai.xi# Cleaning up 3*53ee8cc1Swenshuai.xi# ========================================================================== 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xisrc := $(obj) 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xiPHONY := __clean 8*53ee8cc1Swenshuai.xi__clean: 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir 11*53ee8cc1Swenshuai.xi# Usage: 12*53ee8cc1Swenshuai.xi# $(Q)$(MAKE) $(clean)=dir 13*53ee8cc1Swenshuai.xiclean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi# The filename Kbuild has precedence over Makefile 16*53ee8cc1Swenshuai.xikbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 17*53ee8cc1Swenshuai.xiinclude $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile) 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi# Figure out what we need to build from the various variables 20*53ee8cc1Swenshuai.xi# ========================================================================== 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 23*53ee8cc1Swenshuai.xisubdir-y += $(__subdir-y) 24*53ee8cc1Swenshuai.xi__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) 25*53ee8cc1Swenshuai.xisubdir-m += $(__subdir-m) 26*53ee8cc1Swenshuai.xi__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n))) 27*53ee8cc1Swenshuai.xisubdir-n += $(__subdir-n) 28*53ee8cc1Swenshuai.xi__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) 29*53ee8cc1Swenshuai.xisubdir- += $(__subdir-) 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi# Subdirectories we need to descend into 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xisubdir-ym := $(sort $(subdir-y) $(subdir-m)) 34*53ee8cc1Swenshuai.xisubdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi# Add subdir path 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xisubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi# build a list of files to remove, usually relative to the current 41*53ee8cc1Swenshuai.xi# directory 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi__clean-files := $(extra-y) $(always) \ 44*53ee8cc1Swenshuai.xi $(targets) $(clean-files) \ 45*53ee8cc1Swenshuai.xi $(host-progs) \ 46*53ee8cc1Swenshuai.xi $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi# as clean-files is given relative to the current directory, this adds 51*53ee8cc1Swenshuai.xi# a $(obj) prefix, except for absolute paths 52*53ee8cc1Swenshuai.xi 53*53ee8cc1Swenshuai.xi__clean-files := $(wildcard \ 54*53ee8cc1Swenshuai.xi $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ 55*53ee8cc1Swenshuai.xi $(filter /%, $(__clean-files))) 56*53ee8cc1Swenshuai.xi 57*53ee8cc1Swenshuai.xi# as clean-dirs is given relative to the current directory, this adds 58*53ee8cc1Swenshuai.xi# a $(obj) prefix, except for absolute paths 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi__clean-dirs := $(wildcard \ 61*53ee8cc1Swenshuai.xi $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ 62*53ee8cc1Swenshuai.xi $(filter /%, $(clean-dirs))) 63*53ee8cc1Swenshuai.xi 64*53ee8cc1Swenshuai.xi# ========================================================================== 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xiquiet_cmd_clean = CLEAN $(obj) 67*53ee8cc1Swenshuai.xi cmd_clean = rm -f $(__clean-files) 68*53ee8cc1Swenshuai.xiquiet_cmd_cleandir = CLEAN $(__clean-dirs) 69*53ee8cc1Swenshuai.xi cmd_cleandir = rm -rf $(__clean-dirs) 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi 72*53ee8cc1Swenshuai.xi__clean: $(subdir-ymn) 73*53ee8cc1Swenshuai.xiifneq ($(strip $(__clean-files)),) 74*53ee8cc1Swenshuai.xi +$(call cmd,clean) 75*53ee8cc1Swenshuai.xiendif 76*53ee8cc1Swenshuai.xiifneq ($(strip $(__clean-dirs)),) 77*53ee8cc1Swenshuai.xi +$(call cmd,cleandir) 78*53ee8cc1Swenshuai.xiendif 79*53ee8cc1Swenshuai.xiifneq ($(strip $(clean-rule)),) 80*53ee8cc1Swenshuai.xi +$(clean-rule) 81*53ee8cc1Swenshuai.xiendif 82*53ee8cc1Swenshuai.xi @: 83*53ee8cc1Swenshuai.xi 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi# =========================================================================== 86*53ee8cc1Swenshuai.xi# Generic stuff 87*53ee8cc1Swenshuai.xi# =========================================================================== 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi# Descending 90*53ee8cc1Swenshuai.xi# --------------------------------------------------------------------------- 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xiPHONY += $(subdir-ymn) 93*53ee8cc1Swenshuai.xi$(subdir-ymn): 94*53ee8cc1Swenshuai.xi $(Q)$(MAKE) $(clean)=$@ 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi# If quiet is set, only print short version of command 97*53ee8cc1Swenshuai.xi 98*53ee8cc1Swenshuai.xicmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi 101*53ee8cc1Swenshuai.xi# Declare the contents of the .PHONY variable as phony. We keep that 102*53ee8cc1Swenshuai.xi# information in a variable se we can use it in if_changed and friends. 103*53ee8cc1Swenshuai.xi 104*53ee8cc1Swenshuai.xi.PHONY: $(PHONY) 105