162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci# ==========================================================================
362306a36Sopenharmony_ci# Cleaning up
462306a36Sopenharmony_ci# ==========================================================================
562306a36Sopenharmony_ci
662306a36Sopenharmony_cisrc := $(obj)
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciPHONY := __clean
962306a36Sopenharmony_ci__clean:
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciinclude $(srctree)/scripts/Kbuild.include
1262306a36Sopenharmony_ciinclude $(kbuild-file)
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci# Figure out what we need to build from the various variables
1562306a36Sopenharmony_ci# ==========================================================================
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cisubdir-ymn := $(sort $(subdir-y) $(subdir-m) $(subdir-) \
1862306a36Sopenharmony_ci		$(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m) $(obj-))))
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci# Add subdir path
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cisubdir-ymn	:= $(addprefix $(obj)/,$(subdir-ymn))
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci# build a list of files to remove, usually relative to the current
2562306a36Sopenharmony_ci# directory
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci__clean-files	:= \
2862306a36Sopenharmony_ci	$(clean-files) $(targets) $(hostprogs) $(userprogs) \
2962306a36Sopenharmony_ci	$(extra-y) $(extra-m) $(extra-) \
3062306a36Sopenharmony_ci	$(always-y) $(always-m) $(always-) \
3162306a36Sopenharmony_ci	$(hostprogs-always-y) $(hostprogs-always-m) $(hostprogs-always-) \
3262306a36Sopenharmony_ci	$(userprogs-always-y) $(userprogs-always-m) $(userprogs-always-)
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci__clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci__clean-files   := $(wildcard $(addprefix $(obj)/, $(__clean-files)))
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci# ==========================================================================
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci# To make this rule robust against "Argument list too long" error,
4162306a36Sopenharmony_ci# remove $(obj)/ prefix, and restore it by a shell command.
4262306a36Sopenharmony_ciquiet_cmd_clean = CLEAN   $(obj)
4362306a36Sopenharmony_ci      cmd_clean = printf '$(obj)/%s ' $(patsubst $(obj)/%,%,$(__clean-files)) | xargs rm -rf
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci__clean: $(subdir-ymn)
4662306a36Sopenharmony_ciifneq ($(strip $(__clean-files)),)
4762306a36Sopenharmony_ci	$(call cmd,clean)
4862306a36Sopenharmony_ciendif
4962306a36Sopenharmony_ci	@:
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci# ===========================================================================
5362306a36Sopenharmony_ci# Generic stuff
5462306a36Sopenharmony_ci# ===========================================================================
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci# Descending
5762306a36Sopenharmony_ci# ---------------------------------------------------------------------------
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciPHONY += $(subdir-ymn)
6062306a36Sopenharmony_ci$(subdir-ymn):
6162306a36Sopenharmony_ci	$(Q)$(MAKE) $(clean)=$@
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci.PHONY: $(PHONY)
64