2

Cross-compilation Qt 5.9.6 for RaspberryPi

Persiapan Raspberry Pi

Update package

Edit sources list /etc/apt/sources.list, kemudian uncomment baris deb-src:

sudo nano /etc/apt/sources.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot

Update Raspberry Pi firmware

sudo rpi-update
sudo reboot

Install dependencies

sudo apt-get build-dep qt4-x11
sudo apt-get build-dep libqt5gui5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0

Persiapan Linux Host

Pada tutorial ini digunakan Ubuntu 16.04 x64.

Update package

sudo apt-get update
sudo apt-get -y upgrade

Install dependencies

sudo apt-get install git bison python gperf

Buat folder kerja

sudo mkdir /opt/qt5pi
sudo chown akhal:akhal /opt/qt5pi
cd /opt/qt5pi

Clone toolchain

git clone https://github.com/raspberrypi/tools

Tambahkan toolchain binary di variabel PATH

nano ~/.bashrc

Tambahkan baris berikut:

export PATH=$PATH:/opt/qt5pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

Download QT Source

https://download.qt.io/official_releases/qt/5.9/5.9.6/single/qt-everywhere-opensource-src-5.9.6.tar.xz

Untar QT source

tar -xvf t-everywhere-opensource-src-5.9.6.tar.xz

Buat hf configuration

cp -R qt-everywhere-opensource-src-5.9.6/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-opensource-src-5.9.6/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-opensource-src-5.9.6/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf

Copy raspberry pi sysroot

mkdir sysroot sysroot/usr sysroot/opt
rsync -avz akhal@192.168.1.100:/lib sysroot
rsync -avz akhal@192.168.1.100:/usr/include sysroot/usr
rsync -avz akhal@192.168.1.100:/usr/lib sysroot/usr
rsync -avz akhal@192.168.1.100:/opt/vc sysroot/opt

Buat symlinks to “missing” libraries

mv sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup
ln -s sysroot/opt/vc/lib/libEGL.so sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
mv sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup
ln -s sysroot/opt/vc/lib/libGLESv2.so sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
ln -s sysroot/opt/vc/lib/libEGL.so sysroot/opt/vc/lib/libEGL.so.1
ln -s sysroot/opt/vc/lib/libGLESv2.so sysroot/opt/vc/lib/libGLESv2.so.2

Ganti absolute symlinks dalam bentuk relative symlinks

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

Buat folder untuk build

mkdir qt5build
cd qt5build

Konfigurasi QT Source

../qt-everywhere-opensource-src-5.9.6/configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /opt/qt5pi/sysroot -prefix /usr/local/qt5pi -opensource -confirm-license -skip qtwebengine -skip qtscript -nomake examples -make libs -v

Jika muncul error unknown CPU architecture ketika konfigurasi, tambahkan baris -no-use-gold-linker sehingga menjadi:

../qt-everywhere-opensource-src-5.9.6/configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /opt/qt5pi/sysroot -prefix /usr/local/qt5pi -opensource -confirm-license -skip qtwebengine -skip qtscript -nomake examples -make libs -v -no-use-gold-linker

Make

Jika konfigurasi sudah selesai, jalankan perintah make.

make
make install

Upload hasil compile ke Raspberry Pi

cd /opt/qt5pi
rsync -avz sysroot/usr/local/qt5pi akhal@192.168.1.100:/usr/local

Konfigurasi Pada QT Creator

Install QT

Konfigurasi toolkit

Buka QT Creator, kemudian pilih option dan tambahkan parameter-parameter berikut:

  • Tools->Options…->Devices->Add
    Generic Linux Device
    Edit host, username, dan password.
  • Tools->Build&Run->Debuggers->Add
    Edit name dan path ( /opt/qt5pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb )
  • Tools->Compilers->Add->GCC->C
    Edit name dan path ( /opt/qt5pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc )
  • Tools->Compilers->Add->GCC->C++
    Edit name dan path ( /opt/qt5pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ )
  • Tools->Qt Versions->Add
    Pilih /opt/qt5pi/sysroot/usr/local/qt5pi/bin/qmake
  • Tools->Kits->Add
    Edit name
    Device type: Generic Linux Device
    Device: raspberry pi device
    Sysroot: Choose /opt/qt5pi/sysroot
    C and C++: Choose prior created raspberry pi compilers
    Debugger: Choose prior created raspberry pi debugger
    Qt version: Choose prior created raspberry pi qt version

Selesai