a475e0d874
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>
102 lines
3.5 KiB
Makefile
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))
|