Qt5-Maemo5/Development
From Maemo Wiki
If you like to commit to the repositories, create an account on gitorious.org and ask in the TMO thread.
Building Qt5 for the N900 (using scratchbox)
Prerequisites:
- any scratchbox ARMEL target, tested with CSSU-thumb toolchain setup (gcc4.7.2-linaro)
- Xlib-xcb.h and libX11-xcb.so build from http://maemo.org/packages/source/view/fremantle_sdk_free_source/libx11/1.1.99.6+0m5 (build with --with-xcb)
- We would need to deliver libX11.so.6 too, but --with-xcb breaks keyboard support for system apps
- Solution: we install a copy of libX11.so with XCB supoort, named libXc11.so and link against this copy, so system binaries don't load it (tested, works reliably)
- apt-get install libxc11-xcb-dev (with frafl's temporary Qt5 repo enabled, see Qt5-Maemo5)
- all "-lX11" (and "-lX11-xcb") in the Qt sources have been changed to "-lXc11" ("-lXc11-xcb" respectively)
Prepare your build environment
GITROOT=`pwd`/qt5-maemo5/
USER=YourScratchboxUserName
TARGET=FREMANTLE_ARMEL_GCC472
COMPILER=linaro-4.7-2012.07-fremantle-armv7a
#make some dynamic links relative
rm /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libdl.so
ln -s ../../libdl.so.2 /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libdl.so
rm /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libm.so
ln -s ../../libm.so.6 /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libm.so
#make our X11 copy Xc11 also relative
rm /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libXc11.so.6.2.0
ln -s ../../opt/maemo/usr/lib/libXc11.so.6.2.0 /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libXc11.so.6.2.0
rm /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libXc11-xcb.so.1.0.0
ln -s ../../opt/maemo/usr/lib/libXc11-xcb.so.1.0.0 /scratchbox/users/${USER}/targets/${TARGET}/usr/lib/libXc11-xcb.so.1.0.0
#clone the repo
git clone git://gitorious.org/+qt5-maemo5/qt/qt5-maemo5.git
cd qt5-maemo5 && git remote set-url --push origin git@gitorious.org:+qt5-maemo5/qt/qt5-maemo5.git
git checkout maemo5
git clone git://gitorious.org/+qt5-maemo5/qt/qt5-maemo5-qtbase.git qtbase
cd qtbase && git checkout maemo5 && git remote set-url --push origin git@gitorious.org:+qt5-maemo5/qt/qt5-maemo5-qtbase.git && cd ..
git clone git://gitorious.org/+qt5-maemo5/qt/qt5-maemo5-qtdeclarative.git/qt/qt5-maemo5-qtdeclarative.git
cd qtdeclarative && git checkout maemo5 && git remote set-url --push origin git@gitorious.org:+qt5-maemo5/qt/qt5-maemo5-qtdeclarative.git && cd ..
./init-repository -f
git config --remove-section submodule.qtbase
git config --add submodule.qtbase.url git://gitorious.org/+qt5-maemo5/qt/qt5-maemo5-qtbase.git
git config --remove-section submodule.qtdeclarative
git config --add submodule.qtdeclarative.url git://gitorious.org/+qt5-maemo5/qt/qt5-maemo5-qtdeclarative.git
#If you want o build
git clone git://gitorious.org/qt5-maemo5/qt5-maemo5-qtmaemo5.git
#if you like to use the Thumb2 instructions check for -mthumb in QMAKE_CFLAGS
vim qtbase/mkspecs/devices/linux-maemo-n900-g++/qmake.conf
Now it's time to configure
configure for a build outside of scratchbox (standard for now)
#-no-c++11 is only needed because of a single bug (related to gcc4.7?)
./configure -no-c++11 -developer-build -opensource -nomake examples -nomake tests -confirm-license -device linux-maemo-n900-g++ -device-option CROSS_COMPILE=/scratchbox/compilers/${COMPILER}/bin/arm-none-linux-gnueabi- -sysroot /scratchbox/users/${USER}/targets/${TARGET}/ -qt-xcb -make libs -prefix /opt/qt5
configure within scratchbox instead (experimental)
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig/ PKG_CONFIG_SYSROOT_DIR=/ ./configure -no-c++11 -developer-build -opensource -nomake examples -nomake tests -confirm-license -device linux-maemo-n900-g++ -qt-xcb -make libs -prefix /opt/qt5
Finally, we build Qt
make module-qtbase module-qtdeclarative #or, especially for additional modules, but works for base and declarative, too cd qtSOMEMODULE ../qtbase/bin/qmake make #if debianized (i.e. debian exists) dpkg-buildpackage -b #attention: no prober clean rules in debian (to save some time) #so remove debian/tmp to force prober reinstall
installation (build in scratchbox (s.a.))
cd qtbase && fakeroot make install && cd .. cd qtjsbackend && fakeroot make install && cd .. cd qtsvg && fakeroot make install && cd .. cd qtdeclarative && fakeroot make install && cd .. ln -s /opt/qt5/bin/qmake /usr/bin/qmake-qt5
Building Qt5 for the N900 (using MADDE)
Prerequisites:
- MADDE
- The same as for scratchbox
MADDEROOT=/opt/QtSDK/Maemo/4.6.2
#see scratchbox
git clone ...
#-sysroots redirects everything to a path under ${MADDEROOT}
ln -s `pwd` ${MADDEROOT}/sysroots/fremantle-arm-sysroot-20.2010.36-2-slim`pwd`
#**Remove** -mthumb in QMAKE_CFLAGS (does not work with current MADDE)
vim qtbase/mkspecs/devices/linux-maemo-n900-g++/qmake.conf
Now it's time to configure and build:
#change if your host is not x86_64
./configure -developer-build -opensource -nomake examples -nomake tests -confirm-license -device linux-maemo-n900-g++ -device-option CROSS_COMPILE=${MADDEROOT}/toolchains/arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux_x86_64/bin/arm-none-linux-gnueabi- -sysroot ${MADDEROOT}/sysroots/fremantle-arm-sysroot-20.2010.36-2-slim -qt-xcb -make libs -prefix /opt/qt5
make module-qtbase module-qtdeclarative