* [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: 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
* 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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox