Go to file
Gaël PORTAY 89080bac9b qt5webengine: new package
This patch is based on works [1] and [2].

With this patch, one can run the Qt5 WebEngine quicknanobrowser sample
with the following options.

	BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" and
	BR2_TOOLCHAIN_BUILDROOT_CXX (Qt 5 needs a toolchain w/ wchar, NPTL, C++,
	dynamic library; for now it builds only with glibc)
	BR2_PACKAGE_LIBERATION (Qt needs at least one font)
	BR2_PACKAGE_QT5BASE_EXAMPLES (to install quicknanobrowser sample)
	BR2_PACKAGE_QT5BASE_GIF (do display gif)
	BR2_PACKAGE_QT5BASE_JPEG (do display jpeg)
	BR2_PACKAGE_QT5BASE_PNG (do display png)
	BR2_PACKAGE_QT5QUICKCONTROLS (needed by webengine)
	BR2_PACKAGE_QT5QUICKCONTROLS2 (needed by webengine)
	BR2_PACKAGE_QT5WEBENGINE (because it is what we want)

Qt WebEngine requires an Open(E)GL-capable backend. As an example, the
package rpi-userland must be enabled to build for a rpi.

	BR2_PACKAGE_RPI_USERLAND (to enable OpenGL ES backend)

To browse for HTTPS websites, please consider adding the following
options as well for SSL/TLS.

	BR2_PACKAGE_CA_CERT (for certificates)
	BR2_PACKAGE_NTPD (to sync date for certificates)

Since version 5.9, chromium requires udev at runtime (see note 4).

	BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV (input backend)

To run quicknanobrowser

	# cd /usr/lib/qt/examples/webengine/quicknanobrowser/
	# ./quicknanobrowser https://www.buildroot.org/

Note: The chromium.inc has been generated using the following command.

	( echo 'CHROMIUM_LICENSE_FILES = \' &&
	  cd output/build/qt5webengine-5.9.1/ && \
	  find "src/3rdparty/chromium/" -type f -iname "*LICENSE*" -o -iname "*COPYING*" -o -iname "*GPL*" | \
	  sed -e '/\.asm$/d' \
	      -e '/\.h$/d' \
	      -e '/\.c$/d' \
	      -e '/\.cc$/d' \
	      -e '/\.cpp$/d' \
	      -e '/\.pyc\?$/d' \
	      -e '/\.pl$/d' \
	      -e '/\.sha1$/d' \
	      -e '/\.patch$/d' \
	      -e '/licensecheck/d' \
	      -e 's,^,\t,' \
	      -e 's,$, \\,' | \
	  sort && \
	  echo '' ) >package/qt5/qt5webengine/chromium.inc

Note 2: Since 5.9.1, the chromium's copy of opus fails with neon [3].
Qt WebEngine can uses buildroot ffmpeg copy which compiles fine (using
qmake flag WEBENGINE_CONFIG+=use_system_ffmpeg). It implies selecting
the following options.

	BR2_PACKAGE_FFMPEG
	BR2_PACKAGE_OPUS
	BR2_PACKAGE_LIBVPX
	BR2_PACKAGE_WEBP
	BR2_PACKAGE_WEBP_DEMUX

	In file included from ../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c:31:0:
	/home/gportay/src/buildroot/output-rpi3-qt5.9/host/lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0/include/arm_neon.h:8997:1: error: inlining failed in call to always_inline ‘vld1q_s32’: target specific option mismatch
	 vld1q_s32 (const int32_t * __a)
	 ^~~~~~~~~
	../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c:40:15: note: called from here
	     int32x4_t coef0 = vld1q_s32(coef32);
		       ^~~~~
	../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c: At top level:
	cc1: warning: unrecognized command line option ‘-Wno-#pragma-messages’

Note 3: Version 5.6.2 causes a build issue while building chromium. The
build against this version is disabled until the release 5.6.3 is out.

Note 4: Here is trace when udev does not run

	# cd /usr/lib/qt/examples/webengine/quicknanobrowser
	# ./quicknanobrowser
	QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
	Unable to query physical screen size, defaulting to 100 dpi.
	To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
	[0101/000248.161973:WARNING:resource_bundle_qt.cpp(114)] locale_file_path.empty() for locale
	[0101/000248.384693:WARNING:resource_bundle_qt.cpp(114)] locale_file_path.empty() for locale
	[202:223:0101/000248.484954:FATAL:udev_loader.cc(38)] Check failed: false.
	#0 0x0000742b93de <unknown>
	#1 0x0000742c3c38 <unknown>
	#2 0x000073e1e1aa <unknown>
	#3 0x000073e1d96e <unknown>
	#4 0x000073e1defa <unknown>
	#5 0x000074af6364 <unknown>
	#6 0x000074302878 <unknown>
	#7 0x0000742c8fee <unknown>
	#8 0x0000742c9f44 <unknown>
	#9 0x0000742ca21e <unknown>
	#10 0x0000742cac4c <unknown>
	#11 0x0000742c87b2 <unknown>
	#12 0x0000742da4f6 <unknown>
	#13 0x000073ed9d38 <unknown>
	#14 0x000073eda03c <unknown>
	#15 0x0000742e9aec <unknown>
	#16 0x0000742e71dc <unknown>

	Aborted

Note 5: On rpi and depending on what is insinde the .config, more GPU
memory should be allocated to run properly qt samples.

	#0 0x0000742c63de <unknown>
	#1 0x0000742d0c38 <unknown>
	#2 0x0000749d7bde <unknown>
	#3 0x0000749e3c70 <unknown>
	#4 0x00007530227c <unknown>
	#5 0x000075302480 <unknown>
	#6 0x0000752fb1e4 <unknown>
	#7 0x00007430f878 <unknown>
	#8 0x0000742d5fee <unknown>
	#9 0x0000742d6f44 <unknown>
	#10 0x0000742d721e <unknown>
	#11 0x0000742d7ad6 <unknown>
	#12 0x0000742d57b2 <unknown>
	#13 0x0000742e74f6 <unknown>
	#14 0x0000742f6a74 <unknown>
	#15 0x0000742f41dc <unknown>

	Received signal 6
	#0 0x0000742c63de <unknown>
	#1 0x0000742c66a0 <unknown>
	#2 0x0000725b5d10 <unknown>
	[end of stack trace]
	qml: Render process exited with code 256 (abnormal exit)

	# mount /dev/mmcblk0p1 /mnt
	# sed '/^gpu_mem_/s,=.*,=200,' -i /mnt/config.txt
	# umount /mnt

Note 6: The first patch fixes a build issue when samples are compiled
without the support of printing [4]. This patch is already merged in
branch 5.9 [5] and concerns only 5.9.1.

	085c2c52 Always compile QWebEnginePage::print

It fixes the error below.

	.obj/browsermainwindow.o: In function `BrowserMainWindow::printRequested(QWebEnginePage*)': browsermainwindow.cpp:(.text+0x2cc0): undefined reference to `QWebEnginePage::print(QPrinter*, QWebEngineCallback<bool> const&)'

The second patch loads both libEGL and libGLESv2 symbols implicitly
instead of loading them with explicitly using hard-coded locations. It
fixes a bug when providers of lib*GL does not create libraries named
libEGL.so.1 and libGLESv2.s2 [6]. This patch is already merged in branch
5.9 [7].

	d4c621f6 Load libEGL and libGLES2 symbols implicitly

It fixes the error below.

	[327:347:1221/085837:ERROR:surface_factory_qt.cpp(68)] Failed to load /usr/lib/libGLESv2.so.2: /usr/lib/libGLESv2.so.2: cannot open shared object file: No such file or directory

[1]: http://lists.busybox.net/pipermail/buildroot/2015-July/132010.html
[2]: https://patchwork.ozlabs.org/patch/640633/
[3]: https://patchwork.ozlabs.org/patch/791332/
[4]: https://bugreports.qt.io/browse/QTBUG-61510
[5]: https://codereview.qt-project.org/#/c/198041/
[6]: https://bugreports.qt.io/browse/QTBUG-57761
[7]: https://codereview.qt-project.org/#/c/199554/

Cc: Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Cc: Julien Corjon <corjon.j@ecagroup.com>
Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
[Arnout:
 - move more dependencies to _ARCH_DEPENDS;
 - mention all toolchain dependencies in the comments]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2017-09-23 22:00:02 +02:00
arch arch/arm: add big.LITTLE cpu variants 2017-07-22 23:29:24 +02:00
board configs/qemu_arm_versatile: bump kernel to 4.13.3 2017-09-22 23:12:31 +02:00
boot boot/grub: remove 2017-09-23 20:29:37 +02:00
configs configs/qemu_arm_versatile: bump kernel to 4.13.3 2017-09-22 23:12:31 +02:00
docs docs/manual: fix typo 2017-09-19 14:03:47 +02:00
fs fs/iso9660: remove support for grub 2017-09-23 20:23:12 +02:00
linux linux: bump default to version 4.13.3 2017-09-20 19:19:17 +02:00
package qt5webengine: new package 2017-09-23 22:00:02 +02:00
support boot/grub: remove 2017-09-23 20:29:37 +02:00
system skeleton: Rename skeleton-sysv to skeleton-init-sysv 2017-08-14 21:52:45 +02:00
toolchain toolchain: detect external glibc in merged /usr 2017-09-19 22:43:10 +02:00
utils scancpan: catch exception when MANIFEST is missing 2017-08-21 23:41:07 +02:00
.defconfig arch: remove support for sh64 2016-09-08 22:15:15 +02:00
.gitignore
.gitlab-ci.yml .gitlab-ci.yml: update after adding bananapi_m2_plus_defconfig 2017-09-23 20:51:46 +02:00
.gitlab-ci.yml.in .gitlab-ci.yml: use large timeouts for runtime tests 2017-08-10 10:08:55 +02:00
CHANGES Update for 2017.08 2017-09-02 01:17:43 +02:00
Config.in Config.in: add BR2_HOST_GCC_AT_LEAST_7 2017-07-05 16:20:27 +02:00
Config.in.legacy boot/grub: remove 2017-09-23 20:29:37 +02:00
COPYING
DEVELOPERS qt5webengine: new package 2017-09-23 22:00:02 +02:00
Makefile Kickoff 2017.11 cycle 2017-09-02 15:14:27 +02:00
Makefile.legacy Remove BR2_DEPRECATED 2016-10-15 23:14:45 +02:00
README README: add reference to submitting-patches 2016-02-01 19:16:08 +01:00

Buildroot is a simple, efficient and easy-to-use tool to generate embedded
Linux systems through cross-compilation.

The documentation can be found in docs/manual. You can generate a text
document with 'make manual-text' and read output/docs/manual/manual.text.
Online documentation can be found at http://buildroot.org/docs.html

To build and use the buildroot stuff, do the following:

1) run 'make menuconfig'
2) select the target architecture and the packages you wish to compile
3) run 'make'
4) wait while it compiles
5) find the kernel, bootloader, root filesystem, etc. in output/images

You do not need to be root to build or run buildroot.  Have fun!

Buildroot comes with a basic configuration for a number of boards. Run
'make list-defconfigs' to view the list of provided configurations.

Please feed suggestions, bug reports, insults, and bribes back to the
buildroot mailing list: buildroot@buildroot.org
You can also find us on #buildroot on Freenode IRC.

If you would like to contribute patches, please read
https://buildroot.org/manual.html#submitting-patches