122433fc5SMasahiro Yamada# ========================================================================== 222433fc5SMasahiro Yamada# Cleaning up 322433fc5SMasahiro Yamada# ========================================================================== 422433fc5SMasahiro Yamada 522433fc5SMasahiro Yamadasrc := $(obj) 622433fc5SMasahiro Yamada 722433fc5SMasahiro YamadaPHONY := __clean 822433fc5SMasahiro Yamada__clean: 922433fc5SMasahiro Yamada 10*98bd0e0dSMasahiro Yamadainclude scripts/Kbuild.include 1122433fc5SMasahiro Yamada 1222433fc5SMasahiro Yamada# The filename Kbuild has precedence over Makefile 1322433fc5SMasahiro Yamadakbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) 1422433fc5SMasahiro Yamadainclude $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile) 1522433fc5SMasahiro Yamada 1622433fc5SMasahiro Yamada# Figure out what we need to build from the various variables 1722433fc5SMasahiro Yamada# ========================================================================== 1822433fc5SMasahiro Yamada 1922433fc5SMasahiro Yamada__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) 2022433fc5SMasahiro Yamadasubdir-y += $(__subdir-y) 2122433fc5SMasahiro Yamada__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) 2222433fc5SMasahiro Yamadasubdir-m += $(__subdir-m) 2322433fc5SMasahiro Yamada__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) 2422433fc5SMasahiro Yamadasubdir- += $(__subdir-) 2522433fc5SMasahiro Yamada 2622433fc5SMasahiro Yamada# Subdirectories we need to descend into 2722433fc5SMasahiro Yamada 2822433fc5SMasahiro Yamadasubdir-ym := $(sort $(subdir-y) $(subdir-m)) 29176d0982SMasahiro Yamadasubdir-ymn := $(sort $(subdir-ym) $(subdir-)) 3022433fc5SMasahiro Yamada 3122433fc5SMasahiro Yamada# Add subdir path 3222433fc5SMasahiro Yamada 3322433fc5SMasahiro Yamadasubdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) 3422433fc5SMasahiro Yamada 35efcf8619SMasahiro Yamada# Temporal work-around for U-Boot 36efcf8619SMasahiro Yamada 376bd04bb4SMasahiro Yamadasubdir-ymn := $(foreach f, $(subdir-ymn), \ 386bd04bb4SMasahiro Yamada $(if $(wildcard $(srctree)/$f/Makefile),$f)) 39efcf8619SMasahiro Yamada 4022433fc5SMasahiro Yamada# build a list of files to remove, usually relative to the current 4122433fc5SMasahiro Yamada# directory 4222433fc5SMasahiro Yamada 43021f0495SMasahiro Yamada__clean-files := $(extra-y) $(extra-m) $(extra-) \ 44021f0495SMasahiro Yamada $(always) $(targets) $(clean-files) \ 4522433fc5SMasahiro Yamada $(host-progs) \ 4622433fc5SMasahiro Yamada $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 4722433fc5SMasahiro Yamada 4822433fc5SMasahiro Yamada__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) 4922433fc5SMasahiro Yamada 50*98bd0e0dSMasahiro Yamada# clean-files is given relative to the current directory, unless it 51*98bd0e0dSMasahiro Yamada# starts with $(objtree)/ (which means "./", so do not add "./" unless 52*98bd0e0dSMasahiro Yamada# you want to delete a file from the toplevel object directory). 5322433fc5SMasahiro Yamada 5422433fc5SMasahiro Yamada__clean-files := $(wildcard \ 55*98bd0e0dSMasahiro Yamada $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \ 56*98bd0e0dSMasahiro Yamada $(filter $(objtree)/%, $(__clean-files))) 5722433fc5SMasahiro Yamada 58*98bd0e0dSMasahiro Yamada# same as clean-files 5922433fc5SMasahiro Yamada 6022433fc5SMasahiro Yamada__clean-dirs := $(wildcard \ 61*98bd0e0dSMasahiro Yamada $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \ 62*98bd0e0dSMasahiro Yamada $(filter $(objtree)/%, $(clean-dirs))) 6322433fc5SMasahiro Yamada 6422433fc5SMasahiro Yamada# ========================================================================== 6522433fc5SMasahiro Yamada 6622433fc5SMasahiro Yamadaquiet_cmd_clean = CLEAN $(obj) 6722433fc5SMasahiro Yamada cmd_clean = rm -f $(__clean-files) 6822433fc5SMasahiro Yamadaquiet_cmd_cleandir = CLEAN $(__clean-dirs) 6922433fc5SMasahiro Yamada cmd_cleandir = rm -rf $(__clean-dirs) 7022433fc5SMasahiro Yamada 7122433fc5SMasahiro Yamada 7222433fc5SMasahiro Yamada__clean: $(subdir-ymn) 7322433fc5SMasahiro Yamadaifneq ($(strip $(__clean-files)),) 7422433fc5SMasahiro Yamada +$(call cmd,clean) 7522433fc5SMasahiro Yamadaendif 7622433fc5SMasahiro Yamadaifneq ($(strip $(__clean-dirs)),) 7722433fc5SMasahiro Yamada +$(call cmd,cleandir) 7822433fc5SMasahiro Yamadaendif 7922433fc5SMasahiro Yamada @: 8022433fc5SMasahiro Yamada 8122433fc5SMasahiro Yamada 8222433fc5SMasahiro Yamada# =========================================================================== 8322433fc5SMasahiro Yamada# Generic stuff 8422433fc5SMasahiro Yamada# =========================================================================== 8522433fc5SMasahiro Yamada 8622433fc5SMasahiro Yamada# Descending 8722433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 8822433fc5SMasahiro Yamada 8922433fc5SMasahiro YamadaPHONY += $(subdir-ymn) 9022433fc5SMasahiro Yamada$(subdir-ymn): 9122433fc5SMasahiro Yamada $(Q)$(MAKE) $(clean)=$@ 9222433fc5SMasahiro Yamada 9322433fc5SMasahiro Yamada# Declare the contents of the .PHONY variable as phony. We keep that 9422433fc5SMasahiro Yamada# information in a variable se we can use it in if_changed and friends. 9522433fc5SMasahiro Yamada 9622433fc5SMasahiro Yamada.PHONY: $(PHONY) 97