All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Eric Bénard" <eric@eukrea.com>
To: meta-freescale@yoctoproject.org
Subject: [meta-fsl-arm][PATCH v7] qt5: add mx5 and mx6 support
Date: Mon, 10 Jun 2013 15:35:07 +0200	[thread overview]
Message-ID: <1370871307-27783-1-git-send-email-eric@eukrea.com> (raw)
In-Reply-To: <20130610151853.7c658ffc@e6520eb>

- 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

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
+}
-- 
1.7.11.2.249.g31c7954



  parent reply	other threads:[~2013-06-10 13:35 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-07 15:27 [meta-fsl-arm PATCH v2 0/15] master-next pending updates Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 01/15] firmware-imx: Remove Atheros firmware Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 02/15] linux-fslc: Update to 2013-06-05 patches-3.9's snapshot Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 03/15] u-boot-imx: Update i.MX6 variants to 3.0.35-4.0.0 Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 04/15] linux-imx (3.0.35) Update to 3.0.35-4.0.0 BSP version Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 05/15] xf86-dri-vivante: Update to 3.0.35-4.0.0 Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 06/15] xf86-video-imxfb-vivante: " Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 07/15] mesa: Drop libGL when building for i.MX6 Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 08/15] mesa-demos: Fix building using Vivante libGL Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 09/15] gpu-viv-bin-mx6q: Update to 3.0.35-4.0.0 BSP release Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 10/15] gpu-viv-bin-mx6q: Add pkg-config files Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 11/15] amd-gpu-x11-bin-mx51: only enable when x11 is in DISTRO_FEATURES Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 12/15] amd-gpu-x11-bin-mx51: factorize the recipes Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 13/15] amd-gpu-bin-mx51: new recipe Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 14/15] layer.conf: handle dynamic layer configuration Otavio Salvador
2013-06-07 15:27 ` [meta-fsl-arm PATCH v2 15/15] qt5: add mx5 and mx6 support Otavio Salvador
2013-06-10 12:14 ` [meta-fsl-arm PATCH v2 0/15] master-next pending updates Otavio Salvador
2013-06-10 12:48   ` Eric Bénard
2013-06-10 12:56     ` Otavio Salvador
2013-06-10 13:06       ` Eric Bénard
2013-06-10 13:09         ` Otavio Salvador
2013-06-10 13:18           ` Eric Bénard
2013-06-10 13:22             ` Otavio Salvador
2013-06-10 13:35             ` Eric Bénard [this message]
2013-07-29 12:25               ` [meta-fsl-arm][PATCH v7] qt5: add mx5 and mx6 support Eric Bénard
2013-07-29 12:45                 ` Otavio Salvador
2013-07-29 12:48                   ` Eric Bénard
2013-07-29 12:51                     ` Otavio Salvador

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1370871307-27783-1-git-send-email-eric@eukrea.com \
    --to=eric@eukrea.com \
    --cc=meta-freescale@yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.