Support parallel build of certain packages
authorMichael Büsch <mb@bu3sch.de>
Wed, 18 Aug 2010 13:57:58 +0000 (13:57 +0000)
committerMichael Büsch <mb@bu3sch.de>
Wed, 18 Aug 2010 13:57:58 +0000 (13:57 +0000)
SVN-Revision: 22696

Config.in
include/package-defaults.mk
include/package.mk

index daecd171e9bd23818c158175aacb202b27f83b3a..85d3adf9fd8720436aae65d0fcf3c46bfcef9a3e 100644 (file)
--- 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
index ecc3af499fd27ce0a0c2533cba4003358eb65a91..117497d5ded5402dda69d490360bc66d0636d4c5 100644 (file)
@@ -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
index cde561439600c2ba8649cb580268f81b04c4525a..fd53123f613fd722e3d9cb9684b5a37fc06e524d 100644 (file)
@@ -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