From be6f4376498d15b3465027bd78de3a878a862023 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sat, 15 Sep 2012 10:21:24 +0000
Subject: [PATCH] build: add a config option for passing the top-level make
 jobserver to packages that have parallel build enabled, significantly
 improves parallelization and gets rid of CPU overcommit during intra-package
 parallel builds

SVN-Revision: 33414
---
 Config.in           | 11 ++++++++++-
 include/package.mk  |  8 +++++++-
 include/toplevel.mk |  2 +-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/Config.in b/Config.in
index 403597804f..36ca48881f 100644
--- a/Config.in
+++ b/Config.in
@@ -311,12 +311,21 @@ menu "Global build settings"
 
 		  If you are unsure, select N.
 
+	config PKG_BUILD_USE_JOBSERVER
+		bool
+		prompt "Use top-level make jobserver for packages"
+		depends on PKG_BUILD_PARALLEL
+		default y
+		help
+		  This passes the main make process jobserver fds to package builds,
+		  enabling full parallelization across different packages
+
 	config PKG_BUILD_JOBS
 		int
 		prompt "Number of package submake jobs (2-512)"
 		range 2 512
 		default 2
-		depends on PKG_BUILD_PARALLEL
+		depends on PKG_BUILD_PARALLEL && !PKG_BUILD_USE_JOBSERVER
 		help
 		  The number of jobs (-jX) to pass to packages submake.
 
diff --git a/include/package.mk b/include/package.mk
index 64973b0510..6b3617f776 100644
--- a/include/package.mk
+++ b/include/package.mk
@@ -15,11 +15,17 @@ PKG_MD5SUM ?= unknown
 PKG_BUILD_PARALLEL ?=
 PKG_INFO_DIR := $(STAGING_DIR)/pkginfo
 
+ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
+  MAKE_J:=$(MAKE_JOBSERVER)
+else
+  MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
+endif
+
 ifeq ($(strip $(PKG_BUILD_PARALLEL)),0)
 PKG_JOBS?=-j1
 else
 PKG_JOBS?=$(if $(PKG_BUILD_PARALLEL)$(CONFIG_PKG_DEFAULT_PARALLEL),\
-	$(if $(CONFIG_PKG_BUILD_PARALLEL),-j$(CONFIG_PKG_BUILD_JOBS),-j1),-j1)
+	$(if $(CONFIG_PKG_BUILD_PARALLEL),$(MAKE_J),-j1),-j1)
 endif
 
 include $(INCLUDE_DIR)/prereq.mk
diff --git a/include/toplevel.mk b/include/toplevel.mk
index d37ddb9171..ba5af9c155 100644
--- a/include/toplevel.mk
+++ b/include/toplevel.mk
@@ -148,7 +148,7 @@ prereq:: prepare-tmpinfo .config
 			echo "WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!"; \
 		fi \
 	)
-	@+$(SUBMAKE) -r $@
+	@+$(SUBMAKE) -r $@ MAKE_JOBSERVER="$(filter --jobserver% -j,$(MAKEFLAGS))"
 
 help:
 	cat README
-- 
GitLab