From: "Eric Bénard" <eric@eukrea.com>
To: meta-freescale@yoctoproject.org
Subject: [meta-fsl-arm][PATCH RFC 1/4] qt5: add mx5 and mx6 support
Date: Tue, 28 May 2013 02:02:49 +0200 [thread overview]
Message-ID: <1369699372-1398-1-git-send-email-eric@eukrea.com> (raw)
- this allow to build qt5 with OpenGL ES support for i.MX5 and i.MX6
- tested on i.MX51, i.MX53 and i.MX6Q
Signed-off-by: Eric Bénard <eric@eukrea.com>
---
conf/layer.conf | 2 +
recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp | 105 ++++++++++++++++++++++++
recipes-qt/qt5/qtbase_5.0.2.bbappend | 68 +++++++++++++++
3 files changed, 175 insertions(+)
create mode 100644 recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp
create mode 100644 recipes-qt/qt5/qtbase_5.0.2.bbappend
diff --git a/conf/layer.conf b/conf/layer.conf
index c4b9cd1..2bdff7c 100644
--- a/conf/layer.conf
+++ b/conf/layer.conf
@@ -4,6 +4,8 @@ BBPATH .= ":${LAYERDIR}"
# We have a packages directory, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
+BBMASK_append = "${@base_contains('BBFILE_COLLECTIONS', 'qt5-layer', '' ,\
+ ' meta-fsl-arm/recipes-qt/qt5/*.bb meta-fsl-arm/recipes-qt/qt5/*.bbappend', d)}"
BBFILE_COLLECTIONS += "fsl-arm"
BBFILE_PATTERN_fsl-arm := "^${LAYERDIR}/"
diff --git a/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp b/recipes-qt/qt5/qtbase/mx5/qeglfshooks_imx5.cpp
new file mode 100644
index 0000000..43e6d8d
--- /dev/null
+++ b/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/recipes-qt/qt5/qtbase_5.0.2.bbappend b/recipes-qt/qt5/qtbase_5.0.2.bbappend
new file mode 100644
index 0000000..00a8819
--- /dev/null
+++ b/recipes-qt/qt5/qtbase_5.0.2.bbappend
@@ -0,0 +1,68 @@
+# Copyright (C) 2013 Eric Bénard - Eukréa Electromatique
+
+GL_DEPENDS_mx6 = "virtual/libgles2 virtual/egl"
+QT_GLFLAGS_mx6 = "-opengl es2 -eglfs"
+QT_EXAMPLES_mx6 = "-make examples"
+QT_DEMOS_mx6 = "-make demos"
+
+GL_DEPENDS_mx5 = "virtual/libgles2 virtual/egl"
+QT_GLFLAGS_mx5 = "-opengl es2 -eglfs"
+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() {
+# 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++/
+}
+
+do_configure_prepend_mx5() {
+# 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++/
+}
--
1.7.10.4
next reply other threads:[~2013-05-28 0:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-28 0:02 Eric Bénard [this message]
2013-05-28 0:02 ` [meta-fsl-arm][PATCH RFC 2/4] amd-gpu-bin-mx51: new recipe Eric Bénard
2013-05-28 13:11 ` Otavio Salvador
2013-05-28 0:02 ` [meta-fsl-arm][PATCH RFC 3/4] amd-gpu-x11-bin-mx51: only enable when x11 is in DISTRO_FEATURES Eric Bénard
2013-05-28 14:30 ` Otavio Salvador
2013-05-28 14:34 ` Eric Bénard
2013-05-28 0:02 ` [meta-fsl-arm][PATCH RFC 4/4] amd-gpu*: factorize the recipes Eric Bénard
2013-05-28 13:16 ` Otavio Salvador
2013-05-28 0:08 ` [meta-fsl-arm][PATCH RFC 1/4] qt5: add mx5 and mx6 support Eric Bénard
2013-05-28 13:29 ` Otavio Salvador
2013-05-28 13:38 ` Eric Bénard
2013-05-30 15:26 ` Chris Larson
2013-05-31 6:53 ` Erik Botö
2013-05-31 12:37 ` Otavio Salvador
2013-05-31 13:27 ` Chris Larson
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=1369699372-1398-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.