xfsprogs parallel build
PATCH 1/1 xfsprogs parallel build
I got tired of waiting for xfsprogs to build serially...
On a 16p altix, make -j16 (excluding the configure phase) went from 2m16s to 33s.
I tossed this into an rpm and did a fedora scratch build on all arches, they all passed - some of them, at least, should have been doing parallel builds too.
So this has had reasonable testing.
---
Makefile +16 -7
@@ -15,23 +15,28 @@ LSRCFILES = configure configure.in Makep LDIRT = config.log .dep config.status config.cache confdefs.h conftest* \ Logs/* built .census install.* install-dev.* *.gz -SUBDIRS = include libxfs libxlog libxcmd libhandle libdisk \ - copy db fsck growfs io logprint mkfs quota mdrestore repair rtcp \ +LIB_SUBDIRS = include libxfs libxlog libxcmd libhandle libdisk +TOOL_SUBDIRS = copy db fsck growfs io logprint mkfs quota mdrestore repair rtcp \ m4 man doc po debian build +SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) + default: $(CONFIGURE) ifeq ($(HAVE_BUILDDEFS), no) $(MAKE) -C . $@ else - $(SUBDIRS_MAKERULE) + $(MAKE) $(SUBDIRS) endif +$(TOOL_SUBDIRS) : $(LIB_SUBDIRS) + ifeq ($(HAVE_BUILDDEFS), yes) include $(BUILDRULES) else clean: # if configure hasn't run, nothing to clean endif +.NOTPARALLEL: $(CONFIGURE) $(CONFIGURE): autoconf ./configure \
@@ -51,13 +56,17 @@ $(CONFIGURE): aclocal.m4:: aclocal --acdir=`pwd`/m4 --output=$@ -install: default - $(SUBDIRS_MAKERULE) +install: default $(addsuffix -install,$(SUBDIRS)) $(INSTALL) -m 755 -d $(PKG_DOC_DIR) $(INSTALL) -m 644 README $(PKG_DOC_DIR) -install-dev: default - $(SUBDIRS_MAKERULE) +%-install: + $(MAKE) -C $* install + +install-dev: default $(addsuffix -install-dev,$(SUBDIRS)) + +%-install-dev: + $(MAKE) -C $* install-dev realclean distclean: clean rm -f $(LDIRT) $(CONFIGURE)
include/buildrules +12 -6
@@ -6,18 +6,22 @@ _BUILDRULES_INCLUDED_ = 1 include $(TOPDIR)/include/builddefs -clean clobber : $(SUBDIRS) +clean clobber: $(addsuffix -clean,$(SUBDIRS)) rm -f $(DIRT) @rm -fr .libs - $(SUBDIRS_MAKERULE) +%-clean:: + $(MAKE) -C $* clean # Never blow away subdirs ifdef SUBDIRS .PRECIOUS: $(SUBDIRS) -$(SUBDIRS): - $(SUBDIRS_MAKERULE) endif +.PHONY: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ + # # Standard targets #
@@ -69,11 +73,13 @@ ifdef LTLIBRARY DEPENDSCRIPT := $(DEPENDSCRIPT) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' endif -depend : $(CFILES) $(HFILES) - $(SUBDIRS_MAKERULE) +depend : $(CFILES) $(HFILES) $(addsuffix -depend,$(SUBDIRS)) $(DEPENDSCRIPT) > .dep test -s .dep || rm -f .dep +%-depend: + $(MAKE) -C $* depend + # Include dep, but only if it exists ifeq ($(shell test -f .dep && echo .dep), .dep) include .dep
include/buildmacros +0 -8
@@ -123,14 +123,6 @@ INSTALL_LINGUAS = \ done endif -SUBDIRS_MAKERULE = \ - @for d in $(SUBDIRS) ""; do \ - if test -d "$$d" -a ! -z "$$d"; then \ - $(ECHO) === $$d ===; \ - $(MAKEF) -C $$d $@ || exit $$?; \ - fi; \ - done - MAN_MAKERULE = \ @for f in *.[12345678] ""; do \ if test ! -z "$$f"; then \
man/Makefile +11 -2
@@ -7,7 +7,16 @@ include $(TOPDIR)/include/builddefs SUBDIRS = man3 man5 man8 -default install install-dev : $(SUBDIRS) - $(SUBDIRS_MAKERULE) +default : $(SUBDIRS) + +install : $(addsuffix -install,$(SUBDIRS)) + +install-dev : $(addsuffix -install-dev,$(SUBDIRS)) + +%-install: + $(MAKE) -C $* install + +%-install-dev: + $(MAKE) -C $* install-dev include $(BUILDRULES)
PATCH v2 1/1 xfsprogs parallel build
(oops, cvs version...)
I got tired of waiting for xfsprogs to build serially...
On a 16p altix, make -j16 (excluding the configure phase) went from 2m16s to 33s.
I tossed this into an rpm and did a fedora scratch build on all arches, they all passed - some of them, at least, should have been doing parallel builds too.
So this has had reasonable testing.
---
xfsprogs/Makefile +22 -10
@@ -15,23 +15,28 @@ LSRCFILES = configure configure.in Makep LDIRT = config.log .dep config.status config.cache confdefs.h conftest* \ Logs/* built .census install.* install-dev.* *.gz -SUBDIRS = include libxfs libxlog libxcmd libhandle libdisk \ - copy db estimate fsck growfs io logprint mkfs quota mdrestore repair rtcp \ - m4 man doc po debian build +LIB_SUBDIRS = include libxfs libxlog libxcmd libhandle libdisk +TOOL_SUBDIRS = copy db estimate fsck growfs io logprint mkfs quota \ + mdrestore repair rtcp m4 man doc po debian build + +SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) default: $(CONFIGURE) ifeq ($(HAVE_BUILDDEFS), no) $(MAKE) -C . $@ else - $(SUBDIRS_MAKERULE) + $(MAKE) $(SUBDIRS) endif +$(TOOL_SUBDIRS) : $(LIB_SUBDIRS) + ifeq ($(HAVE_BUILDDEFS), yes) include $(BUILDRULES) else clean: # if configure hasn't run, nothing to clean endif +.NOTPARALLEL: $(CONFIGURE) $(CONFIGURE): autoconf ./configure \
@@ -51,16 +56,23 @@ $(CONFIGURE): aclocal.m4:: aclocal --acdir=`pwd`/m4 --output=$@ -install: default - $(SUBDIRS_MAKERULE) +install: default $(addsuffix -install,$(SUBDIRS)) $(INSTALL) -m 755 -d $(PKG_DOC_DIR) $(INSTALL) -m 644 README $(PKG_DOC_DIR) -install-dev: default - $(SUBDIRS_MAKERULE) +%-install: + $(MAKE) -C $* install + +install-dev: default $(addsuffix -install-dev,$(SUBDIRS)) + +%-install-dev: + $(MAKE) -C $* install-dev + +install-qa: install $(addsuffix -install-qa,$(SUBDIRS)) + +%-install-qa: + $(MAKE) -C $* install-qa -install-qa: install - $(SUBDIRS_MAKERULE) realclean distclean: clean rm -f $(LDIRT) $(CONFIGURE)
xfsprogs/include/buildrules +12 -6
@@ -6,18 +6,22 @@ _BUILDRULES_INCLUDED_ = 1 include $(TOPDIR)/include/builddefs -clean clobber : $(SUBDIRS) +clean clobber: $(addsuffix -clean,$(SUBDIRS)) rm -f $(DIRT) @rm -fr .libs - $(SUBDIRS_MAKERULE) +%-clean:: + $(MAKE) -C $* clean # Never blow away subdirs ifdef SUBDIRS .PRECIOUS: $(SUBDIRS) -$(SUBDIRS): - $(SUBDIRS_MAKERULE) endif +.PHONY: $(SUBDIRS) + +$(SUBDIRS): + $(MAKE) -C $@ + # # Standard targets #
@@ -69,11 +73,13 @@ ifdef LTLIBRARY DEPENDSCRIPT := $(DEPENDSCRIPT) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' endif -depend : $(CFILES) $(HFILES) - $(SUBDIRS_MAKERULE) +depend : $(CFILES) $(HFILES) $(addsuffix -depend,$(SUBDIRS)) $(DEPENDSCRIPT) > .dep test -s .dep || rm -f .dep +%-depend: + $(MAKE) -C $* depend + # Include dep, but only if it exists ifeq ($(shell test -f .dep && echo .dep), .dep) include .dep
xfsprogs/include/buildmacros +0 -8
@@ -123,14 +123,6 @@ INSTALL_LINGUAS = \ done endif -SUBDIRS_MAKERULE = \ - @for d in $(SUBDIRS) ""; do \ - if test -d "$$d" -a ! -z "$$d"; then \ - $(ECHO) === $$d ===; \ - $(MAKEF) -C $$d $@ || exit $$?; \ - fi; \ - done - MAN_MAKERULE = \ @for f in *.[12345678] ""; do \ if test ! -z "$$f"; then \
xfsprogs/man/Makefile +11 -2
@@ -7,7 +7,16 @@ include $(TOPDIR)/include/builddefs SUBDIRS = man3 man5 man8 -default install install-dev : $(SUBDIRS) - $(SUBDIRS_MAKERULE) +default : $(SUBDIRS) + +install : $(addsuffix -install,$(SUBDIRS)) + +install-dev : $(addsuffix -install-dev,$(SUBDIRS)) + +%-install: + $(MAKE) -C $* install + +%-install-dev: + $(MAKE) -C $* install-dev include $(BUILDRULES)