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