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 13*176d0982SMasahiro Yamadaclean := -f $(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- := $(patsubst %/,%,$(filter %/, $(obj-))) 2722433fc5SMasahiro Yamadasubdir- += $(__subdir-) 2822433fc5SMasahiro Yamada 2922433fc5SMasahiro Yamada# Subdirectories we need to descend into 3022433fc5SMasahiro Yamada 3122433fc5SMasahiro Yamadasubdir-ym := $(sort $(subdir-y) $(subdir-m)) 32*176d0982SMasahiro Yamadasubdir-ymn := $(sort $(subdir-ym) $(subdir-)) 3322433fc5SMasahiro Yamada 3422433fc5SMasahiro Yamada# Add subdir path 3522433fc5SMasahiro Yamada 3622433fc5SMasahiro Yamadasubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 3722433fc5SMasahiro Yamada 38efcf8619SMasahiro Yamada# Temporal work-around for U-Boot 39efcf8619SMasahiro Yamada 406bd04bb4SMasahiro Yamadasubdir-ymn := $(foreach f, $(subdir-ymn), \ 416bd04bb4SMasahiro Yamada $(if $(wildcard $(srctree)/$f/Makefile),$f)) 42efcf8619SMasahiro Yamada 4322433fc5SMasahiro Yamada# build a list of files to remove, usually relative to the current 4422433fc5SMasahiro Yamada# directory 4522433fc5SMasahiro Yamada 46021f0495SMasahiro Yamada__clean-files := $(extra-y) $(extra-m) $(extra-) \ 47021f0495SMasahiro Yamada $(always) $(targets) $(clean-files) \ 4822433fc5SMasahiro Yamada $(host-progs) \ 4922433fc5SMasahiro Yamada $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 5022433fc5SMasahiro Yamada 5122433fc5SMasahiro Yamada__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) 5222433fc5SMasahiro Yamada 5322433fc5SMasahiro Yamada# as clean-files is given relative to the current directory, this adds 5422433fc5SMasahiro Yamada# a $(obj) prefix, except for absolute paths 5522433fc5SMasahiro Yamada 5622433fc5SMasahiro Yamada__clean-files := $(wildcard \ 5722433fc5SMasahiro Yamada $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ 5822433fc5SMasahiro Yamada $(filter /%, $(__clean-files))) 5922433fc5SMasahiro Yamada 6022433fc5SMasahiro Yamada# as clean-dirs is given relative to the current directory, this adds 6122433fc5SMasahiro Yamada# a $(obj) prefix, except for absolute paths 6222433fc5SMasahiro Yamada 6322433fc5SMasahiro Yamada__clean-dirs := $(wildcard \ 6422433fc5SMasahiro Yamada $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ 6522433fc5SMasahiro Yamada $(filter /%, $(clean-dirs))) 6622433fc5SMasahiro Yamada 6722433fc5SMasahiro Yamada# ========================================================================== 6822433fc5SMasahiro Yamada 6922433fc5SMasahiro Yamadaquiet_cmd_clean = CLEAN $(obj) 7022433fc5SMasahiro Yamada cmd_clean = rm -f $(__clean-files) 7122433fc5SMasahiro Yamadaquiet_cmd_cleandir = CLEAN $(__clean-dirs) 7222433fc5SMasahiro Yamada cmd_cleandir = rm -rf $(__clean-dirs) 7322433fc5SMasahiro Yamada 7422433fc5SMasahiro Yamada 7522433fc5SMasahiro Yamada__clean: $(subdir-ymn) 7622433fc5SMasahiro Yamadaifneq ($(strip $(__clean-files)),) 7722433fc5SMasahiro Yamada +$(call cmd,clean) 7822433fc5SMasahiro Yamadaendif 7922433fc5SMasahiro Yamadaifneq ($(strip $(__clean-dirs)),) 8022433fc5SMasahiro Yamada +$(call cmd,cleandir) 8122433fc5SMasahiro Yamadaendif 8222433fc5SMasahiro Yamadaifneq ($(strip $(clean-rule)),) 8322433fc5SMasahiro Yamada +$(clean-rule) 8422433fc5SMasahiro Yamadaendif 8522433fc5SMasahiro Yamada @: 8622433fc5SMasahiro Yamada 8722433fc5SMasahiro Yamada 8822433fc5SMasahiro Yamada# =========================================================================== 8922433fc5SMasahiro Yamada# Generic stuff 9022433fc5SMasahiro Yamada# =========================================================================== 9122433fc5SMasahiro Yamada 9222433fc5SMasahiro Yamada# Descending 9322433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 9422433fc5SMasahiro Yamada 9522433fc5SMasahiro YamadaPHONY += $(subdir-ymn) 9622433fc5SMasahiro Yamada$(subdir-ymn): 9722433fc5SMasahiro Yamada $(Q)$(MAKE) $(clean)=$@ 9822433fc5SMasahiro Yamada 9922433fc5SMasahiro Yamada# If quiet is set, only print short version of command 10022433fc5SMasahiro Yamada 10122433fc5SMasahiro Yamadacmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) 10222433fc5SMasahiro Yamada 10322433fc5SMasahiro Yamada 10422433fc5SMasahiro Yamada# Declare the contents of the .PHONY variable as phony. We keep that 10522433fc5SMasahiro Yamada# information in a variable se we can use it in if_changed and friends. 10622433fc5SMasahiro Yamada 10722433fc5SMasahiro Yamada.PHONY: $(PHONY) 108