Pull to refresh

Собираем Qt приложения для Symbian'а из-под linux'а

Reading time3 min
Views2.9K
На этот раз собирать будем практически полностью нативными средствами, не используя Nokia remote compiler
Данный метод проверялся на Gentoo-amd64, в результате чего были получены вполне рабочие sis файлы. Огромным преимуществом при сборке из под Linux'а является то, что используется родной make, а не мутная утилита под названием abld. В результате мы получаем такие преимущества, как:
  • Многопоточность
  • Отсутствие лишних шагов в виде обсчета всех зависимостей
  • Отсутствие зависимости от тормозного active perl'а

В итоге скорость сборки увеличивается в разы!

Важное замечание: некоторые утилиты таки работают через wine!

Установка gnupoc


Нам необходима регистрация на forum.nokia.com чтобы скачать пакеты с нужными нам sdk. А нужны нам S60_5th_Edition_SDK_v1_0_en.zip и s60_open_c_cpp_plug_in_v1_6_en. Скачиваем их в специально созданную для этого директорию, в моем случае это:
Develop/crossdev/symbian/downloads
Получив эти пакеты можно приступать к действиям:
Первым делом качаем и распаковываем куда-нибудь gnupoc.
Теперь запускаем скрипт install_gnupoc_s60_50 в качестве аргументов даем ему путь до архива с sdk и путь до каталога, в который будет этот sdk устанавливаться.
В моем случае это:
sh install_gnupoc_s60_50 ../../downloads/S60_5th_Edition_SDK_v1_0_en.zip ../../sdk

Повторяем операцию для openc
sh install_openc_16_s60 ../../downloads/s60_open_c_cpp_plug_in_v1_6_en.zip ../../sdk


Установка Qt


Теперь у нас лежит в Develop/crossdev/symbian/sdk вполне рабочий вариант, необходимо поставить на него Qt, для этого берем виндовую сборку для Симбиана, запускаем под вайном и устанавливаем, указав в качестве каталога с sdk наш искомый Develop/crossdev/symbian/sdk, от установки сырцов можно отказаться. Это действие позволит нам не тратить кучу часов на сборку всех либ для создания нужных def и dso файлов.
Версия Qt должна быть не ниже 4.7beta1, это важно, с версией 4.6 такая магия может не сработать!

А теперь внимательно следим за руками!


Начинается самое веселье: необходимо скомпилировать рабочий набор утилит для сборки, для этого качаем gcce, можно даже свежий 4.4.3, пускай пользователи Carbide по прежнему собирают дедовским 3.4.5. Компилятор кидаем к примеру в
Develop/crossdev/symbian/arm-2009q3/
Теперь нам нужно создать файлик с переменными окружения, где будут указан EPOCROOT, а также прописаны пути до компилятора и утилит. Мой файл выглядит вот так:
#!/bin/sh

SDK_DIR=$HOME/Develop/crossdev/symbian
export EPOCROOT=$SDK_DIR/sdk/
QTDIR=$SDK_DIR/qt
gcceDir=$SDK_DIR/arm-2009q3/bin/
export PATH=$QTDIR/bin:$EPOCROOT/epoc32/tools:$gcceDir:$PATH

if [[ ${EUID} == 0 ]] ; then
PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
else
PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] @ \[\033[01;33m\]Symbian SDK \[\033[00m\]'
fi

После того, как определились с путями делаем:
source env.sh
У нас появилось красивое приветствие, которое будет указывать нам о том, что сейчас у нас не совсем обычные переменные окружения.
Теперь нам нужны исходники той же самой версии Qt, что и в symbian сборке, их распаковываем в QTDIR, переходим в неё и запускаем configure со следующими ключами:
~/Develop/crossdev/symbian/qt $ @ Symbian SDK ./configure -platform linux-g++ -xplatform symbian/linux-gcce -little-endian -host-little-endian -arch symbian -prefix ~/Develop/crossdev/symbian/qt

В качестве префикса проще всего выбрать ту же самую QTDIR, чтобы не заморачиваться с установкой.
Теперь дожидаемся, когда соберется и отработает qmake, но make не запускаем.
Нужно сделать следующее
cd src/tools/
make

Теперь проверяем, что у нас за версия qmake, должно быть что-то такое
qmake -v
QMake version 2.01a
Using Qt version 4.7.0 in /home/sauron/Develop/crossdev/symbian/qt/lib

Послесловие и направления дальнейшей доводки:

Теперь можно заменить wine'овские утилиты соответствующими нативными из состава gnupoc, но делать это следует аккуратно, могут возникать проблемы с совместимостью. В принципе обычных exe файлов, запущенных через wine вполне хватает. На полотна warning'ов, возникающих при компиляции можно внимание не обращать, они возникают из за древнючей версии stlport'а и с ними ничего не поделаешь. Возможны некоторые проблемы при создании sis файлов.
Вот собранный таким образом sis файл, можете его проверить.
В целом хочу сказать, что решение вполне рабочее и надеюсь скоро появится официальный Symbian SDK для *nix систем
Tags:
Hubs:
Total votes 38: ↑31 and ↓7+24
Comments6

Articles