122433fc5SMasahiro Yamada# ========================================================================== 222433fc5SMasahiro Yamada# Cleaning up 322433fc5SMasahiro Yamada# ========================================================================== 4*f32c8649STom Rini# 5*f32c8649STom Rini# SPDX-License-Identifier: GPL-2.0 6*f32c8649STom Rini# 722433fc5SMasahiro Yamada 822433fc5SMasahiro Yamadasrc := $(obj) 922433fc5SMasahiro Yamada 1022433fc5SMasahiro YamadaPHONY := __clean 1122433fc5SMasahiro Yamada__clean: 1222433fc5SMasahiro Yamada 1398bd0e0dSMasahiro Yamadainclude scripts/Kbuild.include 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)) 32176d0982SMasahiro 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 5398bd0e0dSMasahiro Yamada# clean-files is given relative to the current directory, unless it 5498bd0e0dSMasahiro Yamada# starts with $(objtree)/ (which means "./", so do not add "./" unless 5598bd0e0dSMasahiro Yamada# you want to delete a file from the toplevel object directory). 5622433fc5SMasahiro Yamada 5722433fc5SMasahiro Yamada__clean-files := $(wildcard \ 5898bd0e0dSMasahiro Yamada $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \ 5998bd0e0dSMasahiro Yamada $(filter $(objtree)/%, $(__clean-files))) 6022433fc5SMasahiro Yamada 6198bd0e0dSMasahiro Yamada# same as clean-files 6222433fc5SMasahiro Yamada 6322433fc5SMasahiro Yamada__clean-dirs := $(wildcard \ 6498bd0e0dSMasahiro Yamada $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \ 6598bd0e0dSMasahiro Yamada $(filter $(objtree)/%, $(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 Yamada @: 8322433fc5SMasahiro Yamada 8422433fc5SMasahiro Yamada 8522433fc5SMasahiro Yamada# =========================================================================== 8622433fc5SMasahiro Yamada# Generic stuff 8722433fc5SMasahiro Yamada# =========================================================================== 8822433fc5SMasahiro Yamada 8922433fc5SMasahiro Yamada# Descending 9022433fc5SMasahiro Yamada# --------------------------------------------------------------------------- 9122433fc5SMasahiro Yamada 9222433fc5SMasahiro YamadaPHONY += $(subdir-ymn) 9322433fc5SMasahiro Yamada$(subdir-ymn): 9422433fc5SMasahiro Yamada $(Q)$(MAKE) $(clean)=$@ 9522433fc5SMasahiro Yamada 9622433fc5SMasahiro Yamada# Declare the contents of the .PHONY variable as phony. We keep that 9722433fc5SMasahiro Yamada# information in a variable se we can use it in if_changed and friends. 9822433fc5SMasahiro Yamada 9922433fc5SMasahiro Yamada.PHONY: $(PHONY) 100