From b894619d1b36ba4df60f1169976ac204186c7707 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Thu, 14 Sep 2017 17:17:25 +0900 Subject: [PATCH] Speed up parallel builds - make should be $(MAKE) - add + in front of rules spawning long-lasted make process in a subshell. (This would not be needed with $(MAKE) -C .. target, but our makefiles do not handle that because they use $(PWD)) - split the main 'all' rule as all 4 targets are independant - fix dependencies where appropriate for parallelism Extra, not speed-related changes: - remove some double-colon for targets as they do not need it This cuts build time from 5s to 1.5s on a laptop with -j4, and more importantly from 85s to 35s on a KNL node. As a bonus, the fixed dependencies removes the need to clean before rebuilding all the time. Probably. --- Makefile.in | 40 +++++++++++++++---------- executer/kernel/mcoverlayfs/Makefile.in | 2 +- executer/user/Makefile.in | 6 ++-- kernel/Makefile.build.in | 4 +-- kernel/Makefile.in | 4 +-- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Makefile.in b/Makefile.in index ea857cb4..0645f343 100755 --- a/Makefile.in +++ b/Makefile.in @@ -4,13 +4,21 @@ INCDIR = @INCDIR@ ETCDIR = @ETCDIR@ MANDIR = @MANDIR@ -all:: - @(cd executer/kernel/mcctrl; make modules) - @(cd executer/kernel/mcoverlayfs; make modules) - @(cd executer/user; make) - @case "$(TARGET)" in \ +all: executer-mcctrl executer-mcoverlayfs executer-user mckernel + +executer-mcctrl: + +@(cd executer/kernel/mcctrl; $(MAKE) modules) + +executer-mcoverlayfs: + +@(cd executer/kernel/mcoverlayfs; $(MAKE) modules) + +executer-user: + +@(cd executer/user; $(MAKE)) + +mckernel: + +@case "$(TARGET)" in \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \ - (cd kernel; make) \ + (cd kernel; $(MAKE)) \ ;; \ *) \ echo "unknown target $(TARGET)" >&2 \ @@ -18,13 +26,13 @@ all:: ;; \ esac -install:: - @(cd executer/kernel/mcctrl; make install) - @(cd executer/kernel/mcoverlayfs; make install) - @(cd executer/user; make install) +install: + @(cd executer/kernel/mcctrl; $(MAKE) install) + @(cd executer/kernel/mcoverlayfs; $(MAKE) install) + @(cd executer/user; $(MAKE) install) @case "$(TARGET)" in \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \ - (cd kernel; make install) \ + (cd kernel; $(MAKE) install) \ ;; \ *) \ echo "unknown target $(TARGET)" >&2 \ @@ -67,13 +75,13 @@ install:: ;; \ esac -clean:: - @(cd executer/kernel/mcctrl; make clean) - @(cd executer/kernel/mcoverlayfs; make clean) - @(cd executer/user; make clean) +clean: + @(cd executer/kernel/mcctrl; $(MAKE) clean) + @(cd executer/kernel/mcoverlayfs; $(MAKE) clean) + @(cd executer/user; $(MAKE) clean) @case "$(TARGET)" in \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \ - (cd kernel; make clean) \ + (cd kernel; $(MAKE) clean) \ ;; \ *) \ echo "unknown target $(TARGET)" >&2 \ diff --git a/executer/kernel/mcoverlayfs/Makefile.in b/executer/kernel/mcoverlayfs/Makefile.in index 7ac71002..d8bfbb2f 100644 --- a/executer/kernel/mcoverlayfs/Makefile.in +++ b/executer/kernel/mcoverlayfs/Makefile.in @@ -33,7 +33,7 @@ endif modules: ifneq ($(BUILD_MODULE),none) - @(cd $(BUILD_MODULE); make modules) + +@(cd $(BUILD_MODULE); make modules) endif clean: diff --git a/executer/user/Makefile.in b/executer/user/Makefile.in index 1e463753..b39573ff 100644 --- a/executer/user/Makefile.in +++ b/executer/user/Makefile.in @@ -53,7 +53,7 @@ libsched_yield: libsched_yield.c $(CC) -shared -fPIC -Wl,-soname,sched_yield.so.1 -o libsched_yield.so.1.0.0 $^ -lc -ldl libmcexec.a:: - (cd arch/${ARCH}; make) + +(cd arch/${ARCH}; $(MAKE)) libqlmpi.so: qlmpilib.c $(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< @@ -77,13 +77,13 @@ ql_talker: ql_talker.o $(CC) $^ $(CFLAGS) -o $@ clean:: - (cd arch/${ARCH}; make clean) + (cd arch/${ARCH}; $(MAKE) clean) $(RM) $(TARGET) *.o .PHONY: all clean install install:: - (cd arch/${ARCH}; make install) + (cd arch/${ARCH}; $(MAKE) install) mkdir -p -m 755 $(BINDIR) install -m 755 mcexec $(BINDIR) mkdir -p -m 755 $(MCKERNEL_LIBDIR) diff --git a/kernel/Makefile.build.in b/kernel/Makefile.build.in index e3bedb4c..7b3e5e6a 100644 --- a/kernel/Makefile.build.in +++ b/kernel/Makefile.build.in @@ -65,8 +65,8 @@ Makefile.dep: $(IHKOBJ): FORCE @mkdir -p $(dir $(IHKOBJ)) - $(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) prepare - $(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) + +$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) prepare + +$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) %.o: $(SRC)/%.c $(cc_cmd) diff --git a/kernel/Makefile.in b/kernel/Makefile.in index 777eca9f..9abaa809 100644 --- a/kernel/Makefile.in +++ b/kernel/Makefile.in @@ -26,9 +26,9 @@ all: $(O) $(KERNELS) $(O): mkdir -p $(O) -%/kernel.img: %/Makefile +%/kernel.img: %/Makefile $(KERNELS) @echo 'Building for' $(dir $@) - @make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS) + +@make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS) %/Makefile: Makefile.build FORCE @mkdir -p $(dir $@)