summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.in11
-rw-r--r--include/package.mk8
-rw-r--r--include/toplevel.mk2
3 files changed, 18 insertions, 3 deletions
diff --git a/Config.in b/Config.in
index 403597804..36ca48881 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 64973b051..6b3617f77 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 d37ddb917..ba5af9c15 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