blob: b69533df8066041bfb7f7f8837769e1a7175b99d [file] [log] [blame]
Masahiro Yamada22433fc2014-02-04 17:24:27 +09001# ==========================================================================
2# Cleaning up
3# ==========================================================================
Tom Rinif32c8642016-01-14 18:24:44 -05004#
5# SPDX-License-Identifier: GPL-2.0
6#
Masahiro Yamada22433fc2014-02-04 17:24:27 +09007
8src := $(obj)
9
10PHONY := __clean
11__clean:
12
Masahiro Yamada98bd0e02015-07-05 01:56:55 +090013include scripts/Kbuild.include
Masahiro Yamada22433fc2014-02-04 17:24:27 +090014
15# The filename Kbuild has precedence over Makefile
16kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
17include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
18
19# Figure out what we need to build from the various variables
20# ==========================================================================
21
22__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
23subdir-y += $(__subdir-y)
24__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
25subdir-m += $(__subdir-m)
Masahiro Yamada22433fc2014-02-04 17:24:27 +090026__subdir- := $(patsubst %/,%,$(filter %/, $(obj-)))
27subdir- += $(__subdir-)
28
29# Subdirectories we need to descend into
30
31subdir-ym := $(sort $(subdir-y) $(subdir-m))
Masahiro Yamada176d0982014-10-30 11:06:13 +090032subdir-ymn := $(sort $(subdir-ym) $(subdir-))
Masahiro Yamada22433fc2014-02-04 17:24:27 +090033
34# Add subdir path
35
36subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
37
Masahiro Yamadaefcf8612014-02-04 17:24:40 +090038# Temporal work-around for U-Boot
39
Masahiro Yamada6bd04bb2014-03-28 14:55:02 +090040subdir-ymn := $(foreach f, $(subdir-ymn), \
41 $(if $(wildcard $(srctree)/$f/Makefile),$f))
Masahiro Yamadaefcf8612014-02-04 17:24:40 +090042
Masahiro Yamada22433fc2014-02-04 17:24:27 +090043# build a list of files to remove, usually relative to the current
44# directory
45
Masahiro Yamada021f0492014-09-05 01:56:51 +090046__clean-files := $(extra-y) $(extra-m) $(extra-) \
47 $(always) $(targets) $(clean-files) \
Masahiro Yamada22433fc2014-02-04 17:24:27 +090048 $(host-progs) \
49 $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
50
51__clean-files := $(filter-out $(no-clean-files), $(__clean-files))
52
Masahiro Yamada98bd0e02015-07-05 01:56:55 +090053# clean-files is given relative to the current directory, unless it
54# starts with $(objtree)/ (which means "./", so do not add "./" unless
55# you want to delete a file from the toplevel object directory).
Masahiro Yamada22433fc2014-02-04 17:24:27 +090056
57__clean-files := $(wildcard \
Masahiro Yamada98bd0e02015-07-05 01:56:55 +090058 $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
59 $(filter $(objtree)/%, $(__clean-files)))
Masahiro Yamada22433fc2014-02-04 17:24:27 +090060
Masahiro Yamada98bd0e02015-07-05 01:56:55 +090061# same as clean-files
Masahiro Yamada22433fc2014-02-04 17:24:27 +090062
63__clean-dirs := $(wildcard \
Masahiro Yamada98bd0e02015-07-05 01:56:55 +090064 $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \
65 $(filter $(objtree)/%, $(clean-dirs)))
Masahiro Yamada22433fc2014-02-04 17:24:27 +090066
67# ==========================================================================
68
69quiet_cmd_clean = CLEAN $(obj)
70 cmd_clean = rm -f $(__clean-files)
71quiet_cmd_cleandir = CLEAN $(__clean-dirs)
72 cmd_cleandir = rm -rf $(__clean-dirs)
73
74
75__clean: $(subdir-ymn)
76ifneq ($(strip $(__clean-files)),)
77 +$(call cmd,clean)
78endif
79ifneq ($(strip $(__clean-dirs)),)
80 +$(call cmd,cleandir)
81endif
Masahiro Yamada22433fc2014-02-04 17:24:27 +090082 @:
83
84
85# ===========================================================================
86# Generic stuff
87# ===========================================================================
88
89# Descending
90# ---------------------------------------------------------------------------
91
92PHONY += $(subdir-ymn)
93$(subdir-ymn):
94 $(Q)$(MAKE) $(clean)=$@
95
Masahiro Yamada22433fc2014-02-04 17:24:27 +090096# Declare the contents of the .PHONY variable as phony. We keep that
97# information in a variable se we can use it in if_changed and friends.
98
99.PHONY: $(PHONY)