# SPDX-License-Identifier: GPL-2.0
# ==========================================================================
# Cleaning up
# ==========================================================================

src := $(obj)

PHONY := __clean
__clean:

include scripts/Kbuild.include

# The filename Kbuild has precedence over Makefile
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)

# Figure out what we need to build from the various variables
# ==========================================================================

subdir-ymn := $(sort $(subdir-y) $(subdir-m) $(subdir-) \
		$(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m) $(obj-))))

# Add subdir path

subdir-ymn	:= $(addprefix $(obj)/,$(subdir-ymn))

# build a list of files to remove, usually relative to the current
# directory

__clean-files	:= $(extra-y) $(extra-m) $(extra-)       \
		   $(always) $(targets) $(clean-files)   \
		   $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
		   $(hostlibs-y) $(hostlibs-m) $(hostlibs-) \
		   $(hostcxxlibs-y) $(hostcxxlibs-m)

__clean-files   := $(filter-out $(no-clean-files), $(__clean-files))

# clean-files is given relative to the current directory, unless it
# starts with $(objtree)/ (which means "./", so do not add "./" unless
# you want to delete a file from the toplevel object directory).

__clean-files   := $(wildcard                                               \
		   $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
		   $(filter $(objtree)/%, $(__clean-files)))

# ==========================================================================

quiet_cmd_clean = CLEAN   $(obj)
      cmd_clean = rm -rf $(__clean-files)

__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
	$(call cmd,clean)
endif
	@:


# ===========================================================================
# Generic stuff
# ===========================================================================

# Descending
# ---------------------------------------------------------------------------

PHONY += $(subdir-ymn)
$(subdir-ymn):
	$(Q)$(MAKE) $(clean)=$@

.PHONY: $(PHONY)
