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