From 7ed7784f5917b397bb9f180e461363353c2fd87f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20B=C3=BCsch?= 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 daecd171e9bd..85d3adf9fd87 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 ecc3af499fd2..117497d5ded5 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 cde561439600..fd53123f613f 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 -- 2.30.2