From 7ed7784f5917b397bb9f180e461363353c2fd87f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20B=C3=BCsch?= <mb@bu3sch.de>
Date: Wed, 18 Aug 2010 13:57:58 +0000
Subject: [PATCH] Support parallel build of certain packages

SVN-Revision: 22696
---
 Config.in                   | 32 ++++++++++++++++++++++++++++++++
 include/package-defaults.mk |  2 +-
 include/package.mk          |  2 ++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/Config.in b/Config.in
index daecd171e9..85d3adf9fd 100644
--- a/Config.in
+++ b/Config.in
@@ -215,6 +215,38 @@ menu "Global build settings"
 		help
 		  Enable IPV6 support in packages (passes --enable-ipv6 to configure scripts).
 
+	config PKG_BUILD_PARALLEL
+		bool
+		prompt "Compile certain packages parallelized"
+		default n
+		help
+		  This adds a -jX option to certain packages that are known to
+		  behave well for parallel build.
+
+		  Note that this may overcommit CPU resources depending on the
+		  -j level of the main make process, the number of package
+		  submake jobs selected below and the number of actual CPUs present.
+		  Example: If the main make is passed a -j4 and the submake -j
+		  is also set to 4, we may end up with 16 parallel make processes
+		  in the worst case.
+
+		  You get maximum build performance, if you set the package build
+		  jobs to the number of CPUs (cores) available and also start the main
+		  make process with -jX, where X is the number of CPUs (cores).
+		  However, make sure you have enough RAM available for
+		  NR_CPUS to the power of two (NR_CPUS^2) make jobs.
+
+		  If you are unsure, select N.
+
+	config PKG_BUILD_JOBS
+		int
+		prompt "Number of package submake jobs (2-512)"
+		range 2 512
+		default 2
+		depends on PKG_BUILD_PARALLEL
+		help
+		  The number of jobs (-jX) to pass to packages submake.
+
 	comment "Stripping options"
 
 	choice
diff --git a/include/package-defaults.mk b/include/package-defaults.mk
index ecc3af499f..117497d5de 100644
--- a/include/package-defaults.mk
+++ b/include/package-defaults.mk
@@ -113,7 +113,7 @@ MAKE_PATH = .
 
 define Build/Compile/Default
 	$(MAKE_VARS) \
-	$(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
+	$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
 		$(MAKE_FLAGS) \
 		$(1);
 endef
diff --git a/include/package.mk b/include/package.mk
index cde5614396..fd53123f61 100644
--- a/include/package.mk
+++ b/include/package.mk
@@ -10,6 +10,8 @@ all: $(if $(DUMP),dumpinfo,compile)
 PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
 PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
 PKG_MD5SUM ?= unknown
+PKG_BUILD_PARALLEL ?=
+PKG_JOBS ?= $(if $(PKG_BUILD_PARALLEL),$(if $(CONFIG_PKG_BUILD_PARALLEL),-j$(CONFIG_PKG_BUILD_JOBS)))
 
 include $(INCLUDE_DIR)/prereq.mk
 include $(INCLUDE_DIR)/host.mk
-- 
GitLab