linux/scripts/Makefile.clean
<<
>>
Prefs
   1# ==========================================================================
   2# Cleaning up
   3# ==========================================================================
   4
   5src := $(obj)
   6
   7PHONY := __clean
   8__clean:
   9
  10include scripts/Kbuild.include
  11
  12# The filename Kbuild has precedence over Makefile
  13kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
  14include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
  15
  16# Figure out what we need to build from the various variables
  17# ==========================================================================
  18
  19__subdir-y      := $(patsubst %/,%,$(filter %/, $(obj-y)))
  20subdir-y        += $(__subdir-y)
  21__subdir-m      := $(patsubst %/,%,$(filter %/, $(obj-m)))
  22subdir-m        += $(__subdir-m)
  23__subdir-       := $(patsubst %/,%,$(filter %/, $(obj-)))
  24subdir-         += $(__subdir-)
  25
  26# Subdirectories we need to descend into
  27
  28subdir-ym       := $(sort $(subdir-y) $(subdir-m))
  29subdir-ymn      := $(sort $(subdir-ym) $(subdir-))
  30
  31# Add subdir path
  32
  33subdir-ymn      := $(addprefix $(obj)/,$(subdir-ymn))
  34
  35# build a list of files to remove, usually relative to the current
  36# directory
  37
  38__clean-files   := $(extra-y) $(extra-m) $(extra-)       \
  39                   $(always) $(targets) $(clean-files)   \
  40                   $(host-progs)                         \
  41                   $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
  42
  43__clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
  44
  45# clean-files is given relative to the current directory, unless it
  46# starts with $(objtree)/ (which means "./", so do not add "./" unless
  47# you want to delete a file from the toplevel object directory).
  48
  49__clean-files   := $(wildcard                                               \
  50                   $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
  51                   $(filter $(objtree)/%, $(__clean-files)))
  52
  53# same as clean-files
  54
  55__clean-dirs    := $(wildcard                                               \
  56                   $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs)))    \
  57                   $(filter $(objtree)/%, $(clean-dirs)))
  58
  59# ==========================================================================
  60
  61quiet_cmd_clean    = CLEAN   $(obj)
  62      cmd_clean    = rm -f $(__clean-files)
  63quiet_cmd_cleandir = CLEAN   $(__clean-dirs)
  64      cmd_cleandir = rm -rf $(__clean-dirs)
  65
  66
  67__clean: $(subdir-ymn)
  68ifneq ($(strip $(__clean-files)),)
  69        +$(call cmd,clean)
  70endif
  71ifneq ($(strip $(__clean-dirs)),)
  72        +$(call cmd,cleandir)
  73endif
  74        @:
  75
  76
  77# ===========================================================================
  78# Generic stuff
  79# ===========================================================================
  80
  81# Descending
  82# ---------------------------------------------------------------------------
  83
  84PHONY += $(subdir-ymn)
  85$(subdir-ymn):
  86        $(Q)$(MAKE) $(clean)=$@
  87
  88# Declare the contents of the .PHONY variable as phony.  We keep that
  89# information in a variable se we can use it in if_changed and friends.
  90
  91.PHONY: $(PHONY)
  92