Patchwork [meta-fsl-arm,v7] qt5: add mx5 and mx6 support

login
register
mail settings
Submitter Eric BENARD
Date June 10, 2013, 1:35 p.m.
Message ID <1370871307-27783-1-git-send-email-eric@eukrea.com>
Download mbox | patch
Permalink /patch/51415/
State Changes Requested
Delegated to: Otavio Salvador
Headers show

Comments

Eric BENARD - June 10, 2013, 1:35 p.m.
- this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
- tested on i.MX51, i.MX53 and i.MX6Q
- X11 support is not yet tested so we don't change the core settings
when x11 is in DISTRO_FEATURES

Signed-off-by: Eric Bénard <eric@eukrea.com>
---
v7: don't change the core configuration when x11 is in DISTRO_FEATURES

 .../recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp | 105 +++++++++++++++++++++
 qt5-layer/recipes-qt/qt5/qtbase_5.0.2.bbappend     |  74 +++++++++++++++
 2 files changed, 179 insertions(+)
 create mode 100644 qt5-layer/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp
 create mode 100644 qt5-layer/recipes-qt/qt5/qtbase_5.0.2.bbappend
Eric BENARD - July 29, 2013, 12:25 p.m.
Hi Otavio,

Le Mon, 10 Jun 2013 15:35:07 +0200,
Eric Bénard <eric@eukrea.com> a écrit :

> - this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
> - tested on i.MX51, i.MX53 and i.MX6Q
> - X11 support is not yet tested so we don't change the core settings
> when x11 is in DISTRO_FEATURES
> 
> Signed-off-by: Eric Bénard <eric@eukrea.com>
> ---
> v7: don't change the core configuration when x11 is in DISTRO_FEATURES
> 
May you please give me more details on what prevent this patch from
being applied to master ?
I have some work on QT5/X11 (now compiles fine and needs some testing)
so if some rework is still needed I can do it at the same time.

Thanks,
Eric
Otavio Salvador - July 29, 2013, 12:45 p.m.
On Mon, Jul 29, 2013 at 9:25 AM, Eric Bénard <eric@eukrea.com> wrote:
> Hi Otavio,
>
> Le Mon, 10 Jun 2013 15:35:07 +0200,
> Eric Bénard <eric@eukrea.com> a écrit :
>
>> - this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
>> - tested on i.MX51, i.MX53 and i.MX6Q
>> - X11 support is not yet tested so we don't change the core settings
>> when x11 is in DISTRO_FEATURES
>>
>> Signed-off-by: Eric Bénard <eric@eukrea.com>
>> ---
>> v7: don't change the core configuration when x11 is in DISTRO_FEATURES
>>
> May you please give me more details on what prevent this patch from
> being applied to master ?
> I have some work on QT5/X11 (now compiles fine and needs some testing)
> so if some rework is still needed I can do it at the same time.

It is the missing part. I'd like to have X11 working to not break it.

If you can update it and test, I can merge it.

I am still working on 3.5.7 integration and the other issues so I
won't be able to test.

--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
Eric BENARD - July 29, 2013, 12:48 p.m.
Le Mon, 29 Jul 2013 09:45:54 -0300,
Otavio Salvador <otavio@ossystems.com.br> a écrit :

> On Mon, Jul 29, 2013 at 9:25 AM, Eric Bénard <eric@eukrea.com> wrote:
> > Hi Otavio,
> >
> > Le Mon, 10 Jun 2013 15:35:07 +0200,
> > Eric Bénard <eric@eukrea.com> a écrit :
> >
> >> - this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
> >> - tested on i.MX51, i.MX53 and i.MX6Q
> >> - X11 support is not yet tested so we don't change the core settings
> >> when x11 is in DISTRO_FEATURES
> >>
> >> Signed-off-by: Eric Bénard <eric@eukrea.com>
> >> ---
> >> v7: don't change the core configuration when x11 is in DISTRO_FEATURES
> >>
> > May you please give me more details on what prevent this patch from
> > being applied to master ?
> > I have some work on QT5/X11 (now compiles fine and needs some testing)
> > so if some rework is still needed I can do it at the same time.
> 
> It is the missing part. I'd like to have X11 working to not break it.
> 
actually it's not breaking X11 : the current patch is irgnoring the X11
case and doesn't touch anything when building for X.
So may you please merge it as X11 tests will take some time.

Eric
Otavio Salvador - July 29, 2013, 12:51 p.m.
On Mon, Jul 29, 2013 at 9:48 AM, Eric Bénard <eric@eukrea.com> wrote:
> Le Mon, 29 Jul 2013 09:45:54 -0300,
> Otavio Salvador <otavio@ossystems.com.br> a écrit :
>
>> On Mon, Jul 29, 2013 at 9:25 AM, Eric Bénard <eric@eukrea.com> wrote:
>> > Hi Otavio,
>> >
>> > Le Mon, 10 Jun 2013 15:35:07 +0200,
>> > Eric Bénard <eric@eukrea.com> a écrit :
>> >
>> >> - this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
>> >> - tested on i.MX51, i.MX53 and i.MX6Q
>> >> - X11 support is not yet tested so we don't change the core settings
>> >> when x11 is in DISTRO_FEATURES
>> >>
>> >> Signed-off-by: Eric Bénard <eric@eukrea.com>
>> >> ---
>> >> v7: don't change the core configuration when x11 is in DISTRO_FEATURES
>> >>
>> > May you please give me more details on what prevent this patch from
>> > being applied to master ?
>> > I have some work on QT5/X11 (now compiles fine and needs some testing)
>> > so if some rework is still needed I can do it at the same time.
>>
>> It is the missing part. I'd like to have X11 working to not break it.
>>
> actually it's not breaking X11 : the current patch is irgnoring the X11
> case and doesn't touch anything when building for X.
> So may you please merge it as X11 tests will take some time.

Ok; I merge it this afternoon together with other ready changes.

--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

Patch

diff --git a/qt5-layer/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp b/qt5-layer/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp
new file mode 100644
index 0000000..43e6d8d
--- /dev/null
+++ b/qt5-layer/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp
@@ -0,0 +1,105 @@ 
+/****************************************************************************
+**
+** hacked by Eric Bénard - Eukréa Electromatique
+** inspired from https://community.freescale.com/docs/DOC-94123
+** and from fbset.c http://users.telenet.be/geertu/Linux/fbdev/
+**
+** based on qeglfshooks_imx6.cpp which is :
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <fcntl.h>    /* For O_RDWR */
+#include <unistd.h>   /* For open(), creat() */
+#include "qeglfshooks.h"
+#include <EGL/egl.h>
+#include <linux/fb.h>
+#include <sys/ioctl.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSImx5Hooks : public QEglFSHooks
+{
+public:
+    QEglFSImx5Hooks();
+    virtual QSize screenSize() const;
+    virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
+    virtual void destroyNativeWindow(EGLNativeWindowType window);
+
+private:
+    QSize mScreenSize;
+    EGLNativeDisplayType mNativeDisplay;
+};
+
+
+QEglFSImx5Hooks::QEglFSImx5Hooks()
+{
+    int width, height;
+    /* code taken from fbset.c */
+    int fh;
+    struct fb_var_screeninfo var;
+    fh = open("/dev/fb0", O_RDONLY);
+    ioctl(fh, FBIOGET_VSCREENINFO, &var);
+    mScreenSize.setHeight(var.yres);
+    mScreenSize.setWidth(var.xres);
+    close(fh);
+    mNativeDisplay = EGL_DEFAULT_DISPLAY;
+}
+
+QSize QEglFSImx5Hooks::screenSize() const
+{
+    return mScreenSize;
+}
+
+EGLNativeWindowType QEglFSImx5Hooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
+{
+    Q_UNUSED(format);
+
+    EGLNativeWindowType eglWindow =  open("/dev/fb0", O_RDWR);
+    return eglWindow;
+}
+
+
+void QEglFSImx5Hooks::destroyNativeWindow(EGLNativeWindowType window)
+{
+    close(window);
+}
+
+QEglFSImx5Hooks eglFSImx5Hooks;
+QEglFSHooks *platformHooks = &eglFSImx5Hooks;
+
+QT_END_NAMESPACE
diff --git a/qt5-layer/recipes-qt/qt5/qtbase_5.0.2.bbappend b/qt5-layer/recipes-qt/qt5/qtbase_5.0.2.bbappend
new file mode 100644
index 0000000..33f0e8b
--- /dev/null
+++ b/qt5-layer/recipes-qt/qt5/qtbase_5.0.2.bbappend
@@ -0,0 +1,74 @@ 
+# Copyright (C) 2013 Eric Bénard - Eukréa Electromatique
+
+HAS_X11 = "${@base_contains('DISTRO_FEATURES', 'x11', 1, 0, d)}"
+
+GL_DEPENDS_mx6 = "${@base_contains('DISTRO_FEATURES', 'x11', '', 'virtual/libgles2 virtual/egl', d)}"
+QT_GLFLAGS_mx6 = "${@base_contains('DISTRO_FEATURES', 'x11', '', '-opengl es2 -eglfs', d)}"
+QT_EXAMPLES_mx6 = "-make examples"
+QT_DEMOS_mx6 = "-make demos"
+
+GL_DEPENDS_mx5 = "${@base_contains('DISTRO_FEATURES', 'x11', '', 'virtual/libgles2 virtual/egl', d)}"
+QT_GLFLAGS_mx5 = "${@base_contains('DISTRO_FEATURES', 'x11', '', '-opengl es2 -eglfs', d)}"
+QT_EXAMPLES_mx5 = "-make examples"
+QT_DEMOS_mx5 = "-make demos"
+
+TSLIB_DEPENDS_mx6 = "tslib"
+QT_TSLIB_mx6 = "-tslib"
+
+TSLIB_DEPENDS_mx5 = "tslib"
+QT_TSLIB_mx5 = "-tslib"
+
+PACKAGE_ARCH_mx6 = "${MACHINE_ARCH}"
+PACKAGE_ARCH_mx5 = "${MACHINE_ARCH}"
+
+FILESEXTRAPATHS_prepend_mx5 := "${THISDIR}/${PN}:"
+SRC_URI_append_mx5 += " \
+    file://qeglfshooks_imx5.cpp \
+    "
+
+do_configure_prepend_mx6() {
+    if test ${HAS_X11} -eq 0; then
+# adapt qmake.conf to our needs
+sed -i 's!load(qt_config)!!' ${S}/mkspecs/linux-oe-g++/qmake.conf
+cat >> ${S}/mkspecs/linux-oe-g++/qmake.conf <<EOF
+EGLFS_PLATFORM_HOOKS_SOURCES = \$\$PWD/qeglfshooks_imx6.cpp
+IMX6_CFLAGS             = -DLINUX=1 -DEGL_API_FB=1
+QMAKE_LIBS_EGL         += -lEGL
+QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lGAL
+QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL -lGAL
+QMAKE_CFLAGS_RELEASE   += \$\$IMX6_CFLAGS
+QMAKE_CXXFLAGS_RELEASE += \$\$IMX6_CFLAGS
+QMAKE_CFLAGS_DEBUG   += \$\$IMX6_CFLAGS
+QMAKE_CXXFLAGS_DEBUG += \$\$IMX6_CFLAGS
+QMAKE_CFLAGS_EGL += \$\$IMX6_CFLAGS
+load(qt_config)
+
+EOF
+
+# copy the hook in the mkspecs directory OE is using
+cp ${S}/mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp ${S}/mkspecs/linux-oe-g++/
+    fi
+}
+
+do_configure_prepend_mx5() {
+    if test ${HAS_X11} -eq 0; then
+# adapt qmake.conf to our needs
+sed -i 's!load(qt_config)!!' ${S}/mkspecs/linux-oe-g++/qmake.conf
+cat >> ${S}/mkspecs/linux-oe-g++/qmake.conf <<EOF
+EGLFS_PLATFORM_HOOKS_SOURCES = \$\$PWD/qeglfshooks_imx5.cpp
+IMX5_CFLAGS             = -D_LINUX
+QMAKE_LIBS_EGL         += -lEGL
+QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL
+QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL
+QMAKE_CFLAGS_RELEASE   += \$\$IMX5_CFLAGS
+QMAKE_CXXFLAGS_RELEASE += \$\$IMX5_CFLAGS
+QMAKE_CFLAGS_DEBUG   += \$\$IMX5_CFLAGS
+QMAKE_CXXFLAGS_DEBUG += \$\$IMX5_CFLAGS
+QMAKE_CFLAGS_EGL += \$\$IMX5_CFLAGS
+load(qt_config)
+
+EOF
+
+cp ${WORKDIR}/qeglfshooks_imx5.cpp ${S}/mkspecs/linux-oe-g++/
+    fi
+}