segunda-feira, 18 de fevereiro de 2013

Cross-Compilar o QT5 para a Raspberry PI




Alguns meses depois… hora de voltar a ativa, muita coisa para se publicar, mas como sempre pouco tempo… durante este tempo fizemos a aquisição da Raspberry PI 512mb, para mais informações visite o site raspberrypi.

Eu não fiz este tutorial, apenas estou demonstrando aqui a minha experiência em cross-compilar o QT5 para a Raspberry PI, o tutorial que usei como base está no site qtonpi que contem muito mais informações.

A primeira ação é criar a pasta onde serão salvos todos os arquivos necessários para cross-compilar o QT5, então com os comandos abaixo no terminal do linux você cria e entra no diretório “opt” dentro da sua pasta “home”:
1. labsyn@labsynVM:~$ mkdir ~/opt
2. labsyn@labsynVM:~$ cd ~/opt

Agora é necessário fazer o download dos arquivos de imagem da Raspbian Wheezy em raspberrypi.org. Suponho que ja tenha gravado o sd card e testado sua Rasp, basta copiar a o arquivo que já baixou anteriormente para a pasta, mas se perdeu esses arquivos, baixe novamente, só não esquece de modificar o comando para a versão da Wheezy que está gravada no seu sd card:
1. labsyn@labsynVM:~/opt$ wget http://files.velocix.com/c1410/images/raspbian/2012-07-15-wheezy-raspbian/2012-12-16-wheezy-raspbian.zip
2. labsyn@labsynVM:~/opt$ unzip 2012-12-16-wheezy-raspbian.zip

Agora é necessário montar a imagem:
1. labsyn@labsynVM:~/opt$ sudo mkdir /mnt/rasp-pi-rootfs
2. labsyn@labsynVM:~/opt$ sudo mount -o loop,offset=62914560 2012-12-16-wheezy-raspbian.img /mnt/rasp-pi-rootfs
1. labsyn@labsynVM:~/opt$ wget http://swap.tsmt.eu/gcc-4.7-linaro-rpi-gnueabihf.tbz with sha1 f6255c6aca925239dc943d22a794f642daa17e65
2. labsyn@labsynVM:~/opt$ tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz

A Raspberry já possui um cross-compiler ideal, o que poupa muito tempo e muita dor de cabeça…. para mais informações acesse github.com/raspberrypi/tools. Mas se quiser ser mais específico, acesse sergioprado.org/

Obs: Se estiver trabalhando em uma máquina 64-bit, vai precisar instalar as bibliotecas de  32-bit “ia32-libs”, não foi o meu caso:
labsyn@labsynVM:~/opt$ sudo apt-get install ia32-libs

Obtendo o código do repositório do cross-compiler:
1. labsyn@labsynVM:~/opt$ git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git

Iniciando o repositório Qt5:
1. labsyn@labsynVM:~/opt$ git clone git://gitorious.org/qt/qt5.git
2. labsyn@labsynVM:~/opt$ cd qt5
3. labsyn@labsynVM:~/opt/qt5$ ./init-repository

Antes de aplicar os repositorios, se estiver atrás de um firewall, execute o comando para evitar problemas com “./init-repository”:
4. labsyn@labsynVM:~/opt/qt5$ sed -i 's/git:\/\//https:\/\/git./' .gitmodules

Em seguida:
5. labsyn@labsynVM:~/opt/qt5$ ./init-repository -f
6. labsyn@labsynVM:~/opt/qt5/$ cd ~/opt/qt5/qtjsbackend
7. labsyn@labsynVM:~/opt/qt5/$ git fetch https://codereview.qt-project.org/p/qt/qtjsbackend refs/changes/56/27256/4 && git cherry-pick FETCH_HEAD

Neste ponto, temos finalmente um ambiente necessário para compilar o QT5 para a Raspberry. Agora basta corrigir links e caminhos:
1. labsyn@labsynVM:~$ cd ~/opt/cross-compile-tools
2. labsyn@labsynVM:~$ sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc

Retornando para a pasta e finalmente iniciar:
1. labsyn@labsynVM:~$ cd ~/opt/qt5/qtbase
2. labsyn@labsynVM:~/opt/qt5/qtbase$ ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix /usr/local/qt5pi
3. labsyn@labsynVM:~/opt/qt5/qtbase$ make -j 4

Ela deve funcionar, mas depois de um bom tempo, eu tive a ingrata surpresa:
cc1: fatal error: .pch/release-shared/Qt5Gui: No such file or directory
compilation terminated.
make[2]: *** [.obj/release-shared/pixman-arm-neon-asm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory `/home/labsyn/opt/qt5/qtbase/src/gui'
make[1]: *** [sub-gui-make_first] Error 2
make[1]: Leaving directory `/home/labsyn/opt/qt5/qtbase/src'
make: *** [sub-src-make_first] Error 2

Estranho, mas a única solução que achei foi retirar esse erro inserindo “-no-pch” no ./configure. Então tive que executar os seguintes commandos, mas se não teve problema, pode pular direto para “make install”:
1. labsyn@labsynVM:~/opt/qt5/qtbase$ ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix /usr/local/qt5pi –no-pch
2. labsyn@labsynVM:~/opt/qt5/qtbase$ make -j 4


E agora:

3. labsyn@labsynVM:~/opt/qt5/qtbase$ sudo make install

Continua…

Nenhum comentário:

Postar um comentário