11da177e4SLinus Torvalds# ========================================================================== 21da177e4SLinus Torvalds# Cleaning up 31da177e4SLinus Torvalds# ========================================================================== 41da177e4SLinus Torvalds 51da177e4SLinus Torvaldssrc := $(obj) 61da177e4SLinus Torvalds 74f193362SPaul SmithPHONY := __clean 81da177e4SLinus Torvalds__clean: 91da177e4SLinus Torvalds 10371fdc77SMasahiro Yamadainclude scripts/Kbuild.include 112315c6e4SSam Ravnborg 122a691470SSam Ravnborg# The filename Kbuild has precedence over Makefile 13db8c1a7bSSam Ravnborgkbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 14db8c1a7bSSam Ravnborginclude $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile) 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds# Figure out what we need to build from the various variables 171da177e4SLinus Torvalds# ========================================================================== 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 201da177e4SLinus Torvaldssubdir-y += $(__subdir-y) 211da177e4SLinus Torvalds__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) 221da177e4SLinus Torvaldssubdir-m += $(__subdir-m) 231da177e4SLinus Torvalds__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) 241da177e4SLinus Torvaldssubdir- += $(__subdir-) 251da177e4SLinus Torvalds 261da177e4SLinus Torvalds# Subdirectories we need to descend into 271da177e4SLinus Torvalds 281da177e4SLinus Torvaldssubdir-ym := $(sort $(subdir-y) $(subdir-m)) 29a4954fd7SMasahiro Yamadasubdir-ymn := $(sort $(subdir-ym) $(subdir-)) 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds# Add subdir path 321da177e4SLinus Torvalds 331da177e4SLinus Torvaldssubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 341da177e4SLinus Torvalds 353156fd05SRobert P. J. Day# build a list of files to remove, usually relative to the current 361da177e4SLinus Torvalds# directory 371da177e4SLinus Torvalds 389d5db894SMasahiro Yamada__clean-files := $(extra-y) $(extra-m) $(extra-) \ 399d5db894SMasahiro Yamada $(always) $(targets) $(clean-files) \ 401da177e4SLinus Torvalds $(host-progs) \ 411da177e4SLinus Torvalds $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 421da177e4SLinus Torvalds 43ef8ff89bSMichal Marek__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) 44ef8ff89bSMichal Marek 45a16c5f99SMichal Marek# clean-files is given relative to the current directory, unless it 46a16c5f99SMichal Marek# starts with $(objtree)/ (which means "./", so do not add "./" unless 47a16c5f99SMichal Marek# you want to delete a file from the toplevel object directory). 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds__clean-files := $(wildcard \ 50a16c5f99SMichal Marek $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \ 51a16c5f99SMichal Marek $(filter $(objtree)/%, $(__clean-files))) 521da177e4SLinus Torvalds 53a16c5f99SMichal Marek# same as clean-files 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds__clean-dirs := $(wildcard \ 56a16c5f99SMichal Marek $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \ 57a16c5f99SMichal Marek $(filter $(objtree)/%, $(clean-dirs))) 581da177e4SLinus Torvalds 591da177e4SLinus Torvalds# ========================================================================== 601da177e4SLinus Torvalds 611da177e4SLinus Torvaldsquiet_cmd_clean = CLEAN $(obj) 621da177e4SLinus Torvalds cmd_clean = rm -f $(__clean-files) 631da177e4SLinus Torvaldsquiet_cmd_cleandir = CLEAN $(__clean-dirs) 641da177e4SLinus Torvalds cmd_cleandir = rm -rf $(__clean-dirs) 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds 671da177e4SLinus Torvalds__clean: $(subdir-ymn) 681da177e4SLinus Torvaldsifneq ($(strip $(__clean-files)),) 691da177e4SLinus Torvalds +$(call cmd,clean) 701da177e4SLinus Torvaldsendif 711da177e4SLinus Torvaldsifneq ($(strip $(__clean-dirs)),) 721da177e4SLinus Torvalds +$(call cmd,cleandir) 731da177e4SLinus Torvaldsendif 741da177e4SLinus Torvalds @: 751da177e4SLinus Torvalds 761da177e4SLinus Torvalds 771da177e4SLinus Torvalds# =========================================================================== 781da177e4SLinus Torvalds# Generic stuff 791da177e4SLinus Torvalds# =========================================================================== 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds# Descending 821da177e4SLinus Torvalds# --------------------------------------------------------------------------- 831da177e4SLinus Torvalds 844f193362SPaul SmithPHONY += $(subdir-ymn) 851da177e4SLinus Torvalds$(subdir-ymn): 861da177e4SLinus Torvalds $(Q)$(MAKE) $(clean)=$@ 871da177e4SLinus Torvalds 884f193362SPaul Smith# Declare the contents of the .PHONY variable as phony. We keep that 894f193362SPaul Smith# information in a variable se we can use it in if_changed and friends. 904f193362SPaul Smith 914f193362SPaul Smith.PHONY: $(PHONY) 92