Hi,

you will find here two patches to get EGL enabled on RaspberryPi without any hack in meta-*bsp layers. Please note that it is just a proposition of correction as I'm not aware of the best correction you would like to implement.

The result of those two patches on top of master for meta-raspberry and krogoth for meta-qt5 (jethro would have been the same correction) gives:
  QPA backends:
    DirectFB ............. no
    EGLFS ................ yes
      EGLFS i.MX6 ........ no
      EGLFS i.MX6 Wayland. no
      EGLFS EGLDevice .... no
      EGLFS GBM .......... no
      EGLFS Mali ......... no
      EGLFS Raspberry Pi . yes
      EGLFS X11 .......... no

As long as I understand there use to be a lot of hacks in either BSP layers or mkspecs files for Qt. With proper pkg_config files we might have a simpler solution. Right now I'm quite sure that the master branch from Qt has some troubles to handle pkg-config stuff AND mkspecs at the same time. There is a bug report opened on that subject.

The patch on meta-qt5 is to "force" layers to implement pkg-config files. (I just did it for EGL...) As I said it's not a full rewrite of the configure file at all. The patch on the Raspberry is just to add one library missing to get the EGLFS Raspberry Pi test passing (the EGL test one was already working with this meta-qt5 patch)

Best Regards,


Le 21/04/2016 19:10, Andrei Gherzan a écrit :
Hi Julien,

On Thu, Apr 21, 2016 at 10:15:23AM +0200, Julien Gueytat wrote:
Just to keep you informed that a bug report has been opened to Qt:
https://bugreports.qt.io/browse/QTBUG-52739

We might save some patches in layers by solving this,
Thanks for helping,

Great Julien. Here is a hint - would this help your problem?
https://lists.yoctoproject.org/pipermail/yocto/2016-February/028277.html

Le 20/04/2016 01:46, Julien Gueytat a écrit :
Hi again guys,

after more investigations:

I found out that the default value -lEGL comes from
./mkspecs/common/linux.conf which is included in
./mkspecs/linux-oe-g++/qmake.conf

linux-oe-g++ being the only generic mkspecs that should be used in Yocto

So! At the time the configuration enters egl.pro the content of the
variables LIBS and QMAKE_EGL_LIBS are still a bit weird for me :

1- LIBS already has the content of the QMAKE_EGL_LIBS content from the
result of the pkg-config command.
2- QMAKE_EGL_LIBS has the content of the default value found in
./mkspecs/common/linux.conf

There are two options to have it properly working:
- First and easy option : remove the QMAKE_EGL_LIBS default variable in
./mkspecs/linux-oe-g++/qmake.conf since the good libs seems to already
been present in the LIBS variable.
- Second option : understand why the LIBS variable is already properly
set and why the QMAKE_EGL_LIBS properly computed in the configure and
present .qmake.vars is not used. (I would say that the device spec
overrides the one from qmake spec... I did not dig further yet.)

Anyway I'm pretty sure the trouble comes from meta-qt5 side now. I'm
pretty sure meta-raspberrypi maintainers can confirm that their master
branch handles pkg-config stuff now.

Thanks advance for having a look on this guys,
Best Regards


Le 19/04/2016 10:46, Julien Gueytat a écrit :
Hi,

I still can't figure out the patch to apply in meta-qt5 to get EGL
support with the Raspberry.

The test to check EGL does not pass and fails with the following command:

arm-poky-linux-gnueabi-g++  -march=armv7-a -marm -mthumb-interwork
-mfloat-abi=hard -mfpu=neon-vfpv4 -mtune=cortex-a7 
--sysroot=/home/jgueytat/projects/LightPixels/poky/build/tmp/sysroots/lightpixels
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-O1 -o egl egl.o
-lGLESv2 -lbcm_host -lvchostif -lvcos -lvchiq_arm -pthread -lEGL


Here is the content of the file egl.pro:

$ cat egl.pro
SOURCES = egl.cpp

for(p, QMAKE_LIBDIR_EGL) {
     exists($$p):LIBS += -L$$p
}

message("In egl.pro - 1: QMAKE_LIBS_EGL = $$QMAKE_LIBS_EGL")
message("In egl.pro - 1: LIBS = $$LIBS")

!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL

message("In egl.pro - 2: QMAKE_LIBS_EGL = $$QMAKE_LIBS_EGL")
message("In egl.pro - 2: LIBS = $$LIBS")

CONFIG -= qt

In the main ./configure file of qtbase:

| In configure #1: QMAKE_LIBS_EGL =
| In configure #2: QMAKE_LIBS_EGL = -lEGL -lGLESv2 -lbcm_host
-lvchostif -lbcm_host -lvcos -lvchiq_arm -pthread

The variable QMAKE_LIBS_EGL is set properly.


In the ./config.tests/qpa/egl/egl.pro file:

| Project MESSAGE: In egl.pro - 1: QMAKE_LIBS_EGL = -lEGL
| Project MESSAGE: In egl.pro - 1: LIBS = -lEGL -lGLESv2 -lbcm_host
-lvchostif -lvcos -lvchiq_arm -pthread
| Project MESSAGE: In egl.pro - 2: QMAKE_LIBS_EGL = -lEGL
| Project MESSAGE: In egl.pro - 2: LIBS = -lEGL -lGLESv2 -lbcm_host
-lvchostif -lvcos -lvchiq_arm -pthread -lEGL


*What I see is that:*
In the configure file the variable QMAKE_LIBS_EGL is properly set
through pkg-config.
In the egl.pro file... The variable LIBS gets the content of
QMAKE_LIBS_EGL and the variable QMAKE_LIBS_EGL gets back to its
default -lEGL.

In the end with have -lGLESv2 before -lEGL and this does not link.

I checked also the content of .qmake.vars:
grep QMAKE_LIBS_EGL .qmake.vars
QMAKE_LIBS_EGL = -lEGL -lGLESv2 -lbcm_host -lvchostif -lbcm_host
-lvcos -lvchiq_arm -pthread


The command QMakeVar set QMAKE_LIBS_EGL "$QMAKE_LIBS_EGL" seems to
have his job done too late...

If someone has an idea to get the proper correction done...

Best Regards,
Julien



--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

--
Andrei Gherzan

>From 0d802a1033c297f376956c614cf7ba256d4d939b Mon Sep 17 00:00:00 2001
From: Julien Gueytat <cont...@jgueytat.fr>
Date: Sun, 24 Apr 2016 19:12:13 +0200
Subject: [PATCH] Add -lvchostif for the EGLFS RaspberryPi test from Qt.

---
 pkgconfig/bcm_host.pc.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkgconfig/bcm_host.pc.in b/pkgconfig/bcm_host.pc.in
index c7237c5..3d21ae6 100644
--- a/pkgconfig/bcm_host.pc.in
+++ b/pkgconfig/bcm_host.pc.in
@@ -6,5 +6,5 @@ includedir=${prefix}/include
 Name: bcm_host
 Description: Broadcom VideoCore host API library
 Version: 1
-Libs: -L${libdir} -lbcm_host -lvcos -lvchiq_arm -pthread
+Libs: -L${libdir} -lbcm_host -lvcos -lvchiq_arm -lvchostif -pthread
 Cflags: -I${includedir} -I${includedir}/interface/vmcs_host/linux -I${includedir}/interface/vcos/pthreads -DUSE_VCHIQ_ARM
-- 
1.9.1

>From 47c9d4d202bdc4bd6af3adc2a9d45c41525334c7 Mon Sep 17 00:00:00 2001
From: Julien Gueytat <cont...@jgueytat.fr>
Date: Sun, 24 Apr 2016 17:27:45 +0200
Subject: [PATCH] Use completely PKG_CONFIG which set the variables: -
 $libdir_raw - $incdir_raw - $libs - $cflags There is no need to have anything
 in the .pro files then.

PKG_CONFIG calls for now only one dependency... bcm_host.
So we need to add EGL and GLESv2 too directly in the .pro.

The way *.pro files and pkg_config needs changes.
---
 config.tests/qpa/egl/egl.pro               |  8 --------
 config.tests/qpa/eglfs-brcm/eglfs-brcm.pro | 10 +---------
 config.tests/unix/opengles2/opengles2.pro  |  7 -------
 configure                                  | 12 ++----------
 4 files changed, 3 insertions(+), 34 deletions(-)

diff --git a/config.tests/qpa/egl/egl.pro b/config.tests/qpa/egl/egl.pro
index f04d053..c1889c5 100644
--- a/config.tests/qpa/egl/egl.pro
+++ b/config.tests/qpa/egl/egl.pro
@@ -1,10 +1,2 @@
 SOURCES = egl.cpp
-
-for(p, QMAKE_LIBDIR_EGL) {
-    exists($$p):LIBS += -L$$p
-}
-
-!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
-!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL
-
 CONFIG -= qt
diff --git a/config.tests/qpa/eglfs-brcm/eglfs-brcm.pro b/config.tests/qpa/eglfs-brcm/eglfs-brcm.pro
index ce16a3a..064ec6a 100644
--- a/config.tests/qpa/eglfs-brcm/eglfs-brcm.pro
+++ b/config.tests/qpa/eglfs-brcm/eglfs-brcm.pro
@@ -1,11 +1,3 @@
 SOURCES = eglfs-brcm.cpp
-
 CONFIG -= qt
-
-INCLUDEPATH += $$QMAKE_INCDIR_EGL
-
-for(p, QMAKE_LIBDIR_EGL) {
-    exists($$p):LIBS += -L$$p
-}
-
-LIBS += -lEGL -lGLESv2 -lbcm_host
+LIBS += -lEGL -lGLESv2
diff --git a/config.tests/unix/opengles2/opengles2.pro b/config.tests/unix/opengles2/opengles2.pro
index c4d7689..899ad99 100644
--- a/config.tests/unix/opengles2/opengles2.pro
+++ b/config.tests/unix/opengles2/opengles2.pro
@@ -1,12 +1,5 @@
 SOURCES = opengles2.cpp
-INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
-
-for(p, QMAKE_LIBDIR_OPENGL_ES2) {
-    exists($$p):LIBS += -L$$p
-}
-
 CONFIG -= qt
-LIBS += $$QMAKE_LIBS_OPENGL_ES2
 mac {
     DEFINES += BUILD_ON_MAC
 }
diff --git a/configure b/configure
index c696e7e..843b79f 100755
--- a/configure
+++ b/configure
@@ -5796,15 +5796,7 @@ if [ "$CFG_EGL" != "no" ]; then
         exit 101
     fi
 
-    if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists egl 2>/dev/null; then
-        QMAKE_INCDIR_EGL=`$PKG_CONFIG --cflags-only-I egl 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'`
-        QMAKE_LIBS_EGL=`$PKG_CONFIG --libs egl 2>/dev/null`
-        QMAKE_CFLAGS_EGL=`$PKG_CONFIG --cflags egl 2>/dev/null`
-        QMakeVar set QMAKE_INCDIR_EGL "$QMAKE_INCDIR_EGL"
-        QMakeVar set QMAKE_LIBS_EGL "$QMAKE_LIBS_EGL"
-        QMakeVar set QMAKE_CFLAGS_EGL "`echo " $QMAKE_CFLAGS_EGL " | sed -e 's, -I[^ ]* , ,g;s,^ ,,;s, $,,'`"
-    fi       # detect EGL support
-    if compileTest qpa/egl "EGL" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then
+    if compileTestWithPkgConfig egl qpa/egl "EGL" EGL; then
         CFG_EGL=yes
         if compileTest qpa/egl-x11 "EGL-X11" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then
             CFG_EGL_X=yes
@@ -5827,7 +5819,7 @@ if [ "$CFG_EGLFS" != "no" ]; then
     if [ "$XPLATFORM_QNX" = "no" ] && [ "$CFG_OPENGL" != "no" ]; then
         CFG_EGLFS="$CFG_EGL"
         # Detect eglfs backends.
-        if compileTest qpa/eglfs-brcm "eglfs-brcm"; then
+        if compileTestWithPkgConfig bcm_host qpa/eglfs-brcm "eglfs-brcm" EGLFS_BRCM; then
             CFG_EGLFS_BRCM=yes
         else
             CFG_EGLFS_BRCM=no
-- 
1.9.1

-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to