* [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work
@ 2024-04-11 14:55 Ben Hutchings via buildroot
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
2024-09-14 16:16 ` [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Thomas Petazzoni via buildroot
0 siblings, 2 replies; 6+ messages in thread
From: Ben Hutchings via buildroot @ 2024-04-11 14:55 UTC (permalink / raw)
To: buildroot; +Cc: Ben Hutchings
Currently the qt6base package does not install a working qmake
program, so applications can only be built with CMake.
To ease upgrades from Qt 5, make qmake work as well:
- Create a linux-buildroot-g++ device spec, like we do for Qt 5.
- Fix the generated target_qt.conf file. The Qt build system
currently generates this with the sysroot directory wrongly added in
various places.
- Fix the qmake wrapper script in the sysroot to set the QMAKEPATH
environment variable.
Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
---
package/qt6/qt6base/qmake.conf.in | 34 +++++++++++++++++++++++
package/qt6/qt6base/qplatformdefs.h | 1 +
package/qt6/qt6base/qt6base.mk | 39 +++++++++++++++++++++++++++
package/qt6/qt6base/target_qt.conf.in | 11 ++++++++
4 files changed, 85 insertions(+)
create mode 100644 package/qt6/qt6base/qmake.conf.in
create mode 100644 package/qt6/qt6base/qplatformdefs.h
create mode 100644 package/qt6/qt6base/target_qt.conf.in
diff --git a/package/qt6/qt6base/qmake.conf.in b/package/qt6/qt6base/qmake.conf.in
new file mode 100644
index 0000000000..b62a671c35
--- /dev/null
+++ b/package/qt6/qt6base/qmake.conf.in
@@ -0,0 +1,34 @@
+# Qt6 has a mechanism to support "device" profiles, so that people can
+# specify the compiler, compiler flags and so on for a specific device.
+
+# We leverage this mechanism in the Buildroot packaging of qt6 to
+# simplify cross-compilation: we have our own "device" definition, which
+# allows us to easily pass the cross-compiler paths and flags from our
+# qt6.mk.
+
+CROSS_COMPILE = @CROSS_COMPILE@
+
+include(../common/linux_device_pre.conf)
+
+# modifications to gcc-base.conf
+QMAKE_CFLAGS += $${BR_COMPILER_CFLAGS}
+QMAKE_CXXFLAGS += $${BR_COMPILER_CXXFLAGS}
+# Remove all optimisation flags, we really only want our own.
+QMAKE_CFLAGS_OPTIMIZE =
+QMAKE_CFLAGS_OPTIMIZE_DEBUG =
+QMAKE_CFLAGS_OPTIMIZE_FULL =
+QMAKE_CFLAGS_OPTIMIZE_SIZE =
+QMAKE_CFLAGS_DEBUG =
+QMAKE_CXXFLAGS_DEBUG =
+QMAKE_CFLAGS_RELEASE =
+QMAKE_CXXFLAGS_RELEASE =
+CONFIG += nostrip
+
+QMAKE_LIBS += -lrt -lpthread -ldl
+QMAKE_CFLAGS_ISYSTEM =
+
+# Architecture specific configuration
+include(arch.conf)
+
+include(../common/linux_device_post.conf)
+load(qt_config)
diff --git a/package/qt6/qt6base/qplatformdefs.h b/package/qt6/qt6base/qplatformdefs.h
new file mode 100644
index 0000000000..99e9a27923
--- /dev/null
+++ b/package/qt6/qt6base/qplatformdefs.h
@@ -0,0 +1 @@
+#include "../../linux-g++/qplatformdefs.h"
diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk
index 6857725ef5..049d73a84f 100644
--- a/package/qt6/qt6base/qt6base.mk
+++ b/package/qt6/qt6base/qt6base.mk
@@ -78,6 +78,45 @@ QT6BASE_CONF_OPTS += \
-DFEATURE_avx512vl=OFF \
-DFEATURE_vaes=OFF
+ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
+define QT6BASE_MKSPEC_ARCH_CONFIG
+# Qt 6 needs atomics, which on various architectures are in -latomic
+ printf '!host_build { \n LIBS += -latomic\n }' > \
+ $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/arch.conf
+endef
+endif
+
+define QT6BASE_INSTALL_MKSPEC
+ mkdir -p $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++
+ $(INSTALL) -m 0644 $(QT6BASE_PKGDIR)/qplatformdefs.h \
+ $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/
+ sed 's%@CROSS_COMPILE@%$(TARGET_CROSS)%' \
+ < $(QT6BASE_PKGDIR)/qmake.conf.in \
+ > $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/qmake.conf
+ touch $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/arch.conf
+ $(QT6BASE_MKSPEC_ARCH_CONFIG)
+endef
+
+# The generated broken target_qt.conf is broken, so replace it
+define QT6BASE_INSTALL_TARGET_QT_CONF
+ sed 's%@HOST_DIR@%$(HOST_DIR)%; s%@SYSROOT@%$(STAGING_DIR)%' \
+ < $(QT6BASE_PKGDIR)/target_qt.conf.in \
+ > $(STAGING_DIR)/usr/bin/target_qt.conf
+endef
+
+# The qmake wrapper script doesn't set QMAKEPATH, so qmake doesn't
+# find specs and modules installed for the target
+define QT6BASE_FIX_QMAKE_SCRIPT
+ sed -i '1a\
+export QMAKEPATH=$(STAGING_DIR)/usr' \
+ $(STAGING_DIR)/usr/bin/qmake
+endef
+
+QT6BASE_POST_INSTALL_STAGING_HOOKS += \
+ QT6BASE_INSTALL_MKSPEC \
+ QT6BASE_INSTALL_TARGET_QT_CONF \
+ QT6BASE_FIX_QMAKE_SCRIPT
+
HOST_QT6BASE_DEPENDENCIES = \
host-double-conversion \
host-libb2 \
diff --git a/package/qt6/qt6base/target_qt.conf.in b/package/qt6/qt6base/target_qt.conf.in
new file mode 100644
index 0000000000..5702970c47
--- /dev/null
+++ b/package/qt6/qt6base/target_qt.conf.in
@@ -0,0 +1,11 @@
+[Paths]
+Prefix=/usr
+HostPrefix=@HOST_DIR@
+HostBinaries=bin
+HostLibraries=lib
+HostLibraryExecutables=libexec
+HostData=.
+Sysroot=@SYSROOT@
+SysrootifyPrefix=true
+TargetSpec=devices/linux-buildroot-g++
+HostSpec=
--
2.39.2
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support
2024-04-11 14:55 [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Ben Hutchings via buildroot
@ 2024-04-11 14:55 ` Ben Hutchings via buildroot
2024-04-11 18:48 ` Yann E. MORIN
2024-09-14 16:44 ` Thomas Petazzoni via buildroot
2024-09-14 16:16 ` [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Thomas Petazzoni via buildroot
1 sibling, 2 replies; 6+ messages in thread
From: Ben Hutchings via buildroot @ 2024-04-11 14:55 UTC (permalink / raw)
To: buildroot; +Cc: Ben Hutchings
Apply a patch from upstream to make Qt 6 support DirectFB again.
Implement a config option for this, similar to what we do for Qt 5.
Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
---
package/qt6/qt6base/Config.in | 8 +
.../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++
package/qt6/qt6base/qt6base.mk | 7 +
3 files changed, 303 insertions(+)
create mode 100644 package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
diff --git a/package/qt6/qt6base/Config.in b/package/qt6/qt6base/Config.in
index 3b15d40c83..b21cc33cde 100644
--- a/package/qt6/qt6base/Config.in
+++ b/package/qt6/qt6base/Config.in
@@ -36,6 +36,7 @@ config BR2_PACKAGE_QT6BASE_GUI
# At least one graphic backend must be enabled, so enable
# linuxfb if nothing is enabled.
select BR2_PACKAGE_QT6BASE_LINUXFB if \
+ !BR2_PACKAGE_QT6BASE_DIRECTFB && \
!BR2_PACKAGE_QT6BASE_XCB && \
!BR2_PACKAGE_QT6BASE_EGLFS
help
@@ -56,6 +57,13 @@ config BR2_PACKAGE_QT6BASE_VULKAN
config BR2_PACKAGE_QT6BASE_LINUXFB
bool "linuxfb support"
+config BR2_PACKAGE_QT6BASE_DIRECTFB
+ bool "directfb support"
+ depends on BR2_PACKAGE_DIRECTFB
+
+comment "directfb backend available if directfb is enabled"
+ depends on !BR2_PACKAGE_DIRECTFB
+
config BR2_PACKAGE_QT6BASE_XCB
bool "X.org XCB support"
depends on BR2_PACKAGE_XORG7
diff --git a/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
new file mode 100644
index 0000000000..5a7df51779
--- /dev/null
+++ b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
@@ -0,0 +1,288 @@
+From d86ab16a86ec4d6fb92855a3c9913b6b74b6bb0f Mon Sep 17 00:00:00 2001
+From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
+Date: Tue, 30 Aug 2022 14:54:01 +0200
+Subject: [PATCH] directfb: Fix compilation
+
+The DirectFB QPA plugin has not built since Qt 6, because it used
+deprecated API which has been removed and private API which has
+changed.
+
+This change updates the handleMouseEvent() and
+handleWheelEvent() calls with the contents of the deprecated
+overloads the way they were in Qt 5.15.
+
+In addition, it updates usage of GlyphAndSubPixelPosition to default to
+vertical subpixel position of 0, and adds override qualifiers where
+necessary.
+
+Fixes: QTBUG-105061
+Change-Id: Id7516f8e3c0a466d15b754f8e5f6df15a5f9526a
+Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
+---
+ src/plugins/platforms/directfb/main.cpp | 2 +-
+ .../directfb/qdirectfbbackingstore.h | 8 ++---
+ .../platforms/directfb/qdirectfbblitter.cpp | 2 +-
+ .../platforms/directfb/qdirectfbblitter.h | 31 ++++++++++++-------
+ .../platforms/directfb/qdirectfbcursor.h | 2 +-
+ .../platforms/directfb/qdirectfbinput.cpp | 11 ++++---
+ .../platforms/directfb/qdirectfbinput.h | 2 +-
+ .../platforms/directfb/qdirectfbintegration.h | 20 ++++++------
+ .../platforms/directfb/qdirectfbscreen.h | 10 +++---
+ .../platforms/directfb/qdirectfbwindow.h | 20 ++++++------
+ 10 files changed, 60 insertions(+), 48 deletions(-)
+
+diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp
+index 02cceeb487..4618696154 100644
+--- a/src/plugins/platforms/directfb/main.cpp
++++ b/src/plugins/platforms/directfb/main.cpp
+@@ -24,7 +24,7 @@ class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "directfb.json")
+ public:
+- QPlatformIntegration *create(const QString&, const QStringList&);
++ QPlatformIntegration *create(const QString&, const QStringList&) override;
+ };
+
+ QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.h b/src/plugins/platforms/directfb/qdirectfbbackingstore.h
+index c51f29271d..625b672a40 100644
+--- a/src/plugins/platforms/directfb/qdirectfbbackingstore.h
++++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.h
+@@ -18,10 +18,10 @@ class QDirectFbBackingStore : public QPlatformBackingStore
+ public:
+ QDirectFbBackingStore(QWindow *window);
+
+- QPaintDevice *paintDevice();
+- void flush(QWindow *window, const QRegion ®ion, const QPoint &offset);
+- void resize (const QSize &size, const QRegion &staticContents);
+- bool scroll(const QRegion &area, int dx, int dy);
++ QPaintDevice *paintDevice() override;
++ void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override;
++ void resize (const QSize &size, const QRegion &staticContents) override;
++ bool scroll(const QRegion &area, int dx, int dy) override;
+
+ QImage toImage() const override;
+
+diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
+index 0a110da798..aac0e3d800 100644
+--- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp
++++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
+@@ -216,7 +216,7 @@ bool QDirectFbBlitter::drawCachedGlyphs(const QPaintEngineState *state, QFontEng
+ for (int i=0; i<numGlyphs; ++i) {
+
+ QFixed subPixelPosition = fontEngine->subPixelPositionForX(positions[i].x);
+- QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition);
++ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], QFixedPoint(subPixelPosition, 0));
+ const QTextureGlyphCache::Coord &c = cache->coords[glyph];
+ if (c.isNull())
+ continue;
+diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h
+index 591021061c..6183859613 100644
+--- a/src/plugins/platforms/directfb/qdirectfbblitter.h
++++ b/src/plugins/platforms/directfb/qdirectfbblitter.h
+@@ -19,11 +19,20 @@ public:
+ QDirectFbBlitter(const QSize &size, bool alpha);
+ virtual ~QDirectFbBlitter();
+
+- virtual void fillRect(const QRectF &rect, const QColor &color);
+- virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect);
+- void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode);
+- void drawPixmapOpacity(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect, QPainter::CompositionMode cmode, qreal opacity);
+- virtual bool drawCachedGlyphs(const QPaintEngineState *state, QFontEngine::GlyphFormat glyphFormat, int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions, QFontEngine *fontEngine);
++ void fillRect(const QRectF &rect, const QColor &color) override;
++ void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) override;
++ void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode) override;
++ void drawPixmapOpacity(const QRectF &rect,
++ const QPixmap &pixmap,
++ const QRectF &subrect,
++ QPainter::CompositionMode cmode,
++ qreal opacity) override;
++ bool drawCachedGlyphs(const QPaintEngineState *state,
++ QFontEngine::GlyphFormat glyphFormat,
++ int numGlyphs,
++ const glyph_t *glyphs,
++ const QFixedPoint *positions,
++ QFontEngine *fontEngine) override;
+
+ IDirectFBSurface *dfbSurface() const;
+
+@@ -32,8 +41,8 @@ public:
+ static DFBSurfacePixelFormat selectPixmapFormat(bool withAlpha);
+
+ protected:
+- virtual QImage *doLock();
+- virtual void doUnlock();
++ QImage *doLock() override;
++ void doUnlock() override;
+
+ QDirectFBPointer<IDirectFBSurface> m_surface;
+ QImage m_image;
+@@ -50,12 +59,12 @@ private:
+ class QDirectFbBlitterPlatformPixmap : public QBlittablePlatformPixmap
+ {
+ public:
+- QBlittable *createBlittable(const QSize &size, bool alpha) const;
++ QBlittable *createBlittable(const QSize &size, bool alpha) const override;
+
+ QDirectFbBlitter *dfbBlitter() const;
+
+- virtual bool fromFile(const QString &filename, const char *format,
+- Qt::ImageConversionFlags flags);
++ bool fromFile(const QString &filename, const char *format,
++ Qt::ImageConversionFlags flags) override;
+
+ private:
+ bool fromDataBufferDescription(const DFBDataBufferDescription &);
+@@ -83,7 +92,7 @@ public:
+ : QImageTextureGlyphCache(format, matrix)
+ {}
+
+- virtual void resizeTextureData(int width, int height);
++ void resizeTextureData(int width, int height) override;
+
+ IDirectFBSurface *sourceSurface();
+
+diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h
+index 9a480fc8f8..21a8f4353d 100644
+--- a/src/plugins/platforms/directfb/qdirectfbcursor.h
++++ b/src/plugins/platforms/directfb/qdirectfbcursor.h
+@@ -19,7 +19,7 @@ class QDirectFBCursor : public QPlatformCursor
+ public:
+ QDirectFBCursor(QPlatformScreen *screen);
+ #ifndef QT_NO_CURSOR
+- void changeCursor(QCursor *cursor, QWindow *window);
++ void changeCursor(QCursor *cursor, QWindow *window) override;
+ #endif
+
+ private:
+diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp
+index a62ff9882c..516dc1e9d8 100644
+--- a/src/plugins/platforms/directfb/qdirectfbinput.cpp
++++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp
+@@ -126,7 +126,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
+ long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
+
+ QWindow *tlw = m_tlwMap.value(event.window.window_id);
+- QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons);
++ QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons, Qt::NoButton, QEvent::None);
+ }
+
+ void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
+@@ -135,9 +135,12 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
+ QPoint globalPos(event.window.cx, event.window.cy);
+ long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
+ QWindow *tlw = m_tlwMap.value(event.window.window_id);
+- QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos,
+- event.window.step*120,
+- Qt::Vertical);
++ QWindowSystemInterface::handleWheelEvent(tlw,
++ timestamp,
++ p,
++ globalPos,
++ QPoint(),
++ QPoint(0, event.window.step*120));
+ }
+
+ void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
+diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h
+index 5496f537a2..02175abc7b 100644
+--- a/src/plugins/platforms/directfb/qdirectfbinput.h
++++ b/src/plugins/platforms/directfb/qdirectfbinput.h
+@@ -26,7 +26,7 @@ public:
+ void stopInputEventLoop();
+
+ protected:
+- void run();
++ void run() override;
+
+ private:
+ void handleEvents();
+diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h
+index aa369d7c05..8dd2a4516a 100644
+--- a/src/plugins/platforms/directfb/qdirectfbintegration.h
++++ b/src/plugins/platforms/directfb/qdirectfbintegration.h
+@@ -25,16 +25,16 @@ public:
+
+ void connectToDirectFb();
+
+- bool hasCapability(Capability cap) const;
+- QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
+- QPlatformWindow *createPlatformWindow(QWindow *window) const;
+- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
+- QAbstractEventDispatcher *createEventDispatcher() const;
+-
+- QPlatformFontDatabase *fontDatabase() const;
+- QPlatformServices *services() const;
+- QPlatformInputContext *inputContext() const { return m_inputContext; }
+- QPlatformNativeInterface *nativeInterface() const;
++ bool hasCapability(Capability cap) const override;
++ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override;
++ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
++ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
++ QAbstractEventDispatcher *createEventDispatcher() const override;
++
++ QPlatformFontDatabase *fontDatabase() const override;
++ QPlatformServices *services() const override;
++ QPlatformInputContext *inputContext() const override { return m_inputContext; }
++ QPlatformNativeInterface *nativeInterface() const override;
+
+ protected:
+ virtual void initializeDirectFB();
+diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.h b/src/plugins/platforms/directfb/qdirectfbscreen.h
+index a4f2e9adb1..cbcb6a55da 100644
+--- a/src/plugins/platforms/directfb/qdirectfbscreen.h
++++ b/src/plugins/platforms/directfb/qdirectfbscreen.h
+@@ -19,11 +19,11 @@ class QDirectFbScreen : public QPlatformScreen
+ public:
+ QDirectFbScreen(int display);
+
+- QRect geometry() const { return m_geometry; }
+- int depth() const { return m_depth; }
+- QImage::Format format() const { return m_format; }
+- QSizeF physicalSize() const { return m_physicalSize; }
+- QPlatformCursor *cursor() const { return m_cursor.data(); }
++ QRect geometry() const override { return m_geometry; }
++ int depth() const override { return m_depth; }
++ QImage::Format format() const override { return m_format; }
++ QSizeF physicalSize() const override { return m_physicalSize; }
++ QPlatformCursor *cursor() const override { return m_cursor.data(); }
+
+ // DirectFb helpers
+ IDirectFBDisplayLayer *dfbLayer() const;
+diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h
+index 6413d91860..f05038d8ca 100644
+--- a/src/plugins/platforms/directfb/qdirectfbwindow.h
++++ b/src/plugins/platforms/directfb/qdirectfbwindow.h
+@@ -15,19 +15,19 @@ class QDirectFbWindow : public QPlatformWindow
+ {
+ public:
+ QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler);
+- ~QDirectFbWindow();
++ ~QDirectFbWindow() override;
+
+- void setGeometry(const QRect &rect);
+- void setOpacity(qreal level);
++ void setGeometry(const QRect &rect) override;
++ void setOpacity(qreal level) override;
+
+- void setVisible(bool visible);
++ void setVisible(bool visible) override;
+
+- void setWindowFlags(Qt::WindowFlags flags);
+- bool setKeyboardGrabEnabled(bool grab);
+- bool setMouseGrabEnabled(bool grab);
+- void raise();
+- void lower();
+- WId winId() const;
++ void setWindowFlags(Qt::WindowFlags flags) override;
++ bool setKeyboardGrabEnabled(bool grab) override;
++ bool setMouseGrabEnabled(bool grab) override;
++ void raise() override;
++ void lower() override;
++ WId winId() const override;
+
+ virtual void createDirectFBWindow();
+ IDirectFBWindow *dfbWindow() const;
+--
+2.39.2
+
diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk
index 049d73a84f..a904d6edc8 100644
--- a/package/qt6/qt6base/qt6base.mk
+++ b/package/qt6/qt6base/qt6base.mk
@@ -181,6 +181,13 @@ else
QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=OFF
endif
+ifeq ($(BR2_PACKAGE_QT6BASE_DIRECTFB),y)
+QT6BASE_CONF_OPTS += -DFEATURE_directfb=ON
+QT6BASE_DEPENDENCIES += directfb
+else
+QT6BASE_CONF_OPTS += -DFEATURE_directfb=OFF
+endif
+
ifeq ($(BR2_PACKAGE_QT6BASE_XCB),y)
QT6BASE_CONF_OPTS += \
-DFEATURE_xcb=ON \
--
2.39.2
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
@ 2024-04-11 18:48 ` Yann E. MORIN
2024-04-12 21:18 ` Ben Hutchings via buildroot
2024-09-14 16:44 ` Thomas Petazzoni via buildroot
1 sibling, 1 reply; 6+ messages in thread
From: Yann E. MORIN @ 2024-04-11 18:48 UTC (permalink / raw)
To: Ben Hutchings; +Cc: buildroot
Ben, All,
On 2024-04-11 16:55 +0200, Ben Hutchings via buildroot spake thusly:
> Apply a patch from upstream to make Qt 6 support DirectFB again.
>
> Implement a config option for this, similar to what we do for Qt 5.
>
> Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
> ---
> package/qt6/qt6base/Config.in | 8 +
> .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++
> package/qt6/qt6base/qt6base.mk | 7 +
$ ./utils/docker-run make check-package
package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: use name <number>-<description>.patch (https://nightly.buildroot.org/#_providing_patches)
package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Signed-off-by in the header (https://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches)
package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Upstream in the header (https://nightly.buildroot.org/#_additional_patch_documentation)
Also, we currently only have qt6.4, while qt-6.7 is already released
now, and the patch you add was already present in qt-6.5.
So, maybe it would be better to actually bump qt6 rather than backport
patches?
Regards,
Yann E. MORIN.
> 3 files changed, 303 insertions(+)
> create mode 100644 package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
>
> diff --git a/package/qt6/qt6base/Config.in b/package/qt6/qt6base/Config.in
> index 3b15d40c83..b21cc33cde 100644
> --- a/package/qt6/qt6base/Config.in
> +++ b/package/qt6/qt6base/Config.in
> @@ -36,6 +36,7 @@ config BR2_PACKAGE_QT6BASE_GUI
> # At least one graphic backend must be enabled, so enable
> # linuxfb if nothing is enabled.
> select BR2_PACKAGE_QT6BASE_LINUXFB if \
> + !BR2_PACKAGE_QT6BASE_DIRECTFB && \
> !BR2_PACKAGE_QT6BASE_XCB && \
> !BR2_PACKAGE_QT6BASE_EGLFS
> help
> @@ -56,6 +57,13 @@ config BR2_PACKAGE_QT6BASE_VULKAN
> config BR2_PACKAGE_QT6BASE_LINUXFB
> bool "linuxfb support"
>
> +config BR2_PACKAGE_QT6BASE_DIRECTFB
> + bool "directfb support"
> + depends on BR2_PACKAGE_DIRECTFB
> +
> +comment "directfb backend available if directfb is enabled"
> + depends on !BR2_PACKAGE_DIRECTFB
> +
> config BR2_PACKAGE_QT6BASE_XCB
> bool "X.org XCB support"
> depends on BR2_PACKAGE_XORG7
> diff --git a/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
> new file mode 100644
> index 0000000000..5a7df51779
> --- /dev/null
> +++ b/package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
> @@ -0,0 +1,288 @@
> +From d86ab16a86ec4d6fb92855a3c9913b6b74b6bb0f Mon Sep 17 00:00:00 2001
> +From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
> +Date: Tue, 30 Aug 2022 14:54:01 +0200
> +Subject: [PATCH] directfb: Fix compilation
> +
> +The DirectFB QPA plugin has not built since Qt 6, because it used
> +deprecated API which has been removed and private API which has
> +changed.
> +
> +This change updates the handleMouseEvent() and
> +handleWheelEvent() calls with the contents of the deprecated
> +overloads the way they were in Qt 5.15.
> +
> +In addition, it updates usage of GlyphAndSubPixelPosition to default to
> +vertical subpixel position of 0, and adds override qualifiers where
> +necessary.
> +
> +Fixes: QTBUG-105061
> +Change-Id: Id7516f8e3c0a466d15b754f8e5f6df15a5f9526a
> +Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
> +---
> + src/plugins/platforms/directfb/main.cpp | 2 +-
> + .../directfb/qdirectfbbackingstore.h | 8 ++---
> + .../platforms/directfb/qdirectfbblitter.cpp | 2 +-
> + .../platforms/directfb/qdirectfbblitter.h | 31 ++++++++++++-------
> + .../platforms/directfb/qdirectfbcursor.h | 2 +-
> + .../platforms/directfb/qdirectfbinput.cpp | 11 ++++---
> + .../platforms/directfb/qdirectfbinput.h | 2 +-
> + .../platforms/directfb/qdirectfbintegration.h | 20 ++++++------
> + .../platforms/directfb/qdirectfbscreen.h | 10 +++---
> + .../platforms/directfb/qdirectfbwindow.h | 20 ++++++------
> + 10 files changed, 60 insertions(+), 48 deletions(-)
> +
> +diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp
> +index 02cceeb487..4618696154 100644
> +--- a/src/plugins/platforms/directfb/main.cpp
> ++++ b/src/plugins/platforms/directfb/main.cpp
> +@@ -24,7 +24,7 @@ class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin
> + Q_OBJECT
> + Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "directfb.json")
> + public:
> +- QPlatformIntegration *create(const QString&, const QStringList&);
> ++ QPlatformIntegration *create(const QString&, const QStringList&) override;
> + };
> +
> + QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
> +diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.h b/src/plugins/platforms/directfb/qdirectfbbackingstore.h
> +index c51f29271d..625b672a40 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbbackingstore.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.h
> +@@ -18,10 +18,10 @@ class QDirectFbBackingStore : public QPlatformBackingStore
> + public:
> + QDirectFbBackingStore(QWindow *window);
> +
> +- QPaintDevice *paintDevice();
> +- void flush(QWindow *window, const QRegion ®ion, const QPoint &offset);
> +- void resize (const QSize &size, const QRegion &staticContents);
> +- bool scroll(const QRegion &area, int dx, int dy);
> ++ QPaintDevice *paintDevice() override;
> ++ void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) override;
> ++ void resize (const QSize &size, const QRegion &staticContents) override;
> ++ bool scroll(const QRegion &area, int dx, int dy) override;
> +
> + QImage toImage() const override;
> +
> +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
> +index 0a110da798..aac0e3d800 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp
> ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
> +@@ -216,7 +216,7 @@ bool QDirectFbBlitter::drawCachedGlyphs(const QPaintEngineState *state, QFontEng
> + for (int i=0; i<numGlyphs; ++i) {
> +
> + QFixed subPixelPosition = fontEngine->subPixelPositionForX(positions[i].x);
> +- QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition);
> ++ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], QFixedPoint(subPixelPosition, 0));
> + const QTextureGlyphCache::Coord &c = cache->coords[glyph];
> + if (c.isNull())
> + continue;
> +diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h
> +index 591021061c..6183859613 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbblitter.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbblitter.h
> +@@ -19,11 +19,20 @@ public:
> + QDirectFbBlitter(const QSize &size, bool alpha);
> + virtual ~QDirectFbBlitter();
> +
> +- virtual void fillRect(const QRectF &rect, const QColor &color);
> +- virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect);
> +- void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode);
> +- void drawPixmapOpacity(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect, QPainter::CompositionMode cmode, qreal opacity);
> +- virtual bool drawCachedGlyphs(const QPaintEngineState *state, QFontEngine::GlyphFormat glyphFormat, int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions, QFontEngine *fontEngine);
> ++ void fillRect(const QRectF &rect, const QColor &color) override;
> ++ void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) override;
> ++ void alphaFillRect(const QRectF &rect, const QColor &color, QPainter::CompositionMode cmode) override;
> ++ void drawPixmapOpacity(const QRectF &rect,
> ++ const QPixmap &pixmap,
> ++ const QRectF &subrect,
> ++ QPainter::CompositionMode cmode,
> ++ qreal opacity) override;
> ++ bool drawCachedGlyphs(const QPaintEngineState *state,
> ++ QFontEngine::GlyphFormat glyphFormat,
> ++ int numGlyphs,
> ++ const glyph_t *glyphs,
> ++ const QFixedPoint *positions,
> ++ QFontEngine *fontEngine) override;
> +
> + IDirectFBSurface *dfbSurface() const;
> +
> +@@ -32,8 +41,8 @@ public:
> + static DFBSurfacePixelFormat selectPixmapFormat(bool withAlpha);
> +
> + protected:
> +- virtual QImage *doLock();
> +- virtual void doUnlock();
> ++ QImage *doLock() override;
> ++ void doUnlock() override;
> +
> + QDirectFBPointer<IDirectFBSurface> m_surface;
> + QImage m_image;
> +@@ -50,12 +59,12 @@ private:
> + class QDirectFbBlitterPlatformPixmap : public QBlittablePlatformPixmap
> + {
> + public:
> +- QBlittable *createBlittable(const QSize &size, bool alpha) const;
> ++ QBlittable *createBlittable(const QSize &size, bool alpha) const override;
> +
> + QDirectFbBlitter *dfbBlitter() const;
> +
> +- virtual bool fromFile(const QString &filename, const char *format,
> +- Qt::ImageConversionFlags flags);
> ++ bool fromFile(const QString &filename, const char *format,
> ++ Qt::ImageConversionFlags flags) override;
> +
> + private:
> + bool fromDataBufferDescription(const DFBDataBufferDescription &);
> +@@ -83,7 +92,7 @@ public:
> + : QImageTextureGlyphCache(format, matrix)
> + {}
> +
> +- virtual void resizeTextureData(int width, int height);
> ++ void resizeTextureData(int width, int height) override;
> +
> + IDirectFBSurface *sourceSurface();
> +
> +diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h
> +index 9a480fc8f8..21a8f4353d 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbcursor.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbcursor.h
> +@@ -19,7 +19,7 @@ class QDirectFBCursor : public QPlatformCursor
> + public:
> + QDirectFBCursor(QPlatformScreen *screen);
> + #ifndef QT_NO_CURSOR
> +- void changeCursor(QCursor *cursor, QWindow *window);
> ++ void changeCursor(QCursor *cursor, QWindow *window) override;
> + #endif
> +
> + private:
> +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp
> +index a62ff9882c..516dc1e9d8 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbinput.cpp
> ++++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp
> +@@ -126,7 +126,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
> + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
> +
> + QWindow *tlw = m_tlwMap.value(event.window.window_id);
> +- QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons);
> ++ QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons, Qt::NoButton, QEvent::None);
> + }
> +
> + void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
> +@@ -135,9 +135,12 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
> + QPoint globalPos(event.window.cx, event.window.cy);
> + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
> + QWindow *tlw = m_tlwMap.value(event.window.window_id);
> +- QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos,
> +- event.window.step*120,
> +- Qt::Vertical);
> ++ QWindowSystemInterface::handleWheelEvent(tlw,
> ++ timestamp,
> ++ p,
> ++ globalPos,
> ++ QPoint(),
> ++ QPoint(0, event.window.step*120));
> + }
> +
> + void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
> +diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h
> +index 5496f537a2..02175abc7b 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbinput.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbinput.h
> +@@ -26,7 +26,7 @@ public:
> + void stopInputEventLoop();
> +
> + protected:
> +- void run();
> ++ void run() override;
> +
> + private:
> + void handleEvents();
> +diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h
> +index aa369d7c05..8dd2a4516a 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbintegration.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbintegration.h
> +@@ -25,16 +25,16 @@ public:
> +
> + void connectToDirectFb();
> +
> +- bool hasCapability(Capability cap) const;
> +- QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
> +- QPlatformWindow *createPlatformWindow(QWindow *window) const;
> +- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
> +- QAbstractEventDispatcher *createEventDispatcher() const;
> +-
> +- QPlatformFontDatabase *fontDatabase() const;
> +- QPlatformServices *services() const;
> +- QPlatformInputContext *inputContext() const { return m_inputContext; }
> +- QPlatformNativeInterface *nativeInterface() const;
> ++ bool hasCapability(Capability cap) const override;
> ++ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override;
> ++ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
> ++ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
> ++ QAbstractEventDispatcher *createEventDispatcher() const override;
> ++
> ++ QPlatformFontDatabase *fontDatabase() const override;
> ++ QPlatformServices *services() const override;
> ++ QPlatformInputContext *inputContext() const override { return m_inputContext; }
> ++ QPlatformNativeInterface *nativeInterface() const override;
> +
> + protected:
> + virtual void initializeDirectFB();
> +diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.h b/src/plugins/platforms/directfb/qdirectfbscreen.h
> +index a4f2e9adb1..cbcb6a55da 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbscreen.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbscreen.h
> +@@ -19,11 +19,11 @@ class QDirectFbScreen : public QPlatformScreen
> + public:
> + QDirectFbScreen(int display);
> +
> +- QRect geometry() const { return m_geometry; }
> +- int depth() const { return m_depth; }
> +- QImage::Format format() const { return m_format; }
> +- QSizeF physicalSize() const { return m_physicalSize; }
> +- QPlatformCursor *cursor() const { return m_cursor.data(); }
> ++ QRect geometry() const override { return m_geometry; }
> ++ int depth() const override { return m_depth; }
> ++ QImage::Format format() const override { return m_format; }
> ++ QSizeF physicalSize() const override { return m_physicalSize; }
> ++ QPlatformCursor *cursor() const override { return m_cursor.data(); }
> +
> + // DirectFb helpers
> + IDirectFBDisplayLayer *dfbLayer() const;
> +diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h
> +index 6413d91860..f05038d8ca 100644
> +--- a/src/plugins/platforms/directfb/qdirectfbwindow.h
> ++++ b/src/plugins/platforms/directfb/qdirectfbwindow.h
> +@@ -15,19 +15,19 @@ class QDirectFbWindow : public QPlatformWindow
> + {
> + public:
> + QDirectFbWindow(QWindow *tlw, QDirectFbInput *inputhandler);
> +- ~QDirectFbWindow();
> ++ ~QDirectFbWindow() override;
> +
> +- void setGeometry(const QRect &rect);
> +- void setOpacity(qreal level);
> ++ void setGeometry(const QRect &rect) override;
> ++ void setOpacity(qreal level) override;
> +
> +- void setVisible(bool visible);
> ++ void setVisible(bool visible) override;
> +
> +- void setWindowFlags(Qt::WindowFlags flags);
> +- bool setKeyboardGrabEnabled(bool grab);
> +- bool setMouseGrabEnabled(bool grab);
> +- void raise();
> +- void lower();
> +- WId winId() const;
> ++ void setWindowFlags(Qt::WindowFlags flags) override;
> ++ bool setKeyboardGrabEnabled(bool grab) override;
> ++ bool setMouseGrabEnabled(bool grab) override;
> ++ void raise() override;
> ++ void lower() override;
> ++ WId winId() const override;
> +
> + virtual void createDirectFBWindow();
> + IDirectFBWindow *dfbWindow() const;
> +--
> +2.39.2
> +
> diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk
> index 049d73a84f..a904d6edc8 100644
> --- a/package/qt6/qt6base/qt6base.mk
> +++ b/package/qt6/qt6base/qt6base.mk
> @@ -181,6 +181,13 @@ else
> QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=OFF
> endif
>
> +ifeq ($(BR2_PACKAGE_QT6BASE_DIRECTFB),y)
> +QT6BASE_CONF_OPTS += -DFEATURE_directfb=ON
> +QT6BASE_DEPENDENCIES += directfb
> +else
> +QT6BASE_CONF_OPTS += -DFEATURE_directfb=OFF
> +endif
> +
> ifeq ($(BR2_PACKAGE_QT6BASE_XCB),y)
> QT6BASE_CONF_OPTS += \
> -DFEATURE_xcb=ON \
> --
> 2.39.2
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support
2024-04-11 18:48 ` Yann E. MORIN
@ 2024-04-12 21:18 ` Ben Hutchings via buildroot
0 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings via buildroot @ 2024-04-12 21:18 UTC (permalink / raw)
To: Yann E. MORIN; +Cc: buildroot
On Thu, Apr 11, 2024 at 08:48:19PM +0200, Yann E. MORIN wrote:
> Ben, All,
>
> On 2024-04-11 16:55 +0200, Ben Hutchings via buildroot spake thusly:
> > Apply a patch from upstream to make Qt 6 support DirectFB again.
> >
> > Implement a config option for this, similar to what we do for Qt 5.
> >
> > Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
> > ---
> > package/qt6/qt6base/Config.in | 8 +
> > .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++
> > package/qt6/qt6base/qt6base.mk | 7 +
>
> $ ./utils/docker-run make check-package
> package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: use name <number>-<description>.patch (https://nightly.buildroot.org/#_providing_patches)
> package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Signed-off-by in the header (https://nightly.buildroot.org/#_format_and_licensing_of_the_package_patches)
> package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch:0: missing Upstream in the header (https://nightly.buildroot.org/#_additional_patch_documentation)
Sorry, I should have known about those.
> Also, we currently only have qt6.4, while qt-6.7 is already released
> now, and the patch you add was already present in qt-6.5.
>
> So, maybe it would be better to actually bump qt6 rather than backport
> patches?
[...]
That should also work! But I don't know what else might break when
updating Qt.
Ben.
--
Ben Hutchings · Senior Embedded Software Engineer, Essensium-Mind · mind.be
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work
2024-04-11 14:55 [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Ben Hutchings via buildroot
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
@ 2024-09-14 16:16 ` Thomas Petazzoni via buildroot
1 sibling, 0 replies; 6+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-09-14 16:16 UTC (permalink / raw)
To: Ben Hutchings via buildroot
Cc: Jesse Van Gavere, Ben Hutchings, Roy Kollen Svendsen,
Angelo Compagnucci
Hello Ben,
Adding in Cc: Angelo and Jesse who already tried to fix this in the
past, and also adding Roy who is looking after Qt6 packaging.
Some comments/questions below.
On Thu, 11 Apr 2024 16:55:58 +0200
Ben Hutchings via buildroot <buildroot@buildroot.org> wrote:
> Currently the qt6base package does not install a working qmake
> program, so applications can only be built with CMake.
>
> To ease upgrades from Qt 5, make qmake work as well:
>
> - Create a linux-buildroot-g++ device spec, like we do for Qt 5.
>
> - Fix the generated target_qt.conf file. The Qt build system
> currently generates this with the sysroot directory wrongly added in
> various places.
>
> - Fix the qmake wrapper script in the sysroot to set the QMAKEPATH
> environment variable.
>
> Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
This generally looks good, but I have two concerns.
The first one: there is nothing in Buildroot that exercises this. I
would like to have either a real package that uses this qmake support,
or a dummy package as a test case in support/testing/.
> +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
> +define QT6BASE_MKSPEC_ARCH_CONFIG
> +# Qt 6 needs atomics, which on various architectures are in -latomic
> + printf '!host_build { \n LIBS += -latomic\n }' > \
> + $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/arch.conf
> +endef
> +endif
> +
> +define QT6BASE_INSTALL_MKSPEC
> + mkdir -p $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++
> + $(INSTALL) -m 0644 $(QT6BASE_PKGDIR)/qplatformdefs.h \
> + $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/
> + sed 's%@CROSS_COMPILE@%$(TARGET_CROSS)%' \
> + < $(QT6BASE_PKGDIR)/qmake.conf.in \
> + > $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/qmake.conf
> + touch $(STAGING_DIR)/usr/mkspecs/devices/linux-buildroot-g++/arch.conf
> + $(QT6BASE_MKSPEC_ARCH_CONFIG)
> +endef
> +
> +# The generated broken target_qt.conf is broken, so replace it
> +define QT6BASE_INSTALL_TARGET_QT_CONF
> + sed 's%@HOST_DIR@%$(HOST_DIR)%; s%@SYSROOT@%$(STAGING_DIR)%' \
> + < $(QT6BASE_PKGDIR)/target_qt.conf.in \
> + > $(STAGING_DIR)/usr/bin/target_qt.conf
> +endef
All these I'm reasonably happy with, it's very similar to what we have
for qt5. Quite puzzling that the config file is in
$(STAGING_DIR)/usr/bin/, but oh well.
> +# The qmake wrapper script doesn't set QMAKEPATH, so qmake doesn't
> +# find specs and modules installed for the target
> +define QT6BASE_FIX_QMAKE_SCRIPT
> + sed -i '1a\
> +export QMAKEPATH=$(STAGING_DIR)/usr' \
> + $(STAGING_DIR)/usr/bin/qmake
> +endef
This is what bothers me. Why do you fix $(STAGING_DIR)/usr/bin/qmake?
The one we care about and that will be used to build packages is
$(HOST_DIR)/usr/bin/qmake. And this one is not a script that can be
patched, but directly an ELF binary. So here we have something that
isn't good.
Do you think you could have a look into this, perhaps looping back with
Angelo, Jesse and Roy?
Thanks a lot!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
2024-04-11 18:48 ` Yann E. MORIN
@ 2024-09-14 16:44 ` Thomas Petazzoni via buildroot
1 sibling, 0 replies; 6+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-09-14 16:44 UTC (permalink / raw)
To: Ben Hutchings via buildroot; +Cc: Ben Hutchings
Hello Ben,
On Thu, 11 Apr 2024 16:55:59 +0200
Ben Hutchings via buildroot <buildroot@buildroot.org> wrote:
> Apply a patch from upstream to make Qt 6 support DirectFB again.
>
> Implement a config option for this, similar to what we do for Qt 5.
>
> Signed-off-by: Ben Hutchings <ben.hutchings@mind.be>
> ---
> package/qt6/qt6base/Config.in | 8 +
> .../qt6base-directfb-Fix-compilation.patch | 288 ++++++++++++++++++
> package/qt6/qt6base/qt6base.mk | 7 +
> 3 files changed, 303 insertions(+)
> create mode 100644 package/qt6/qt6base/qt6base-directfb-Fix-compilation.patch
I applied this, dropped the qt6base-directfb-Fix-compilation.patch
patch as we have a newer version of Qt6 that includes this fix, and
tried a build, but it fails with:
CMake Error at cmake/QtTargetHelpers.cmake:171 (target_link_libraries):
Target "QDirectFbIntegrationPlugin" links to:
EGL::EGL
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
Call Stack (most recent call first):
cmake/QtPluginHelpers.cmake:348 (qt_internal_extend_target)
src/plugins/platforms/directfb/CMakeLists.txt:11 (qt_internal_add_plugin)
so it looks like Qt6 expects EGL when the DirectFB backend is enabled?
Not sure it makes sense.
This defconfig fails to build:
BR2_arm=y
BR2_cortex_a9=y
BR2_ARM_ENABLE_VFP=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_DIRECTFB=y
BR2_PACKAGE_QT6=y
BR2_PACKAGE_QT6BASE_GUI=y
BR2_PACKAGE_QT6BASE_DIRECTFB=y
BR2_PACKAGE_QT6BASE_WIDGETS=y
# BR2_TARGET_ROOTFS_TAR is not set
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-09-14 16:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-11 14:55 [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Ben Hutchings via buildroot
2024-04-11 14:55 ` [Buildroot] [PATCH] package/qt6/qt6base: Restore DirectFB support Ben Hutchings via buildroot
2024-04-11 18:48 ` Yann E. MORIN
2024-04-12 21:18 ` Ben Hutchings via buildroot
2024-09-14 16:44 ` Thomas Petazzoni via buildroot
2024-09-14 16:16 ` [Buildroot] [PATCH] package/qt6/qt6base: Make qmake work Thomas Petazzoni via buildroot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.