xref: /linux/scripts/Makefile.clean (revision 2315c6e42278152360470124ce903ecb8c97270a)
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