Skip to content

Commit

Permalink
wpewebkit: Enable QtWPE build support for Qt6
Browse files Browse the repository at this point in the history
Refactor Qt configurations into separate files to
accommodate Qt5 and Qt6 based on BBFILE_COLLECTIONS.

Signed-off-by: LI Qingwu <[email protected]>
  • Loading branch information
Qingwu-Li committed Oct 15, 2024
1 parent 71b075a commit 4b11537
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 40 deletions.
44 changes: 44 additions & 0 deletions recipes-browser/wpewebkit/wpewebkit-qt5.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@

# We cannot inherit cmake_qt5 because it will unconditionally add packages
# to DEPENDS which cannot be removed later depending on the options chosen
# with PACKAGECONFIG. Instead, copy the set of options defined in it, in turn
# built upon qmake5_paths (which only defines things, without adding to the
# dependencies), and add those options along the rest needed for the "qtwpe"
# option ourselves.

inherit qmake5_paths

CMAKE_QT_OECONF = "\
-DOE_QMAKE_PATH_PREFIX=${OE_QMAKE_PATH_PREFIX} \
-DOE_QMAKE_PATH_HEADERS=${OE_QMAKE_PATH_HEADERS} \
-DOE_QMAKE_PATH_LIBS=${OE_QMAKE_PATH_LIBS} \
-DOE_QMAKE_PATH_ARCHDATA=${OE_QMAKE_PATH_ARCHDATA} \
-DOE_QMAKE_PATH_DATA=${OE_QMAKE_PATH_DATA} \
-DOE_QMAKE_PATH_BINS=${OE_QMAKE_PATH_BINS} \
-DOE_QMAKE_PATH_LIBEXECS=${OE_QMAKE_PATH_LIBEXECS} \
-DOE_QMAKE_PATH_PLUGINS=${OE_QMAKE_PATH_PLUGINS} \
-DOE_QMAKE_PATH_QML=${OE_QMAKE_PATH_QML} \
-DOE_QMAKE_PATH_TRANSLATIONS=${OE_QMAKE_PATH_TRANSLATIONS} \
-DOE_QMAKE_PATH_DOCS=${OE_QMAKE_PATH_DOCS} \
-DOE_QMAKE_PATH_SETTINGS=${OE_QMAKE_PATH_SETTINGS} \
-DOE_QMAKE_PATH_EXAMPLES=${OE_QMAKE_PATH_EXAMPLES} \
-DOE_QMAKE_PATH_TESTS=${OE_QMAKE_PATH_TESTS} \
-DOE_QMAKE_PATH_HOST_PREFIX=${OE_QMAKE_PATH_HOST_PREFIX} \
-DOE_QMAKE_PATH_HOST_BINS=${OE_QMAKE_PATH_HOST_BINS} \
-DOE_QMAKE_PATH_HOST_DATA=${OE_QMAKE_PATH_HOST_DATA} \
-DOE_QMAKE_PATH_HOST_LIBS=${OE_QMAKE_PATH_HOST_LIBS} \
-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${OE_QMAKE_PATH_EXTERNAL_HOST_BINS} \
-DOE_QMAKE_PATH_QT_HEADERS=${OE_QMAKE_PATH_QT_HEADERS} \
-DOE_QMAKE_PATH_QT_ARCHDATA=${OE_QMAKE_PATH_QT_ARCHDATA} \
-DOE_QMAKE_PATH_QT_DATA=${OE_QMAKE_PATH_QT_DATA} \
-DOE_QMAKE_PATH_QT_BINS=${OE_QMAKE_PATH_QT_BINS} \
-DOE_QMAKE_PATH_QT_TRANSLATIONS=${OE_QMAKE_PATH_QT_TRANSLATIONS} \
-DOE_QMAKE_PATH_QT_DOCS=${OE_QMAKE_PATH_QT_DOCS} \
-DOE_QMAKE_PATH_QT_SETTINGS=${OE_QMAKE_PATH_QT_SETTINGS} \
-DOE_QMAKE_PATH_QT_EXAMPLES=${OE_QMAKE_PATH_QT_EXAMPLES} \
-DOE_QMAKE_PATH_QT_TESTS=${OE_QMAKE_PATH_QT_TESTS} \
"

QT_BUILD_DEPS = "qtquickcontrols2"

FILES:${PN}-qtwpe-qml-plugin += "${libdir}/qt5/qml/org/wpewebkit/qtwpe/*"
20 changes: 20 additions & 0 deletions recipes-browser/wpewebkit/wpewebkit-qt6.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
inherit qt6-cmake

CMAKE_QT_OECONF = "\
-DUSE_QT6=ON \
-DENABLE_WPE_PLATFORM=ON \
"

QT_BUILD_DEPS = "qtdeclarative-native wayland-native wayland-protocols wpebackend-fdo"

# Relocate the plugin to the default QML directory for accessibility.
do_install:append() {
if [ -d ${D}${libdir}/qt6/qml/org/wpewebkit ]; then
install -d ${D}${libdir}/qml/org/
mv ${D}${libdir}/qt6/qml/org/wpewebkit ${D}${libdir}/qml/org/
rm -rf ${D}${libdir}/qt6
fi
}


FILES:${PN}-qtwpe-qml-plugin += "${libdir}/qml/org/wpewebkit/qtwpe/*"
44 changes: 4 additions & 40 deletions recipes-browser/wpewebkit/wpewebkit.inc
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,9 @@ DEPENDS:append = " \

inherit cmake pkgconfig perlnative python3native

# We cannot inherit cmake_qt5 because it will unconditionally add packages
# to DEPENDS which cannot be removed later depending on the options chosen
# with PACKAGECONFIG. Instead, copy the set of options defined in it, in turn
# built upon qmake5_paths (which only defines things, without adding to the
# dependencies), and add those options along the rest needed for the "qtwpe"
# option ourselves.
#
inherit ${@'qmake5_paths' if 'qt5-layer' in d.getVar('BBFILE_COLLECTIONS').split() else ''}
CMAKE_QT5_OECONF = "\
-DOE_QMAKE_PATH_PREFIX=${OE_QMAKE_PATH_PREFIX} \
-DOE_QMAKE_PATH_HEADERS=${OE_QMAKE_PATH_HEADERS} \
-DOE_QMAKE_PATH_LIBS=${OE_QMAKE_PATH_LIBS} \
-DOE_QMAKE_PATH_ARCHDATA=${OE_QMAKE_PATH_ARCHDATA} \
-DOE_QMAKE_PATH_DATA=${OE_QMAKE_PATH_DATA} \
-DOE_QMAKE_PATH_BINS=${OE_QMAKE_PATH_BINS} \
-DOE_QMAKE_PATH_LIBEXECS=${OE_QMAKE_PATH_LIBEXECS} \
-DOE_QMAKE_PATH_PLUGINS=${OE_QMAKE_PATH_PLUGINS} \
-DOE_QMAKE_PATH_QML=${OE_QMAKE_PATH_QML} \
-DOE_QMAKE_PATH_TRANSLATIONS=${OE_QMAKE_PATH_TRANSLATIONS} \
-DOE_QMAKE_PATH_DOCS=${OE_QMAKE_PATH_DOCS} \
-DOE_QMAKE_PATH_SETTINGS=${OE_QMAKE_PATH_SETTINGS} \
-DOE_QMAKE_PATH_EXAMPLES=${OE_QMAKE_PATH_EXAMPLES} \
-DOE_QMAKE_PATH_TESTS=${OE_QMAKE_PATH_TESTS} \
-DOE_QMAKE_PATH_HOST_PREFIX=${OE_QMAKE_PATH_HOST_PREFIX} \
-DOE_QMAKE_PATH_HOST_BINS=${OE_QMAKE_PATH_HOST_BINS} \
-DOE_QMAKE_PATH_HOST_DATA=${OE_QMAKE_PATH_HOST_DATA} \
-DOE_QMAKE_PATH_HOST_LIBS=${OE_QMAKE_PATH_HOST_LIBS} \
-DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${OE_QMAKE_PATH_EXTERNAL_HOST_BINS} \
-DOE_QMAKE_PATH_QT_HEADERS=${OE_QMAKE_PATH_QT_HEADERS} \
-DOE_QMAKE_PATH_QT_ARCHDATA=${OE_QMAKE_PATH_QT_ARCHDATA} \
-DOE_QMAKE_PATH_QT_DATA=${OE_QMAKE_PATH_QT_DATA} \
-DOE_QMAKE_PATH_QT_BINS=${OE_QMAKE_PATH_QT_BINS} \
-DOE_QMAKE_PATH_QT_TRANSLATIONS=${OE_QMAKE_PATH_QT_TRANSLATIONS} \
-DOE_QMAKE_PATH_QT_DOCS=${OE_QMAKE_PATH_QT_DOCS} \
-DOE_QMAKE_PATH_QT_SETTINGS=${OE_QMAKE_PATH_QT_SETTINGS} \
-DOE_QMAKE_PATH_QT_EXAMPLES=${OE_QMAKE_PATH_QT_EXAMPLES} \
-DOE_QMAKE_PATH_QT_TESTS=${OE_QMAKE_PATH_QT_TESTS} \
"

require ${@'wpewebkit-qt6.inc' if 'qt6-layer' in d.getVar('BBFILE_COLLECTIONS').split() else ''}
require ${@'wpewebkit-qt5.inc' if 'qt5-layer' in d.getVar('BBFILE_COLLECTIONS').split() else ''}

export WK_USE_CCACHE="NO"

Expand Down Expand Up @@ -108,7 +73,7 @@ PACKAGECONFIG[webcrypto] = "-DENABLE_WEB_CRYPTO=ON,-DENABLE_WEB_CRYPTO=OFF,libgc
PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
PACKAGECONFIG[remote-inspector] = "-DENABLE_REMOTE_INSPECTOR=ON,-DENABLE_REMOTE_INSPECTOR=OFF,"
PACKAGECONFIG[webrtc] = "-DENABLE_WEB_RTC=ON,-DENABLE_WEB_RTC=OFF,libvpx libevent libopus openh264"
PACKAGECONFIG[qtwpe] = "-DENABLE_WPE_QT_API=ON ${CMAKE_QT5_OECONF},-DENABLE_WPE_QT_API=OFF,qtbase-native qtbase qtdeclarative qtquickcontrols2 libepoxy wpebackend-fdo"
PACKAGECONFIG[qtwpe] = "-DENABLE_WPE_QT_API=ON ${CMAKE_QT_OECONF},-DENABLE_WPE_QT_API=OFF,qtbase-native qtbase qtdeclarative libepoxy wpebackend-fdo ${QT_BUILD_DEPS}"
PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
PACKAGECONFIG[unified-builds] = "-DENABLE_UNIFIED_BUILDS=ON,-DENABLE_UNIFIED_BUILDS=OFF,"
PACKAGECONFIG[thunder] = "-DENABLE_THUNDER=ON,-DENABLE_THUNDER=OFF,virtual/open-cdm"
Expand Down Expand Up @@ -154,7 +119,6 @@ FILES:${PN} += "${libdir}/wpe-webkit*/injected-bundle/libWPEInjectedBundle.so"
FILES:${PN}-web-inspector-plugin += "${libdir}/libWPEWebInspectorResources.so ${libdir}/wpe-webkit-*/libWPEWebInspectorResources.so"
INSANE_SKIP:${PN}-web-inspector-plugin = "dev-so"

FILES:${PN}-qtwpe-qml-plugin += "${libdir}/qt5/qml/org/wpewebkit/qtwpe/*"
INSANE_SKIP:${PN}-qtwpe-qml-plugin = "dev-so"

# JSC JIT on ARMv7 is better supported with Thumb2 instruction set.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
From 955cfdd91676f35635e6a55da513f64b7c5555c9 Mon Sep 17 00:00:00 2001
From: LI Qingwu <[email protected]>
Date: Mon, 30 Sep 2024 11:54:19 +0800
Subject: [PATCH 3/4] WPE Platform: fix wpe_toplevel_qtquick has not been
declared

Fix the following compile failed issue for Qt6:

Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp:35:46:
error: 'wpe_toplevel_qtquick' has not been declared

Upstream-Status: Pending [1]
[1] https://github.com/WebKit/WebKit/pull/34441

Signed-off-by: LI Qingwu <[email protected]>
---
Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp | 2 ++
1 file changed, 2 insertions(+)

diff --git a/Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp b/Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp
index ff6daf3e9a28..966734abefc4 100644
--- a/Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp
+++ b/Source/WebKit/UIProcess/API/wpe/qt6/WPEToplevelQtQuick.cpp
@@ -26,6 +26,8 @@
#include "config.h"
#include "WPEToplevelQtQuick.h"

+#include <wtf/glib/WTFGType.h>
+
/**
* WPEToplevelQtQuick:
*
--
2.34.1

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
From b92e21659ae4621240e444156512961a14007881 Mon Sep 17 00:00:00 2001
From: LI Qingwu <[email protected]>
Date: Thu, 10 Oct 2024 12:56:58 +0800
Subject: [PATCH 4/4] WPE Platform: fix wpe_view_resize was not declared issue

fix Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp:87:5:
error: 'wpe_view_resize' was not declared in this scope;
did you mean 'wpe_view_resized'?

Upstream-Status: Pending [1]
[1] https://github.com/WebKit/WebKit/pull/34441

Signed-off-by: LI Qingwu <[email protected]>
---
Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp b/Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp
index 5ff20ab8c2b8..f91cac137e5e 100644
--- a/Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp
+++ b/Source/WebKit/UIProcess/API/wpe/qt6/WPEQtView.cpp
@@ -84,7 +84,10 @@ void WPEQtView::geometryChange(const QRectF& newGeometry, const QRectF&)
return;

auto* wpeView = webkit_web_view_get_wpe_view(d->m_webView.get());
- wpe_view_resize(wpeView, d->m_size.width(), d->m_size.height());
+ auto* wpeToplevel = wpe_view_get_toplevel(wpeView);
+ if (wpeToplevel)
+ wpe_toplevel_resize(wpeToplevel, d->m_size.width(), d->m_size.height());
+
}

void WPEQtView::configureWindow()
@@ -119,7 +122,10 @@ void WPEQtView::createWebView()
"settings", settings.get(), nullptr)));

auto* wpeView = webkit_web_view_get_wpe_view(d->m_webView.get());
- wpe_view_resize(wpeView, d->m_size.width(), d->m_size.height());
+ auto* wpeToplevel = wpe_view_get_toplevel(wpeView);
+ if (wpeToplevel)
+ wpe_toplevel_resize(wpeToplevel, d->m_size.width(), d->m_size.height());
+
wpe_view_map(wpeView); // FIXME: unmap when appropriate and implement can_be_mapped if needed.

if (!wpe_view_qtquick_initialize_rendering(WPE_VIEW_QTQUICK(wpeView), this, &error.outPtr())) {
--
2.34.1

2 changes: 2 additions & 0 deletions recipes-browser/wpewebkit/wpewebkit_2.46.1.bb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"

SRC_URI = "https://wpewebkit.org/releases/${BPN}-${PV}.tar.xz;name=tarball \
file://0001-JSC-Fix-build-failure-on-musl-Add-fallback-for-round.patch \
file://0003-WPE-Platform-fix-wpe_toplevel_qtquick-has-not-been-d.patch \
file://0004-WPE-Platform-fix-wpe_view_resize-was-not-declared-is.patch \
"

SRC_URI[tarball.sha256sum] = "1e0aaf870f36001c42b1ce5a2027b4101bed878746e437cc6d6fed0693afe9ad"
Expand Down

0 comments on commit 4b11537

Please sign in to comment.