From be6f4376498d15b3465027bd78de3a878a862023 Mon Sep 17 00:00:00 2001 From: Felix Fietkau 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 -- 2.30.2