kumquat-buildroot/package/qt5/qt5webengine/qt5webengine.mk
Gaël PORTAY a475e0d874 qt5webengine: propagate parallel flag to ninja
WebEngine is a big project to build. It uses ninja which is a build
system that does everything in parallel[1].

	Builds are always run in parallel, based by default on the number of
	CPUs your system has. Underspecified build dependencies will result in
	incorrect builds.

QtWebEngine does not propagate the parallel flag from the running
instance of make to ninja. Thus, all the machine cores are used to build
this single project.

	make -j 10 -> ninja -j # all cores

This behavior disrupts powerful machines which are setup to build many
projects in parallel. Even worse, the build fails on machines where the
ratio CPU-cores / amount of RAM (including swap) is not appropriate. g++
may have not enough of memory to build all those files in parallel.

Unfortunatly, the target `run_ninja' is hardcoded in the Makefile
src/core/Makefile.run_gn; there is no way to propagate flags using a
variable through the make command-line.

	run_ninja:
	        /home/gportay/src/buildroot/output-qt5.11/build/qt5webengine-5.11.1/src/3rdparty/ninja/ninja
-C /home/gportay/src/buildroot/output-qt5.11/build/qt5webengine-5.11.1/src/core/release QtWebEngineCore

Luckily, the Qt gn_run.pro[2] can hardcode ninja extra flags through the
variable NINJAFLAGS when the Makefile is generated (which is performed
during the build and not during configure step).

This commit sets the NINJAFLAGS using the variable PARALLEL_JOBS to limit
the number of cores used by ninja.

Fixes:
	virtual memory exhausted: Cannot allocate memory

[1]: https://ninja-build.org/manual.html#_comparison_to_make
[2]: https://github.com/qt/qtwebengine/blob/v5.11.1/src/core/gn_run.pro#L49-L53

CC: Damien Riegel <damien.riegel@savoirfairelinux.com>
CC: Jean-François Têtu <jean-francois.tetu@savoirfairelinux.com>
Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2018-07-01 11:04:59 +02:00

102 lines
3.5 KiB
Makefile

################################################################################
#
# qt5webengine
#
################################################################################
QT5WEBENGINE_VERSION = $(QT5_VERSION)
QT5WEBENGINE_SITE = $(QT5_SITE)
QT5WEBENGINE_SOURCE = qtwebengine-$(QT5_SOURCE_TARBALL_PREFIX)-$(QT5WEBENGINE_VERSION).tar.xz
QT5WEBENGINE_DEPENDENCIES = ffmpeg libglib2 libvpx opus webp qt5base \
qt5declarative qt5webchannel host-bison host-flex host-gperf \
host-pkgconf host-python
QT5WEBENGINE_INSTALL_STAGING = YES
include package/qt5/qt5webengine/chromium.inc
QT5WEBENGINE_LICENSE = GPL-2.0 or LGPL-3.0 or GPL-3.0 or GPL-3.0 with exception
QT5WEBENGINE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT \
LICENSE.GPLv3 LICENSE.LGPL3 $(CHROMIUM_LICENSE_FILES)
ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y)
QT5WEBENGINE_DEPENDENCIES += xlib_libXScrnSaver xlib_libXcomposite \
xlib_libXcursor xlib_libXi xlib_libXrandr xlib_libXtst
endif
ifeq ($(BR2_PACKAGE_QT5_VERSION_LATEST),y)
QT5WEBENGINE_DEPENDENCIES += host-libpng host-libnss libnss
endif
QT5WEBENGINE_QMAKEFLAGS += WEBENGINE_CONFIG+=use_system_ffmpeg
ifeq ($(BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS),y)
QT5WEBENGINE_QMAKEFLAGS += WEBENGINE_CONFIG+=use_proprietary_codecs
endif
ifeq ($(BR2_PACKAGE_QT5WEBENGINE_ALSA),y)
QT5WEBENGINE_DEPENDENCIES += alsa-lib
else
QT5WEBENGINE_QMAKEFLAGS += QT_CONFIG-=alsa
endif
# QtWebengine's build system uses python, but only supports python2. We work
# around this by forcing python2 early in the PATH, via a python->python2
# symlink.
QT5WEBENGINE_ENV = PATH=$(@D)/host-bin:$(BR_PATH)
define QT5WEBENGINE_PYTHON2_SYMLINK
mkdir -p $(@D)/host-bin
ln -sf $(HOST_DIR)/bin/python2 $(@D)/host-bin/python
endef
QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_PYTHON2_SYMLINK
QT5WEBENGINE_ENV += NINJAFLAGS="-j$(PARALLEL_JOBS)"
ifeq ($(BR2_PACKAGE_QT5_VERSION_LATEST),y)
define QT5WEBENGINE_CREATE_HOST_PKG_CONFIG
sed s%@HOST_DIR@%$(HOST_DIR)%g $(QT5WEBENGINE_PKGDIR)/host-pkg-config.in > $(@D)/host-bin/host-pkg-config
chmod +x $(@D)/host-bin/host-pkg-config
endef
QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_CREATE_HOST_PKG_CONFIG
QT5WEBENGINE_ENV += GN_PKG_CONFIG_HOST=$(@D)/host-bin/host-pkg-config
endif
define QT5WEBENGINE_CONFIGURE_CMDS
(cd $(@D); $(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(HOST_DIR)/bin/qmake $(QT5WEBENGINE_QMAKEFLAGS))
endef
define QT5WEBENGINE_BUILD_CMDS
$(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(MAKE) -C $(@D)
endef
define QT5WEBENGINE_INSTALL_STAGING_CMDS
$(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(MAKE) -C $(@D) install
$(QT5_LA_PRL_FILES_FIXUP)
endef
define QT5WEBENGINE_INSTALL_TARGET_QMLS
cp -dpfr $(STAGING_DIR)/usr/qml/QtWebEngine $(TARGET_DIR)/usr/qml/
endef
ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y)
define QT5WEBENGINE_INSTALL_TARGET_EXAMPLES
cp -dpfr $(STAGING_DIR)/usr/lib/qt/examples/webengine* $(TARGET_DIR)/usr/lib/qt/examples/
endef
endif
ifneq ($(BR2_STATIC_LIBS),y)
define QT5WEBENGINE_INSTALL_TARGET_LIBS
cp -dpf $(STAGING_DIR)/usr/lib/libQt5WebEngine*.so.* $(TARGET_DIR)/usr/lib
cp -dpf $(STAGING_DIR)/usr/libexec/QtWebEngineProcess $(TARGET_DIR)/usr/libexec/
cp -dpfr $(STAGING_DIR)/usr/resources/ $(TARGET_DIR)/usr/
mkdir -p $(TARGET_DIR)/usr/translations/qtwebengine_locales/
cp -dpfr $(STAGING_DIR)/usr/translations/qtwebengine_locales $(TARGET_DIR)/usr/translations/qtwebengine_locales/
endef
endif
define QT5WEBENGINE_INSTALL_TARGET_CMDS
$(QT5WEBENGINE_INSTALL_TARGET_LIBS)
$(QT5WEBENGINE_INSTALL_TARGET_QMLS)
$(QT5WEBENGINE_INSTALL_TARGET_EXAMPLES)
endef
$(eval $(generic-package))