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.
This commit is contained in:
Dominique Martinet
2017-09-14 17:17:25 +09:00
parent b962da700b
commit b894619d1b
5 changed files with 32 additions and 24 deletions

View File

@ -4,13 +4,21 @@ INCDIR = @INCDIR@
ETCDIR = @ETCDIR@ ETCDIR = @ETCDIR@
MANDIR = @MANDIR@ MANDIR = @MANDIR@
all:: all: executer-mcctrl executer-mcoverlayfs executer-user mckernel
@(cd executer/kernel/mcctrl; make modules)
@(cd executer/kernel/mcoverlayfs; make modules) executer-mcctrl:
@(cd executer/user; make) +@(cd executer/kernel/mcctrl; $(MAKE) modules)
@case "$(TARGET)" in \
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) \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
(cd kernel; make) \ (cd kernel; $(MAKE)) \
;; \ ;; \
*) \ *) \
echo "unknown target $(TARGET)" >&2 \ echo "unknown target $(TARGET)" >&2 \
@ -18,13 +26,13 @@ all::
;; \ ;; \
esac esac
install:: install:
@(cd executer/kernel/mcctrl; make install) @(cd executer/kernel/mcctrl; $(MAKE) install)
@(cd executer/kernel/mcoverlayfs; make install) @(cd executer/kernel/mcoverlayfs; $(MAKE) install)
@(cd executer/user; make install) @(cd executer/user; $(MAKE) install)
@case "$(TARGET)" in \ @case "$(TARGET)" in \
attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
(cd kernel; make install) \ (cd kernel; $(MAKE) install) \
;; \ ;; \
*) \ *) \
echo "unknown target $(TARGET)" >&2 \ echo "unknown target $(TARGET)" >&2 \
@ -67,13 +75,13 @@ install::
;; \ ;; \
esac esac
clean:: clean:
@(cd executer/kernel/mcctrl; make clean) @(cd executer/kernel/mcctrl; $(MAKE) clean)
@(cd executer/kernel/mcoverlayfs; make clean) @(cd executer/kernel/mcoverlayfs; $(MAKE) clean)
@(cd executer/user; make clean) @(cd executer/user; $(MAKE) clean)
@case "$(TARGET)" in \ @case "$(TARGET)" in \
attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \ attached-mic | builtin-x86 | builtin-mic | smp-x86 | smp-arm64) \
(cd kernel; make clean) \ (cd kernel; $(MAKE) clean) \
;; \ ;; \
*) \ *) \
echo "unknown target $(TARGET)" >&2 \ echo "unknown target $(TARGET)" >&2 \

View File

@ -33,7 +33,7 @@ endif
modules: modules:
ifneq ($(BUILD_MODULE),none) ifneq ($(BUILD_MODULE),none)
@(cd $(BUILD_MODULE); make modules) +@(cd $(BUILD_MODULE); make modules)
endif endif
clean: clean:

View File

@ -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 $(CC) -shared -fPIC -Wl,-soname,sched_yield.so.1 -o libsched_yield.so.1.0.0 $^ -lc -ldl
libmcexec.a:: libmcexec.a::
(cd arch/${ARCH}; make) +(cd arch/${ARCH}; $(MAKE))
libqlmpi.so: qlmpilib.c libqlmpi.so: qlmpilib.c
$(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $< $(MCC) $(CFLAGS) $(LDFLAGS) -shared -fPIC -o $@ $<
@ -77,13 +77,13 @@ ql_talker: ql_talker.o
$(CC) $^ $(CFLAGS) -o $@ $(CC) $^ $(CFLAGS) -o $@
clean:: clean::
(cd arch/${ARCH}; make clean) (cd arch/${ARCH}; $(MAKE) clean)
$(RM) $(TARGET) *.o $(RM) $(TARGET) *.o
.PHONY: all clean install .PHONY: all clean install
install:: install::
(cd arch/${ARCH}; make install) (cd arch/${ARCH}; $(MAKE) install)
mkdir -p -m 755 $(BINDIR) mkdir -p -m 755 $(BINDIR)
install -m 755 mcexec $(BINDIR) install -m 755 mcexec $(BINDIR)
mkdir -p -m 755 $(MCKERNEL_LIBDIR) mkdir -p -m 755 $(MCKERNEL_LIBDIR)

View File

@ -65,8 +65,8 @@ Makefile.dep:
$(IHKOBJ): FORCE $(IHKOBJ): FORCE
@mkdir -p $(dir $(IHKOBJ)) @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) prepare
$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS) +$(call echo_cmd,BUILD IHK,$(TARGET))$(submake) -C $(IHKBASE) $(SUBCMD_OPTS)
%.o: $(SRC)/%.c %.o: $(SRC)/%.c
$(cc_cmd) $(cc_cmd)

View File

@ -26,9 +26,9 @@ all: $(O) $(KERNELS)
$(O): $(O):
mkdir -p $(O) mkdir -p $(O)
%/kernel.img: %/Makefile %/kernel.img: %/Makefile $(KERNELS)
@echo 'Building for' $(dir $@) @echo 'Building for' $(dir $@)
@make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS) +@make --no-print-directory -C $(dir $@) $(SUBCMD_OPTS)
%/Makefile: Makefile.build FORCE %/Makefile: Makefile.build FORCE
@mkdir -p $(dir $@) @mkdir -p $(dir $@)