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