From cf323eb924bf6a5b45e136f7afef91078d5b070d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20B=C3=BCsch?= <mb@bu3sch.de>
Date: Sun, 3 Oct 2010 12:54:07 +0000
Subject: [PATCH] optionally support parallel toolchain build. This defaults to
 off, because certain toolchain versions are known to break on parallel build.
 However, it significantly speeds up the build and latest versions of the
 tools do compile fine.

SVN-Revision: 23196
---
 Config.in                   | 18 ++++++++++++++++--
 include/toolchain-build.mk  |  2 ++
 toolchain/binutils/Makefile |  2 +-
 toolchain/gcc/common.mk     |  2 +-
 toolchain/uClibc/Makefile   |  2 +-
 5 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/Config.in b/Config.in
index 651cbdef5a..ab8fbf8e4d 100644
--- a/Config.in
+++ b/Config.in
@@ -268,7 +268,7 @@ menu "Global build settings"
 
 	config PKG_DEFAULT_PARALLEL
 		bool
-		prompt "Always parallelize the default package build rule (Dangerous)"
+		prompt "Parallelize the default package build rule (May break build)"
 		depends on PKG_BUILD_PARALLEL
 		default n
 		help
@@ -278,7 +278,21 @@ menu "Global build settings"
 		  packages with multiple jobs that are probably not tested in
 		  a parallel build environment.
 
-		  Say N. Only say Y for testing.
+		  Only say Y, if you don't mind fixing broken packages.
+		  Before reporting build bugs, set this to N and re-run the build.
+
+	config TOOLCHAIN_PARALLEL
+		bool
+		prompt "Parallelize the toolchain build (May break build)"
+		depends on PKG_BUILD_PARALLEL
+		default n
+		help
+		  Build the toolchain with parallel make jobs.
+		  This speeds up the toolchain build on SMP machines, but may
+		  break the build for certain toolchain versions.
+
+		  If you say Y, toolchain build might break.
+		  Before reporting build bugs, set this to N and re-run the build.
 
 	comment "Stripping options"
 
diff --git a/include/toolchain-build.mk b/include/toolchain-build.mk
index 6defe63edf..a0bc4061fc 100644
--- a/include/toolchain-build.mk
+++ b/include/toolchain-build.mk
@@ -11,6 +11,8 @@ REAL_STAGING_DIR_HOST:=$(STAGING_DIR_HOST)
 STAGING_DIR_HOST:=$(TOOLCHAIN_DIR)
 BUILD_DIR_HOST:=$(BUILD_DIR_TOOLCHAIN)
 
+TOOLCHAIN_JOBS?=$(if $(CONFIG_TOOLCHAIN_PARALLEL),-j$(CONFIG_PKG_BUILD_JOBS))
+
 include $(INCLUDE_DIR)/host-build.mk
 
 HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared
diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile
index 5682698bcf..d829098e54 100644
--- a/toolchain/binutils/Makefile
+++ b/toolchain/binutils/Makefile
@@ -79,7 +79,7 @@ define Host/Configure
 endef
 
 define Host/Compile
-	$(MAKE) -C $(HOST_BUILD_DIR) all
+	$(MAKE) $(TOOLCHAIN_JOBS) -C $(HOST_BUILD_DIR) all
 endef
 
 define Host/Install
diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk
index e2277207b8..8c293dd332 100644
--- a/toolchain/gcc/common.mk
+++ b/toolchain/gcc/common.mk
@@ -173,7 +173,7 @@ endif
 
 GCC_MAKE:= \
 	export SHELL="$(BASH)"; \
-	$(MAKE) \
+	$(MAKE) $(TOOLCHAIN_JOBS) \
 		CFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
 		CXXFLAGS_FOR_TARGET="$(TARGET_CFLAGS)"
 
diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile
index 362548aae5..d3d4d85cdd 100644
--- a/toolchain/uClibc/Makefile
+++ b/toolchain/uClibc/Makefile
@@ -109,7 +109,7 @@ UCLIBC_MAKE = PATH='$(TARGET_PATH)' $(MAKE) -C $(HOST_BUILD_DIR) \
 
 define Host/Compile
 	$(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(HOST_BUILD_DIR)/Rules.mak
-	$(UCLIBC_MAKE) PREFIX= all
+	$(UCLIBC_MAKE) $(TOOLCHAIN_JOBS) PREFIX= all
 	$(UCLIBC_MAKE) PREFIX="$(TOOLCHAIN_DIR)/" install_runtime install_dev
 	$(CP) $(HOST_BUILD_DIR)/libc/libc_so.a $(TOOLCHAIN_DIR)/lib/
 	$(CP) $(HOST_BUILD_DIR)/libpthread/*/libpthread_so.a $(TOOLCHAIN_DIR)/lib/
-- 
GitLab