11da177e4SLinus Torvalds# ========================================================================== 21da177e4SLinus Torvalds# Cleaning up 31da177e4SLinus Torvalds# ========================================================================== 41da177e4SLinus Torvalds 51da177e4SLinus Torvaldssrc := $(obj) 61da177e4SLinus Torvalds 71da177e4SLinus Torvalds.PHONY: __clean 81da177e4SLinus Torvalds__clean: 91da177e4SLinus Torvalds 10*2315c6e4SSam Ravnborg# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir 11*2315c6e4SSam Ravnborg# Usage: 12*2315c6e4SSam Ravnborg# $(Q)$(MAKE) $(clean)=dir 13*2315c6e4SSam Ravnborgclean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj 14*2315c6e4SSam Ravnborg 152a691470SSam Ravnborg# The filename Kbuild has precedence over Makefile 162a691470SSam Ravnborginclude $(if $(wildcard $(srctree)/$(src)/Kbuild), \ 172a691470SSam Ravnborg $(srctree)/$(src)/Kbuild, $(srctree)/$(src)/Makefile) 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds# Figure out what we need to build from the various variables 201da177e4SLinus Torvalds# ========================================================================== 211da177e4SLinus Torvalds 221da177e4SLinus Torvalds__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 231da177e4SLinus Torvaldssubdir-y += $(__subdir-y) 241da177e4SLinus Torvalds__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) 251da177e4SLinus Torvaldssubdir-m += $(__subdir-m) 261da177e4SLinus Torvalds__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n))) 271da177e4SLinus Torvaldssubdir-n += $(__subdir-n) 281da177e4SLinus Torvalds__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) 291da177e4SLinus Torvaldssubdir- += $(__subdir-) 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds# Subdirectories we need to descend into 321da177e4SLinus Torvalds 331da177e4SLinus Torvaldssubdir-ym := $(sort $(subdir-y) $(subdir-m)) 341da177e4SLinus Torvaldssubdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds# Add subdir path 371da177e4SLinus Torvalds 381da177e4SLinus Torvaldssubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds# build a list of files to remove, usually releative to the current 411da177e4SLinus Torvalds# directory 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds__clean-files := $(extra-y) $(EXTRA_TARGETS) $(always) \ 441da177e4SLinus Torvalds $(targets) $(clean-files) \ 451da177e4SLinus Torvalds $(host-progs) \ 461da177e4SLinus Torvalds $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 471da177e4SLinus Torvalds 481da177e4SLinus Torvalds# as clean-files is given relative to the current directory, this adds 491da177e4SLinus Torvalds# a $(obj) prefix, except for absolute paths 501da177e4SLinus Torvalds 511da177e4SLinus Torvalds__clean-files := $(wildcard \ 521da177e4SLinus Torvalds $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ 531da177e4SLinus Torvalds $(filter /%, $(__clean-files))) 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds# as clean-dirs is given relative to the current directory, this adds 561da177e4SLinus Torvalds# a $(obj) prefix, except for absolute paths 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds__clean-dirs := $(wildcard \ 591da177e4SLinus Torvalds $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ 601da177e4SLinus Torvalds $(filter /%, $(clean-dirs))) 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds# ========================================================================== 631da177e4SLinus Torvalds 641da177e4SLinus Torvaldsquiet_cmd_clean = CLEAN $(obj) 651da177e4SLinus Torvalds cmd_clean = rm -f $(__clean-files) 661da177e4SLinus Torvaldsquiet_cmd_cleandir = CLEAN $(__clean-dirs) 671da177e4SLinus Torvalds cmd_cleandir = rm -rf $(__clean-dirs) 681da177e4SLinus Torvalds 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds__clean: $(subdir-ymn) 711da177e4SLinus Torvaldsifneq ($(strip $(__clean-files)),) 721da177e4SLinus Torvalds +$(call cmd,clean) 731da177e4SLinus Torvaldsendif 741da177e4SLinus Torvaldsifneq ($(strip $(__clean-dirs)),) 751da177e4SLinus Torvalds +$(call cmd,cleandir) 761da177e4SLinus Torvaldsendif 771da177e4SLinus Torvaldsifneq ($(strip $(clean-rule)),) 781da177e4SLinus Torvalds +$(clean-rule) 791da177e4SLinus Torvaldsendif 801da177e4SLinus Torvalds @: 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds# =========================================================================== 841da177e4SLinus Torvalds# Generic stuff 851da177e4SLinus Torvalds# =========================================================================== 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds# Descending 881da177e4SLinus Torvalds# --------------------------------------------------------------------------- 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds.PHONY: $(subdir-ymn) 911da177e4SLinus Torvalds$(subdir-ymn): 921da177e4SLinus Torvalds $(Q)$(MAKE) $(clean)=$@ 931da177e4SLinus Torvalds 941da177e4SLinus Torvalds# If quiet is set, only print short version of command 951da177e4SLinus Torvalds 961da177e4SLinus Torvaldscmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) 97