Cross compiling Qt 5.2.1 for ARMv6 Platform
-
Hi,
i'm trying to elevate Qt for my embedded device from version 4.8.5 to 5.2.1 (see build environment information at the bottom of my post).
What i (probably) understand is that the problem has to do with the qpa mechanism for QtGui. QtGui is included in my system because i have two applications that write to the framebuffer but no actual GUI is displayed.
At the moment i'm trying to build qtbase only:
@make module-qtbase@
Unfortunately after about 5 minutes the build grinds to a halt with the following output:
@
arm-none-linux-gnueabi-g++ -c -include .pch/Qt5Gui -pipe -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -DQT_NO_USING_NAMESPACE -DQT_BUILD_GUI_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_CORE_LIB -I../../mkspecs/linux-arm-gnueabi-g++ -I. -I./qtbase/include -I../../include -I../../include/QtGui -I../../include/QtGui/5.2.1 -I../../include/QtGui/5.2.1/QtGui -Iimage -I../../include/QtCore/5.2.1 -I../../include/QtCore/5.2.1/QtCore -I../../include/QtCore -I.moc -o .obj/qplatformintegration.o kernel/qplatformintegration.cpp
In file included from ../../include/QtGui/5.2.1/QtGui/qpa/qplatformtheme.h:1,
from kernel/qplatformintegration.cpp:47:
../../include/QtGui/5.2.1/QtGui/qpa/../../../../../src/gui/kernel/qplatformtheme.h:296: error: 'QKeySequence::StandardKey' has not been declared
make[4]: *** [.obj/qplatformintegration.o] Error 1
make[4]: Leaving directory/home/lh1/Artista/common_code/external/qt/PL_AMEDIA_II_DDG/qt/qtbase/src/gui' make[3]: *** [sub-gui-make_first] Error 2 make[3]: Leaving directory
/home/lh1/Artista/common_code/external/qt/PL_AMEDIA_II_DDG/qt/qtbase/src'
make[2]: *** [sub-src-make_first] Error 2
make[2]: Leaving directory/home/lh1/Artista/common_code/external/qt/PL_AMEDIA_II_DDG/qt/qtbase' make[1]: *** [module-qtbase] Error 2 make[1]: Leaving directory
/home/lh1/Artista/common_code/external/qt/PL_AMEDIA_II_DDG/qt'
make: *** [buildtargets/qt_latest_built] Error 2@I have to confess that i do not have the slightest idea, what this means.
There exists an include file qkeysequence.h in qtbase/src/gui/kernel/ in which a class QKeySequence is declared which includes an enum StandardKey.I would be really happy if someone could help me out with this issue.
Thanks a lot in advance!
Cheers,
Lutz============ Information about my environment ============
For the build to run i have to patch linux-arm-gnueabi-g++/qmake.conf to use my toolchain's compile prefix:
@QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip@here is some information about my environment:
Host: Debian Linux 7.5 64 Bit
Target: Custom Linux running on ARMv6-compatible processorHost GCC version: 4.7.2
Cross Toolchain: arm-2010q1
Toolchain GCC version: 4.4.1Configure invocation:
@ ./configure
-prefix $(ROOTFS_DIR) -dbus
-release
-confirm-license
-qconfig small
-no-c++11
-no-accessibility
-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
-no-javascript-jit
-no-qml-debug
-no-sse2
-no-sse3
-no-ssse3
-no-sse4.1
-no-sse4.2
-no-avx
-no-avx2
-no-neon
-no-mips_dsp
-no-mips_dspr2
-xplatform linux-arm-gnueabi-g++
-no-sse2
-no-openssl
-nomake tools
-nomake examples
-nomake tests
-no-gtkstyle
-no-opengl
-no-openvg
-no-iconv
-no-icu
-no-fontconfig
-opensource
-no-widgets
-v
-no-nis
-no-cups
-no-eglfs
-no-kms
-no-xcb
-no-eglfs
-no-directfb
-linuxfb
-qpa linuxfb@ -
I've found a solution (how much i wish i could work on LEGO mindstorms in my job ;) ):
What actually helped was changing to the qtbase directory and start the build here since qtbass includes all i need.
The final hint came from here (thank you very much):
http://broija.blogspot.de/2013/11/compile-qt-5-qtbase-for-lego-mindstorms.html
I hope this could be helpful to someone here
Cheers,
Lutz=======================================
Now my qmake.conf looks like this:
@
qmake configuration for building with arm-none-linux-gnueabi-g++
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#Compilers, they are in the directory you've just added to PATH
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++#Very important! These options tell the compiler that the target processor is an arm1176jzf-s which architecture is armv6j.
QMAKE_CXXFLAGS += -mtune=arm1176jzf-s -march=armv6j
QMAKE_LFLAGS += -mtune=arm1176jzf-s -march=armv6jQMAKE_LFLAGS += -Wl,-rpath=$$ROOTFS_DIR/lib:$$ROOTFS_DIR/usr/lib:$$TARGET_LIBPATH
#Mandatory for dynamic linking on the target
QMAKE_LFLAGS += -Wl,--dynamic-linker=$$ROOTFS_DIR/lib/ld-linux.so.3modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
@My configure line now looks like this:
@
./configure
-opensource
-confirm-license
-release
-prefix $(ROOTFS_DIR)
-plugindir $(ROOTFS_DIR)/opt/mediaplayer
-xplatform linux-arm-gnueabi-g++
-qpa offscreen
-no-accessibility
-no-c++11
-no-widgets
-no-nis
-no-opengl
-no-openvg
-no-qml-debug
-no-compile-examples
-no-glib
-no-javascript-jit
-no-sql-sqlite
-no-sql-sqlite2
-no-iconv
-dbus
-nomake tests
-nomake examples
-nomake tools
@ -
Oh i forgot to mention that this worked for Qt 5.1.1. I was not able to build Qt 5.2 or 5.3 for my device.
The message was: "Add the datastream version for this Qt version" which could be a hint that my compiler is too old, i'm not sure about that and version 5.1.1 is sufficient for now.