Replace build script with a smart wrapper

If a user simply types `make` it will run in parallel by default, which
is what we want to do in most cases.
This commit is contained in:
Roland Kaufmann
2013-01-17 14:52:35 +01:00
parent 21f524e7a5
commit 8eb6a70c5e
3 changed files with 36 additions and 2 deletions

View File

@@ -295,3 +295,9 @@ add_custom_target (distclean
COMMENT Removing CMake-generated files
VERBATIM
)
# smart wrapper that auto-parallelizes builds
file (COPY
GNUmakefile
DESTINATION ${PROJECT_BINARY_DIR}
)

30
GNUmakefile Normal file
View File

@@ -0,0 +1,30 @@
# GNUmakefile is processed before Makefile, which is why we arrive here
# first; when we call the other makefile, then we must specify its real
# name with the -f parameter
# figure out the number of processors from the system, add one and round
# to nearest integer. this is the maximum number of processes we want running
# at the same time (one for each core and one stuck on I/O)
PROCS:=$(shell echo "("$$(grep -P -c '^processor\t:' /proc/cpuinfo)+1")"/1 | bc)
# use these utilities if they are available
IONICE:=$(shell test -x "$$(which ionice)" && echo ionice -c2 -n7)
NICE:=$(shell test -x "$$(which nice)" && echo nice)
# ignore that there may be files with these names, we are going to call
# the other make regardless
.PHONY: __everything $(MAKECMDGOALS)
# outsource the processing to the real makefile, running in parallel and
# in a nice environment so that it doesn't hog our workstation. if there
# is nothing else happening on the box, then it will run just as fast
__everything:
@$(IONICE) $(NICE) $(MAKE) -f Makefile -j $(PROCS) $(MAKECMDGOALS)
# automatically generate all the goals we are asked to make and delegate
# processing of them to the real makefile through the dependency (since
# everything depends on the same thing, then we only call the other make
# once). the dummy command is just there to make sure that make doesn't
# show the "Nothing to do for `foo'" message after processing
$(MAKECMDGOALS): __everything
@true

2
build
View File

@@ -1,2 +0,0 @@
#!/bin/sh
exec ionice -c2 -n7 nice make -j $(echo "("$(grep -P -c '^processor\t:' /proc/cpuinfo)+1")"/1 | bc) "$@"