Cannot properly ./configure to install Qt with eglfs and opegles2 support.

Well, i’m not sure if this is something useful, but, I try to use an older version of the Linaro compiler.
I was using 7.5 and i try 6.5
I think there’s something weird updating links, because i change the ./configure, and the script still trying to use the 7.5v, look:

  • cd qtbase
  • /opt/qt5bbb/qt5/qtbase/configure -top-level -no-gcc-sysroot -device linux-beagleboard-g++ -device-option CROSS_COMPILE=/opt/gcc-linaro-6.5.0-2018.12-x86_64_armv8l-linux-gnueabihf/bin/armv8l-linux-gnueabihf- -sysroot /mnt/bbb-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5bbb -hostprefix /usr/local/qt5bbb -qt-zlib -qt-libpng -no-openssl -opengl es2 -eglfs -v
    = /opt/qt5bbb/qt5/qtbase
    = /opt/qt5bbb/qt5/qtbase
    = /opt/qt5bbb/qt5/qtbase
    Creating qmake…
    make: Nothing to be done for ‘first’.
    Command line: -no-gcc-sysroot -device linux-beagleboard-g++ -device-option CROSS_COMPILE=/opt/gcc-linaro-6.5.0-2018.12-x86_64_armv8l-linux-gnueabihf/bin/armv8l-linux-gnueabihf- -sysroot /mnt/bbb-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5bbb -hostprefix /usr/local/qt5bbb -qt-zlib -qt-libpng -no-openssl -opengl es2 -eglfs -v

This is the Qt Open Source Edition.

You have already accepted the terms of the Open Source license.

Running configuration tests…

  • cd /opt/qt5bbb/qt5/config.tests && /opt/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/bin/armv8l-linux-gnueabihf-g++ -pipe -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mthumb -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mthumb -mfloat-abi=hard -fuse-ld=gold -o conftest-out conftest.cpp

  • /opt/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/bin/armv8l-linux-gnueabihf-g++ -dumpmachine

armv8l-linux-gnueabihf

I rename the 7.5v folder and still giving me the same paths here.

Best regards.

Okay, a bit of success.
With it picking up the older toolchain, look in the folders you are using for any '.qt*. files. There are files that get created as ‘.’ when running the configure script.

For me,

I downloaded Qt 5.12.5 and unpacked it in a folder.
Then I created 3 folders for the prefix, extprefix and hostprefix:

prefix ~/opt/qt512bb/install
extprefix ~/opt/qt512bb/binaries
hostprefix ~/opt/qt512bb/tool

Then I created a build folder to build qt in and moved to that folder to build

mkdir -p ~/opt/qt512bb/build
cd ~/opt/qt512bb/build

Then I ran the configure script from the build folder as such.

…/qt-everywhere-src-5.12.5/configure -platform linux-g+±64 -release -opengl es2 -device linux-beagleboard-g++ -device-option CROSS_COMPILE=~/develop/bbuild/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/develop/bbuild/sysroot -opensource -confirm-license -make libs -prefix ~/opt/qt512bb/install -extprefix ~/opt/qt512bb/binaries -hostprefix ~/opt/qt512bb/tool -nomake tests -v -libdir ~/develop/bbuild/sysroot/lib/arm-linux-gnueabihf

This was just to verify the config and make sure it passes the configure stage. Currently running make and will see if it compiles then will add the other items in the config.
Also, I am using the default qmake.conf file.

Helpful links:
https://stackoverflow.com/questions/45983717/qt-sysroot-prefix-extprefix-and-hostprefix-options

https://stackoverflow.com/questions/49139731/error-while-creating-qmake-for-a-qt-static-build

Jon

That looks good.
In the meantime I try to fully understand what are you doing and how to replicate it, you say you will add the other items in the config later. How do you will do that? I have an VirtualBox snapshot on my laptop (another Qt installation) just after the -make step, so, to try re-run the ./configure plus -make combo when we can include OpenGL I just ran -make clean, but this don’t solve that re-run ./configure doesn’t seem to take all the new paths.
In the past, I opt to reinstall Ubuntu just for make sure the new installation will be clean, but i hate do that, i think that in certain moment i will not be able to do that anymore without expend another week configuring the IDE.

Thank you very much for your help.
Jeremias.

Okay, I think I have something that works. This completes the configure step, completes make, and make install.
As far as the issue where it is still picking up the previous toolchain in your config, each time after I compile or run into an issue, I remove the build, the qt source, the toolchain folders and anything else that indicates it was touched during the build of qt. I had to remove the sysroot folder and resync the files from the Beaglebone at least once.

With my config, I found I was missing a couple of folders from the BB where there were files linked to other locations. This is what I have for creating the sysroot for the BB.

mkdir -p sysroot/{lib,sbin,usr/{include,lib,bin},etc/alternatives}

rsync -avz debian@192.168.7.2:/lib sysroot/

rsync -avz debian@192.168.7.2:/sbin sysroot/

rsync -avz debian@192.168.7.2:/usr/include sysroot/usr

rsync -avz debian@192.168.7.2:/usr/lib sysroot/usr

rsync -avz debian@192.168.7.2:/usr/bin sysroot/usr

rsync -avz debian@192.168.7.2:/etc/alternatives sysroot/etc

Get this tool to fix relative links:

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

This is the qmake.conf that I am using

#
# qmake configuration for the BeagleBoard and BeagleBoard xM boards
# http://beagleboard.org/

MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#include(…/…/common/linux.conf)
#include(…/…/common/gcc-base-unix.conf)
#include(…/…/common/g+±unix.conf)

include(…/common/linux_device_pre.conf)

load(device_config)

QT_QPA_DEFAULT_PLATFORM = eglfs

# modifications to g++.conf
QMAKE_CC = $${CROSS_COMPILE}gcc
QMAKE_CXX = $${CROSS_COMPILE}g++
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_LINK_SHLIB = $${QMAKE_CXX}

# modifications to linux.conf
QMAKE_AR = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
QMAKE_STRIP = $${CROSS_COMPILE}strip

COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mthumb

#modifications to gcc-base.conf
QMAKE_CFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS_RELEASE += -O3

INCLUDEPATH += /home/bbbuild/develop/bbuild/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/c++/7.5.0

QMAKE_LIBS += -lrt -lpthread -ldl

# Extra stuff (OpenGL, DirectFB, …)
QMAKE_INCDIR_EGL = /home/bbbuild/develop/bbuild/sysroot/usr/include
QMAKE_LIBDIR_EGL = /home/bbbuild/develop/bbuild/sysroot/usr/lib/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}

#QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
QMAKE_LIBS_EGL = -lEGL
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}

DISTRO_OPTS += hard-float

# No need for any special EGL device integration.
# Prioritize the default, compiled-in integration over any plugins.
EGLFS_DEVICE_INTEGRATION = none

include(…/common/linux_arm_device_post.conf)

load(qt_config)

Note, I had to add an INCLUDEPATH entry to point to the includes in the toolchain since qmake was not finding it.

Then I ran configure from the build folder as such:

…/qt-everywhere-src-5.12.5/configure -platform linux-g+±64 -prefix /home/bbbuild/opt/qt512bb/qt512 -extprefix /home/bbbuild/opt/qt512bb/binaries -hostprefix /home/bbbuild/opt/qt512bb/tool -release -opengl es2 -device linux-beagleboard-g++ -device-option CROSS_COMPILE=/home/bbbuild/develop/bbuild/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-tds -sysroot /home/bbbuild/develop/bbuild/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -nomake examples -nomake tests -v -no-gbm

Then run make && make install
This is part of the config.status output from the build folder

EGL … yes
OpenVG … no
OpenGL:
Desktop OpenGL … no
OpenGL ES 2.0 … yes
OpenGL ES 3.0 … yes
OpenGL ES 3.1 … yes
OpenGL ES 3.2 … yes
Vulkan … yes
Session Management … yes
Features used by QPA backends:
evdev … yes
libinput … yes
INTEGRITY HID … no
mtdev … yes
tslib … yes
xkbcommon … yes
X11 specific:
XLib … yes
XCB Xlib … yes
EGL on X11 … yes
QPA backends:
DirectFB … no
EGLFS … yes
EGLFS details:
EGLFS OpenWFD … no
EGLFS i.Mx6 … no
EGLFS i.Mx6 Wayland … no
EGLFS RCAR … no
EGLFS EGLDevice … yes
EGLFS GBM … no
EGLFS VSP2 … no
EGLFS Mali … no
EGLFS Raspberry Pi … no
EGLFS X11 … yes
LinuxFB … yes
VNC … yes
Mir client … no

This is what is in the binaries folder from the extprefix option

~/opt/qt512bb$ ls -lt binaries/
total 52
drwxr-xr-x 2 bbbuild bbbuild 12288 Oct 25 19:00 translations
drwxr-xr-x 23 bbbuild bbbuild 4096 Oct 25 19:00 qml
drwxr-xr-x 80 bbbuild bbbuild 4096 Oct 25 19:00 include
drwxr-xr-x 4 bbbuild bbbuild 20480 Oct 25 19:00 lib
drwxr-xr-x 2 bbbuild bbbuild 4096 Oct 25 19:00 bin
drwxr-xr-x 25 bbbuild bbbuild 4096 Oct 25 18:59 plugins
drwxr-xr-x 3 bbbuild bbbuild 4096 Oct 25 18:58 doc

I hope this helps.

Cheers,

Jon

1 Like

You cannot imagine how I feel when see this on my terminal:

EGL … yes
OpenVG … no
OpenGL:
Desktop OpenGL … no
OpenGL ES 2.0 … yes
OpenGL ES 3.0 … yes
OpenGL ES 3.1 … yes
OpenGL ES 3.2 … yes
Vulkan … yes
Session Management … yes
Features used by QPA backends:
evdev … yes
libinput … no
INTEGRITY HID … no
mtdev … no
tslib … no
xkbcommon … yes
X11 specific:
XLib … yes
XCB Xlib … yes
EGL on X11 … yes
QPA backends:
DirectFB … no
EGLFS … yes
EGLFS details:
EGLFS OpenWFD … no
EGLFS i.Mx6 … no
EGLFS i.Mx6 Wayland … no
EGLFS RCAR … no
EGLFS EGLDevice … no
EGLFS GBM … no
EGLFS VSP2 … no
EGLFS Mali … no
EGLFS Raspberry Pi … no
EGLFS X11 … yes

We are almost 95% done.
Thank you very much.

That not only helps, that works.

I’m starting -make that, i will write here again when it’s done.

Thank you again.

Regards, Jeremias.

Well, I can’t compile it. :no_mouth:
I got those errors after a while:

In file included from /opt/qt5129bbb/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/armv8l-linux-gnueabihf/include/c++/7.5.0/bits/stl_algo.h:59:0,
from /opt/qt5129bbb/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/armv8l-linux-gnueabihf/include/c++/7.5.0/algorithm:62,
from …/…/include/QtCore/…/…/…/…/qt5/qtbase/src/corelib/global/qglobal.h:142,
from …/…/include/QtCore/qglobal.h:1,
from …/…/include/QtGui/…/…/…/…/qt5/qtbase/src/gui/kernel/qtguiglobal.h:43,
from …/…/include/QtGui/qtguiglobal.h:1,
from /opt/qt5129bbb/qt5/qtbase/src/gui/kernel/qt_gui_pch.h:50:
/opt/qt5129bbb/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/armv8l-linux-gnueabihf/include/c++/7.5.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^~~~~~~~~~
compilation terminated.
Makefile:1926: recipe for target ‘.pch/Qt5Gui.gch/c++’ failed
make[3]: *** [.pch/Qt5Gui.gch/c++] Error 1
make[3]: Leaving directory ‘/opt/qt5129bbb/build/qtbase/src/gui’
Makefile:555: recipe for target ‘sub-gui-make_first’ failed
make[2]: *** [sub-gui-make_first] Error 2
make[2]: Leaving directory ‘/opt/qt5129bbb/build/qtbase/src’
Makefile:50: recipe for target ‘sub-src-make_first’ failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory ‘/opt/qt5129bbb/build/qtbase’
Makefile:82: recipe for target ‘module-qtbase-make_first’ failed
make: *** [module-qtbase-make_first] Error 2

I’m trying to figure out what’s wrong with the library.
PS: I tried removing the line you add to the conf file, just in case.

I had that issue but it seemed to be resolved by adding the following line in the qmake.conf file:

INCLUDEPATH += /home/bbbuild/develop/bbuild/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/c++/7.5.0

Ensure you adjust the path, and other paths, to match your configuration. This is fully qualified based on where the toolchain is installed on my system.

Cheers,

Jon

Ok! Checking the paths again…
The only difference I see against your setup is that I’m using the Arm8 version of the toolchain.

Regards, Jeremias.

Okay, i owe you another coffee.
I corrected the paths, but forgot just the arm8.
Was: /opt/qt5129bbb/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/arm-linux-gnueabihf/include/c++/7.5.0
Must be: /opt/qt5129bbb/gcc-linaro-7.5.0-2019.12-x86_64_armv8l-linux-gnueabihf/armv8l-linux-gnueabihf/include/c++/7.5.0

Trying, again.

Per https://gcc.gnu.org/onlinedocs/cpp/Wrapper-Headers.html
"include_next" says to: find the next file in the search path with this
name. That seems to indicate that the include file search path needs to be
correctly ordered -- the implication is that there is a modified stdlib.h
in the source being built, and it then wants to include the normal system
stdlib.h for completeness.

{Is it really necessary to include 8+ levels of quoting that have nothing
relevant to the current incident?}

Dennis,

Yeah, that is the intent of INCLUDEPATH since the location of the includes in the toolchain are in a different location than where Qt is looking. I did see a post where it was suggested to remove the Default path but there were other comments in the same post where it did not work. What I posted seems to work; at least in my config.

I don’t understand this comment:
"
{Is it really necessary to include 8+ levels of quoting that have nothing
relevant to the current incident?}"

Jon

Dennis, to be honest, the quotes I see are only three little dots at the end of the mail that I simply ignore. I don’t know where are you reading this, but I didn’t realize that quotes may be annoying.
My apologies.

Now running make again. Let’s see what happens next.

Thanks again for the support.

Regards, Jeremias.

Jeremias,

Which Beagleboard are you compiling for?

My Beaglebone Black reports as an ARMv7 and not an ARMv8 so are you sure that is the correct toolchain for a BB Black.

debian@beaglebone:~$ cat /proc/cpuinfo | grep -i arm

model name : ARMv7 Processor rev 2 (v7l)

Jon

I just checked that and you are right, my board is a BeaglBone Black with ARM v7.
I mixed the term cortex-8 with the Arm version.
So, I don’t know why, but I’ve been working with this well.

I will correct it as soon as possible.

Thanks.

I read via the gmane NNTP server. According to my newsreader, the post
I'd responded to, and trimmed, had 1520 LINES of text in it.

  I suspect whatever client you are using is simply masking quoted
material by not displaying it, but it is none-the-less being included in
replies.

  And... I wasn't really targetting you with the complaint. It's a
general gripe I find in forums that didn't grow up with Usenet etiquette
(or "pay per minute" connections).

https://www.ietf.org/rfc/rfc1855.txt
Section 2.1.1 for individual email (ie: one-to-one messages)
"""
    - Be brief without being overly terse. When replying to a message,
      include enough original material to be understood but no more. It
      is extremely bad form to simply reply to a message by including
      all the previous message: edit out all the irrelevant material.
"""
Section 3.1.1 for lists and Usenet (one-to-many messages)
"""
    - If you are sending a reply to a message or a posting be sure you
      summarize the original at the top of the message, or include just
      enough text of the original to give a context. This will make
      sure readers understand when they start to read your response.
      Since NetNews, especially, is proliferated by distributing the
      postings from one host to another, it is possible to see a
      response to a message before seeing the original. Giving context
      helps everyone. But do not include the entire original!
"""

  Unfortunately... Then came Microsoft Outlook -- which sought to produce
a business ethic in which quoted material is the equivalent of a photocopy
attached to a snail-mail letter as a courtesy for the recipient (who should
already be familiar with the content, the copy just saves them looking up
archived mails for any details they forgot), and the entire reply is
provided "above" the copy.

I believe if you respond directly from the Google Groups Beagleboard Forum it will automatically add the previous conversation content. If you extend the ‘…’ then you will see what is being added. I just respond directly in GMail and avoid the quotes unless I find them necessary.

Jeremias,

If you want to take the discussion offline I am cool with that.

Jon

Hi again, sorry for the delay.

Well, i finally can build Qt with OpenGL. :smiley:
A few hours later, the -make process finishes, I ran make install and all was perfect.
After that, I upload to the BBB the /sysroot folder.
I try to build an example and it fails.
I configure QtCreator with the Qmake from /build/qtbase/bin/qmake.
I got a lot of errors about paths. I’m not able to try to fix them by now.

Warning: libpng16.so.16, needed by /opt/qt5129bbb/build/qtbase/lib/libQt5Gui.so, not found (try using -rpath or -rpath-link)

Unfortunately my company needs me in another area by now, so I must leave the BBB for a time, I really expect that doesn’t be too long.
I’m infinitely grateful for your help and camaraderie.

I promise to write here again when I come back to the project.

Hope to read you soon again!

Regards, Jeremias.

Check in your sysroot folder under usr/lib/arm-linux-gnueabihf.

Jon

Hi Jeremias,
Maybe the issue is the linker wasn’t config to use relative link libraries.
You can try adding to the .pro file like this:
QMAKE_RPATHDIR += sysroot/usr/lib/arm-linux-gnueabihf
QMAKE_RPATHDIR += sysroot/lib/arm-linux-gnueabihf
Hope it could help.

Hi all,
thanks for the great job.
I’m following this thread to build Qt with OpenGL support.
There is a step that is missing or that i didn’t find, how did you install all required libs on the BBB?
libEGL
libIMGegl
libGLESv2
libsrv_um

While I can install using apt-get the first 3 libs, it seems it’s impossible to find the last libsrv_um.so .

Thanks for your help .

Luca