# 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) $(always-y) $(always-m) $(always-) $(targets) $(clean-files)   \
		   $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-) $(userprogs) \
		   $(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)
