122433fc5SMasahiro Yamada# ========================================================================== 222433fc5SMasahiro Yamada# Cleaning up 322433fc5SMasahiro Yamada# ========================================================================== 422433fc5SMasahiro Yamada 522433fc5SMasahiro Yamadasrc := $(obj) 622433fc5SMasahiro Yamada 722433fc5SMasahiro YamadaPHONY := __clean 822433fc5SMasahiro Yamada__clean: 922433fc5SMasahiro Yamada 1022433fc5SMasahiro Yamada# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir 1122433fc5SMasahiro Yamada# Usage: 1222433fc5SMasahiro Yamada# $(Q)$(MAKE) $(clean)=dir 1322433fc5SMasahiro Yamadaclean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj 1422433fc5SMasahiro Yamada 1522433fc5SMasahiro Yamada# The filename Kbuild has precedence over Makefile 1622433fc5SMasahiro Yamadakbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 1722433fc5SMasahiro Yamadainclude $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile) 1822433fc5SMasahiro Yamada 1922433fc5SMasahiro Yamada# Figure out what we need to build from the various variables 2022433fc5SMasahiro Yamada# ========================================================================== 2122433fc5SMasahiro Yamada 2222433fc5SMasahiro Yamada__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 2322433fc5SMasahiro Yamadasubdir-y += $(__subdir-y) 2422433fc5SMasahiro Yamada__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) 2522433fc5SMasahiro Yamadasubdir-m += $(__subdir-m) 2622433fc5SMasahiro Yamada__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n))) 2722433fc5SMasahiro Yamadasubdir-n += $(__subdir-n) 2822433fc5SMasahiro Yamada__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) 2922433fc5SMasahiro Yamadasubdir- += $(__subdir-) 3022433fc5SMasahiro Yamada 3122433fc5SMasahiro Yamada# Subdirectories we need to descend into 3222433fc5SMasahiro Yamada 3322433fc5SMasahiro Yamadasubdir-ym := $(sort $(subdir-y) $(subdir-m)) 3422433fc5SMasahiro Yamadasubdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) 3522433fc5SMasahiro Yamada 3622433fc5SMasahiro Yamada# Add subdir path 3722433fc5SMasahiro Yamada 3822433fc5SMasahiro Yamadasubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 3922433fc5SMasahiro Yamada 40efcf8619SMasahiro Yamada# Temporal work-around for U-Boot 41efcf8619SMasahiro Yamada 42*6bd04bb4SMasahiro Yamadasubdir-ymn := $(foreach f, $(subdir-ymn), \ 43*6bd04bb4SMasahiro Yamada $(if $(wildcard $(srctree)/$f/Makefile),$f)) 44efcf8619SMasahiro Yamada 4522433fc5SMasahiro Yamada# build a list of files to remove, usually relative to the current 4622433fc5SMasahiro Yamada# directory 4722433fc5SMasahiro Yamada 4822433fc5SMasahiro Yamada__clean-files := $(extra-y) $(always) \ 4922433fc5SMasahiro Yamada $(targets) $(clean-files) \ 5022433fc5SMasahiro Yamada $(host-progs) \ 5122433fc5SMasahiro Yamada $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 5222433fc5SMasahiro Yamada 5322433fc5SMasahiro Yamada__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) 5422433fc5SMasahiro Yamada 5522433fc5SMasahiro Yamada# as clean-files is given relative to the current directory, this adds 5622433fc5SMasahiro Yamada# a $(obj) prefix, except for absolute paths 5722433fc5SMasahiro Yamada 5822433fc5SMasahiro Yamada__clean-files := $(wildcard \ 5922433fc5SMasahiro Yamada $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ 6022433fc5SMasahiro Yamada $(filter /%, $(__clean-files))) 6122433fc5SMasahiro Yamada 6222433fc5SMasahiro Yamada# as clean-dirs is given relative to the current directory, this adds 6322433fc5SMasahiro Yamada# a $(obj) prefix, except for absolute paths 6422433fc5SMasahiro Yamada 6522433fc5SMasahiro Yamada__clean-dirs := $(wildcard \ 6622433fc5SMasahiro Yamada $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ 6722433fc5SMasahiro Yamada $(filter /%, $(clean-dirs))) 6822433fc5SMasahiro Yamada 6922433fc5SMasahiro Yamada# ========================================================================== 7022433fc5SMasahiro Yamada 7122433fc5SMasahiro Yamadaquiet_cmd_clean = CLEAN $(obj) 7222433fc5SMasahiro Yamada cmd_clean = rm -f $(__clean-files) 7322433fc5SMasahiro Yamadaquiet_cmd_cleandir = CLEAN $(__clean-dirs) 7422433fc5SMasahiro Yamada cmd_cleandir = rm -rf $(__clean-dirs) 7522433fc5SMasahiro Yamada 7622433fc5SMasahiro Yamada 7722433fc5SMasahiro Yamada__clean: $(subdir-ymn) 7822433fc5SMasahiro Yamadaifneq ($(strip $(__clean-files)),) 7922433fc5SMasahiro Yamada +$(call cmd,clean) 8022433fc5SMasahiro Yamadaendif 8122433fc5SMasahiro Yamadaifneq ($(strip $(__clean-dirs)),) 8222433fc5SMasahiro Yamada +$(call cmd,cleandir) 8322433fc5SMasahiro Yamadaendif 8422433fc5SMasahiro Yamadaifneq ($(strip $(clean-rule)),) 8522433fc5SMasahiro Yamada +$(clean-rule) 8622433fc5SMasahiro Yamadaendif 8722433fc5SMasahiro Yamada @: 8822433fc5SMasahiro Yamada 8922433fc5SMasahiro Yamada 9022433fc5SMasahiro Yamada# =========================================================================== 9122433fc5SMasahiro Yamada# Generic stuff 9222433fc5SMasahiro Yamada# =========================================================================== 9322433fc5SMasahiro Yamada 9422433fc5SMasahiro Yamada# Descending 9522433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 9622433fc5SMasahiro Yamada 9722433fc5SMasahiro YamadaPHONY += $(subdir-ymn) 9822433fc5SMasahiro Yamada$(subdir-ymn): 9922433fc5SMasahiro Yamada $(Q)$(MAKE) $(clean)=$@ 10022433fc5SMasahiro Yamada 10122433fc5SMasahiro Yamada# If quiet is set, only print short version of command 10222433fc5SMasahiro Yamada 10322433fc5SMasahiro Yamadacmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) 10422433fc5SMasahiro Yamada 10522433fc5SMasahiro Yamada 10622433fc5SMasahiro Yamada# Declare the contents of the .PHONY variable as phony. We keep that 10722433fc5SMasahiro Yamada# information in a variable se we can use it in if_changed and friends. 10822433fc5SMasahiro Yamada 10922433fc5SMasahiro Yamada.PHONY: $(PHONY) 110