Messages in this thread Patch in this message | | | Date | Thu, 10 Oct 2002 21:51:31 +0200 | From | Sam Ravnborg <> | Subject | kbuild: Distributed clean infrastructure |
| |
# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.748 -> 1.748.1.1 # Makefile 1.318 -> 1.319 # Rules.make 1.81 -> 1.82 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/10/10 sam@mars.ravnborg.org 1.748.1.1 # kbuild: Distributed clean infrastructure # # Today there is a huge list of files in the top-level Makefile that is # deleted during make clean and make mrproper. # This patch add infrastructure to get rid of this centralised list. # # Within a makefile simply use: # clean-files := files-to-be-deleted # or eventually # clean-rule := command to be executed to delete files # # Files specified by host-progs and EXTRA_TARGETS are deleted during cleaning, # and the same is all *.[oas] .*.cmd .*.tmp .*.d in the visited directories. # # Deleting core files is moved down to mrporper time # # Patches utilising this and the centralised list will dismiss. # # Based on a concept originally made by Kai Germaschewski # -------------------------------------------- # diff -Nru a/Makefile b/Makefile --- a/Makefile Thu Oct 10 21:50:03 2002 +++ b/Makefile Thu Oct 10 21:50:03 2002 @@ -661,10 +661,15 @@ defconfig: yes '' | $(CONFIG_SHELL) $(src)/scripts/Configure -d arch/$(ARCH)/config.in -# Cleaning up -# --------------------------------------------------------------------------- +### +# Cleaning is done on three levels. +# make clean Delete all automatically generated files, including +# tools and firmware. +# make mrproper Delete the current configuration, and related files +# Any core files spread around is deleted as well +# make distclean Remove editor backup files, patch leftover files and the like -# files removed with 'make clean' +# Files removed with 'make clean' CLEAN_FILES += \ include/linux/compile.h \ vmlinux System.map \ @@ -690,7 +695,7 @@ net/khttpd/make_times_h net/khttpd/times.h \ submenu* -# files removed with 'make mrproper' +# Files removed with 'make mrproper' MRPROPER_FILES += \ include/linux/autoconf.h include/linux/version.h \ drivers/net/hamradio/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h \ @@ -712,33 +717,43 @@ tags TAGS kernel.spec \ .tmp* -# directories removed with 'make mrproper' +# Directories removed with 'make mrproper' MRPROPER_DIRS += \ .tmp_export-objs \ include/config \ include/linux/modules -clean: archclean - @echo 'Cleaning up' - @find . $(RCS_FIND_IGNORE) \ - \( -name \*.[oas] -o -name core -o -name .\*.cmd -o \ - -name .\*.tmp -o -name .\*.d \) -type f -print \ - | grep -v lxdialog/ | xargs rm -f - @rm -f $(CLEAN_FILES) - +@$(call descend,Documentation/DocBook,clean) - +# clean - Delete all intermidiate files +# +clean-dirs += $(ALL_SUBDIRS) Documentation/DocBook +cleanprint: + @echo ' Cleaning the srctree' + +$(addprefix _clean_,$(clean-dirs)): cleanprint + +@$(call descend,$(patsubst _clean_%,%,$@), subdirclean) + +quiet_cmd_rmclean = RM $$(CLEAN_FILES) +cmd_rmclean = rm -f $(CLEAN_FILES) +clean: archclean $(addprefix _clean_,$(clean-dirs)) + $(call cmd,rmclean) + +# mrproper - delete configuration + modules + core files +# +quiet_cmd_mrproper = RM $$(MRPROPER_DIRS) + $$(MRPROPER_FILES) +cmd_mrproper = rm -rf $(MRPROPER_DIRS) && rm -f $(MRPROPER_FILES) mrproper: clean archmrproper - @echo 'Making mrproper' + @echo ' Making mrproper in the srctree' @find . $(RCS_FIND_IGNORE) \ - \( -name .depend -o -name .\*.cmd \) \ + \( -name .depend -o -name .\*.cmd -o -name core \) \ -type f -print | xargs rm -f - @rm -rf $(MRPROPER_DIRS) - @rm -f $(MRPROPER_FILES) + $(call cmd,mrproper) +@$(call descend,scripts,mrproper) +@$(call descend,Documentation/DocBook,mrproper) +# distclean - remove all temporaries left behind by patch, vi, emacs etc. +# distclean: mrproper - @echo 'Making distclean' + @echo ' Making distclean in the srctree' @find . $(RCS_FIND_IGNORE) \ \( -not -type d \) -and \ \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ diff -Nru a/Rules.make b/Rules.make --- a/Rules.make Thu Oct 10 21:50:03 2002 +++ b/Rules.make Thu Oct 10 21:50:03 2002 @@ -87,6 +87,7 @@ # Subdirectories we need to descend into subdir-ym := $(sort $(subdir-y) $(subdir-m)) +subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) # export.o is never a composite object, since $(export-objs) has a # fixed meaning (== objects which EXPORT_SYMBOL()) @@ -113,6 +114,10 @@ # Only build module versions for files which are selected to be built export-objs := $(filter $(export-objs),$(real-objs-y) $(real-objs-m)) +host-progs-single := $(foreach m,$(host-progs),$(if $($(m)-objs),,$(m))) +host-progs-multi := $(foreach m,$(host-progs),$(if $($(m)-objs),$(m))) +host-progs-multi-objs := $(foreach m,$(host-progs-multi),$($(m)-objs)) + # Add subdir path EXTRA_TARGETS := $(addprefix $(obj)/,$(EXTRA_TARGETS)) @@ -127,12 +132,19 @@ multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y)) multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m)) subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) +subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) +clean-files := $(addprefix $(obj)/,$(clean-files)) +host-progs := $(addprefix $(obj)/,$(host-progs)) +host-progs-single := $(addprefix $(obj)/,$(host-progs-single)) +host-progs-multi := $(addprefix $(obj)/,$(host-progs-multi)) +host-progs-multi-objs := $(addprefix $(obj)/,$(host-progs-multi-objs)) # The temporary file to save gcc -MD generated dependencies must not # contain a comma depfile = $(subst $(comma),_,$(@D)/.$(@F).d) -# We're called for one of three purposes: +# We're called for one of four purposes: +# o subdirclean: Delete intermidiate files in the current directory # o fastdep: build module version files (.ver) for $(export-objs) in # the current directory # o modules_install: install the modules in the current directory @@ -142,6 +154,13 @@ # When targets are given directly (like foo.o), we just build these # targets (That happens when someone does make some/dir/foo.[ois]) +ifeq ($(MAKECMDGOALS),subdirclean) +subdirclean: $(subdir-ymn) + @/bin/true + @rm -f $(EXTRA_TARGETS) $(host-progs) $(clean-files) \ + $(addprefix $(obj)/,*.[oas] .*.cmd .*.tmp .*.d) + @$(clean-rule) +else ifeq ($(MAKECMDGOALS),fastdep) # =========================================================================== @@ -399,14 +418,6 @@ # Compile programs on the host # =========================================================================== -host-progs-single := $(foreach m,$(host-progs),$(if $($(m)-objs),,$(m))) -host-progs-multi := $(foreach m,$(host-progs),$(if $($(m)-objs),$(m))) -host-progs-multi-objs := $(foreach m,$(host-progs-multi),$($(m)-objs)) -host-progs := $(addprefix $(obj)/,$(host-progs)) -host-progs-single := $(addprefix $(obj)/,$(host-progs-single)) -host-progs-multi := $(addprefix $(obj)/,$(host-progs-multi)) -host-progs-multi-objs := $(addprefix $(obj)/,$(host-progs-multi-objs)) - quiet_cmd_host_cc__c = HOSTCC $(echo_target) cmd_host_cc__c = $(HOSTCC) -Wp,-MD,$(depfile) \ $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ @@ -431,6 +442,7 @@ targets += $(host-progs-single) $(host-progs-multi-objs) $(host-progs-multi) +endif # ! subdirclean endif # ! modules_install endif # ! fastdep @@ -480,9 +492,9 @@ # Descending # --------------------------------------------------------------------------- -.PHONY: $(subdir-ym) +.PHONY: $(subdir-ymn) -$(subdir-ym): +$(subdir-ymn): +@$(call descend,$@,$(MAKECMDGOALS)) # Add FORCE to the prequisites of a target to force it to be always rebuilt. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |