jack2: use -j only when is PARALLEL_JOBS is defined
PATCH 1/2 jack2: use -j only when is PARALLEL_JOBS is defined
When top-level parallel makefile is being used the PARALLEL_JOBS is empty but the build system of jack2 does not accept a -j without an argument so don't use the -j option when PARALLEL_JOBS is empty.
Fix build failure:
waf: error: -j option requires an argument
<snip>
make: *** [/home/tetsuya/buildroot/br2/output/build/jack2-ab409a65df95bc261ff72b52d6b3f4a65cf3266a/.stamp_built] Error 2
--- package/jack2/jack2.mk | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
package/jack2/jack2.mk +6 -1
@@ -10,6 +10,10 @@ JACK2_LICENSE = GPLv2+ (jack server), LGPLv2.1+ (jack library) JACK2_DEPENDENCIES = libsamplerate libsndfile alsa-lib host-python JACK2_INSTALL_STAGING = YES +ifneq ($(PARALLEL_JOBS),) + JACK2_PARALLEL_JOBS = -j$(PARALLEL_JOBS) +endif + define JACK2_CONFIGURE_CMDS (cd $(@D); \ $(TARGET_CONFIGURE_OPTS) \
@@ -20,7 +24,8 @@ define JACK2_CONFIGURE_CMDS endef define JACK2_BUILD_CMDS - (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS)) + (cd $(@D); $(HOST_DIR)/usr/bin/python2 \ + ./waf build $(JACK2_PARALLEL_JOBS)) endef define JACK2_INSTALL_TARGET_CMDS
Signature · 1 line
2.3.4
PATCH 2/2 boost: use -j only when is PARALLEL_JOBS is defined
When top-level parallel makefile is being used the PARALLEL_JOBS is empty but the b2 command of boost does not accept a -j without an argument so don't use the -j option when PARALLEL_JOBS is empty.
Fix install failure:
Invalid value for the '-j' option, valid values are 1 through 256.
make: *** [/home/tetsuya/buildroot/br2/output/build/boost-1.57.0/.stamp_staging_installed] Error 1
--- package/boost/boost.mk | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
package/boost/boost.mk +8 -4
@@ -23,6 +23,10 @@ HOST_BOOST_FLAGS = --without-icu \ iostreams locale log math mpi program_options python random regex \ serialization signals system test thread timer wave) +ifneq ($(PARALLEL_JOBS),) +BOOST_PARALLEL_JOBS = -j$(PARALLEL_JOBS) +endif + # coroutine breaks on some weak toolchains and it's new for 1.54+ BOOST_WITHOUT_FLAGS = coroutine
@@ -121,7 +125,7 @@ define HOST_BOOST_CONFIGURE_CMDS endef define BOOST_INSTALL_TARGET_CMDS - (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ + (cd $(@D) && ./b2 $(BOOST_PARALLEL_JOBS) -q -d+1 \ --user-config=$(@D)/user-config.jam \ $(BOOST_OPTS) \ --prefix=$(TARGET_DIR)/usr \
@@ -130,7 +134,7 @@ define BOOST_INSTALL_TARGET_CMDS endef define HOST_BOOST_BUILD_CMDS - (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ + (cd $(@D) && ./b2 $(BOOST_PARALLEL_JOBS) -q -d+1 \ --user-config=$(@D)/user-config.jam \ $(HOST_BOOST_OPTS) \ --ignore-site-config \
@@ -138,7 +142,7 @@ define HOST_BOOST_BUILD_CMDS endef define HOST_BOOST_INSTALL_CMDS - (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ + (cd $(@D) && ./b2 $(BOOST_PARALLEL_JOBS) -q -d+1 \ --user-config=$(@D)/user-config.jam \ $(HOST_BOOST_OPTS) \ --prefix=$(HOST_DIR)/usr \
@@ -147,7 +151,7 @@ define HOST_BOOST_INSTALL_CMDS endef define BOOST_INSTALL_STAGING_CMDS - (cd $(@D) && ./bjam -j$(PARALLEL_JOBS) -d+1 \ + (cd $(@D) && ./bjam $(BOOST_PARALLEL_JOBS) -d+1 \ --user-config=$(@D)/user-config.jam \ $(BOOST_OPTS) \ --prefix=$(STAGING_DIR)/usr \
Signature · 1 line
2.3.4
PATCH 1/2 jack2: use -j only when is PARALLEL_JOBS is defined
In reply to Fabio PorceddaDear Fabio Porcedda,
Quoted 3 lines · Fabio Porcedda
When top-level parallel makefile is being used the
PARALLEL_JOBSis empty but the build system of jack2 does not accept a -j without an argument so don't use the -j option whenPARALLEL_JOBSis empty.
This is not quite true. PARALLEL_JOBS is empty because your recommendation of using:
make BR2_JLEVEL= -j$((`getconf _NPROCESSORS_ONLN`+1))
for top-level parallel build is maybe not the most appropriate one.
In addition, even when top-level parallel build is used, using purely sequential build in each package may not be the good solution. Imagine you have a number of packages to build, and one of them is particularly
long: if you don't build this package in parallel, the build time may be increased.
So I believe that with the introduction of top-level parallel build, we need a way of calculating a default reasonable BR2_JLEVEL, preferably taking into account the make -jX value passed to the top-level make. We indeed need to play on the number of jobs at the top-level, and the number of jobs at the per-package level.
Also, your patch series does not handle all packages that use $(PARALLEL_JOBS) :
package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./bjam -j$(PARALLEL_JOBS) -d+1 \ package/cmake/cmake.mk: --parallel=$(PARALLEL_JOBS) -- \ package/jack2/jack2.mk: (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS)) package/midori/midori.mk: (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS)) package/qt/qt.mk: MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" ./configure \ package/qt5/qt5base/qt5base.mk: MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" \
We probably need to convert all of these to:
$(if $(PARALLEL_JOBS),-j$(PARALLEL_JOBS))
like is done for the global $(MAKE) variable.
Best regards,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH 1/2 jack2: use -j only when is PARALLEL_JOBS is defined
Quoted 7 lines · Thomas Petazzoni
Dear Fabio Porcedda,
Quoted 3 lines · Fabio Porcedda
When top-level parallel makefile is being used the
PARALLEL_JOBSis empty but the build system of jack2 does not accept a -j without an argument so don't use the -j option whenPARALLEL_JOBSis empty.
Quoted 6 lines
This is not quite true.
PARALLEL_JOBSis empty because your recommendation of using:make BR2_JLEVEL= -j$((`getconf _NPROCESSORS_ONLN`+1))for top-level parallel build is maybe not the most appropriate one.
Good idea!
Quoted 11 lines
In addition, even when top-level parallel build is used, using purely sequential build in each package may not be the good solution. Imagine you have a number of packages to build, and one of them is particularly
long: if you don't build this package in parallel, the build time may be increased.So I believe that with the introduction of top-level parallel build, we need a way of calculating a default reasonable
BR2_JLEVEL, preferably taking into account the make -jX value passed to the top-level make. We indeed need to play on the number of jobs at the top-level, and the number of jobs at the per-package level.
About taking in account the value passed to -j i don't know an automatic way to do it.
At least checking the MAKEFLAGS we can know if the -j options was used so we can use something like this:
package/Makefile.in +1 -2
@@ -18,7 +18,7 @@ PARALLEL_JOBS := $(BR2_JLEVEL) endif MAKE1 := $(HOSTMAKE) -j1 -MAKE := $(HOSTMAKE) $(if $(PARALLEL_JOBS),-j$(PARALLEL_JOBS)) +override MAKE = $(HOSTMAKE) $(if $(findstring j,$(filter-out --%,$(MAKEFLAGS))),,-j$(PARALLEL_JOBS)) ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
TARGET_VENDOR = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_VENDOR))
With this change we use can use the followin command line:
make -jX
That way we don't need to set as empty the BR2_JLEVEL variable and we can leave unchanged the lines that use the PARALLEL_JOBS variable.
Quoted 13 lines
Also, your patch series does not handle all packages that use $(PARALLEL_JOBS) :
package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./b2 -j$(PARALLEL_JOBS) -q -d+1 \ package/boost/boost.mk: (cd $(@D) && ./bjam -j$(PARALLEL_JOBS) -d+1 \ package/cmake/cmake.mk: --parallel=$(PARALLEL_JOBS) -- \ package/jack2/jack2.mk: (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS)) package/midori/midori.mk: (cd $(@D); $(HOST_DIR)/usr/bin/python2 ./waf build -j $(PARALLEL_JOBS)) package/qt/qt.mk: MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" ./configure \ package/qt5/qt5base/qt5base.mk: MAKEFLAGS="$(MAKEFLAGS) -j$(PARALLEL_JOBS)" \
Quoted 5 lines
We probably need to convert all of these to:
$(if $(PARALLEL_JOBS),-j$(PARALLEL_JOBS))like is done for the global $(MAKE) variable.
You are right.
Thanks for reviewing.
Signature · 1 line
Fabio Porcedda