summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.in32
-rw-r--r--include/package-defaults.mk2
-rw-r--r--include/package.mk2
3 files changed, 35 insertions, 1 deletions
diff --git a/Config.in b/Config.in
index daecd171e..85d3adf9f 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 ecc3af499..117497d5d 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 cde561439..fd53123f6 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