[PATCH] tools/perf/build: Automatically build in parallel, based onnumber of CPUs in the system

From: Ingo Molnar
Date: Wed Oct 02 2013 - 05:29:07 EST



This patch below fixes another tools/perf build system annoyance: that it
does not build in parallel by default.

The effect is that for example 'make install' will build in parallel
(dependent on number of CPUs in the system) and then install the result.

Thanks,

Ingo

=======================>
Subject: tools/perf/build: Automatically build in parallel, based on number of CPUs in the system
From: Ingo Molnar <mingo@xxxxxxxxxx>
Date: Wed Oct 2 11:18:28 CEST 2013

Implement automatic parallel builds when building in tools/perf:

$ time make

# [ perf build: Doing 'make -j12' parallel build. ]

Auto-detecting system features:

...

real 0m9.265s
user 0m59.888s
sys 0m6.082s

On GNU make achieving this is not particularly easy, it requires a separate
makefile, which then invokes the main Makefile.

( Note: this patch adds Makefile.parallel to show the concept - the two
makefiles will be flipped in the next patch to avoid having to specify -f
to get parallelism in the default build. )

Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Cc: David Ahern <dsahern@xxxxxxxxx>
Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
---
tools/perf/Makefile.parallel | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)

Index: tip/tools/perf/Makefile.parallel
===================================================================
--- /dev/null
+++ tip/tools/perf/Makefile.parallel
@@ -0,0 +1,26 @@
+#
+# Do a parallel build with multiple jobs, based on the number of CPUs online
+# in this system: 'make -j8' on a 8-CPU system, etc.
+#
+# (To override it, run 'make JOBS=1' and similar.)
+#
+ifeq ($(JOBS),)
+ JOBS := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
+ ifeq ($(JOBS),)
+ JOBS := 1
+ endif
+endif
+
+export JOBS
+
+$(info $(shell printf '# [ perf build: Doing '\''make \033[33m-j'$(JOBS)'\033[m'\'' parallel build. ]\n'))
+
+#
+# Needed if no target specified:
+#
+all:
+ @$(MAKE) --no-print-directory -j$(JOBS) $@
+
+%:
+ @$(MAKE) --no-print-directory -j$(JOBS) $@
+
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/