(※)ひたすら面倒臭いです。覚書で書いているのでGBSを使うことをおすすめします。
Tizen界隈ではパッケージビルドというと、GBS、OBSといわれますが、単に実機で動くバイナリをクロスビルドするだけならSBSでもできます。*1
とりあえずまとめという事で、SBSでクロスバイナリを出力する方法をまとめます。
必要なソースパッケージをダウンロードしてくる
実はソースはいろいろな方法で公開されています。
- https://download.tizen.org
- srpm形式で配布
- https://review.tizen.org/git
- git cloneで取ってくる方法(ログインアカウント不要)
- https://review.tizen.org/gerrit
- gitで取ってくる方法で、review.tizen.orgへのsshログインアカウントの登録が必要
一長一短があり、どれが安全確実という方法は今のところありません。公式が推奨しているのは”3”のgerritを利用する方法です。sshのログインアカウントはhttps://www.tizen.orgでregisterしたものがそのまま利用可能です。*2今回は、実機で動いているパッケージそのままのソースを利用したかったのでsrpmをダウンロードしてきて利用しています。
とりあえず、
https://download.tizen.org/snapshots/1.0/tizen-1.0_20120613.10/repos/main/source/
から、evas*3 - evas-1.2.0+svn.69910slp2+build01-1.6.src.rpmをダウンロードしてきます。
srpmの展開
ダウンロードしてきたsrpmをディレクトリに展開します。
$ rpm -i evas-1.2.0+svn.69910slp2+build01-1.6.src.rpm
*4
普通のRPMファイルでは、ここでアプリケーション等のインストールが自動で行われます。SRPMの場合、ユーザのホームディレクトリにrpmbuildディレクトリが自動で生成され(/home/user/rpmbuild)、そこにソースとspecファイルが展開されます。
rpmbuildディレクトリは下記のような構成になっています。
moguris@crowne:~/rpmbuild$ ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
この構成のまま、rpmbuildコマンドでrpmファイルを生成することも可能ですが、今回はやっていません。
ひとまず SOURCES フォルダに移動して、evasのソースが固められたtarballを展開します。
$ tar xfv evas-1.2.0+svn.69910slp2+build01.tar.gz
依存関係の解決
ひたすら面倒な箇所です。まず、展開したディレクトリのpackaging/evas.specファイルを開きます。
”BuildRequires:”ではじまる行が複数あります。このファイルを全部SBS環境に入れる必要があります。evas程度ならまだましですが、Webkit-engineを見ると発狂しそうになります。
手順としては、
https://download.tizen.org/snapshots/1.0/tizen-1.0_20120613.10/repos/main/armv7l/packages/armv7l/
https://download.tizen.org/snapshots/1.0/tizen-1.0_20120613.10/repos/base/armv7l/packages/armv7l/
から該当のrpmファイルをダウンロードしてきて、sbs環境にインストールします。インストールの方法が特殊で、母艦のUbuntuから下記のようにしてrpmコマンドを実行しました。
Ubuntu $sbs -et rpm -i ”パッケージ名".rpm
かなり面倒なので、該当する周辺パッケージをwgetで一気にダウンロードして、上記のコマンドをバッチで流すとだいぶ楽です。。。
ビルド、実行
ここからはSBS環境にログインして作業を進めます。*5
$ sbs -e
configureのオプションも先程のspecファイルにまとめられています。evasの場合は下記のような感じです。
66 %autogen 67 %configure --disable-static \ 68 --disable-image-loader-svg \ 69 --enable-simple-x11 \ 70 --with-x \ 71 --enable-fb \ 72 --enable-xrender-x11 \ 73 --enable-line-dither-mask \ 74 --disable-image-loader-edb \ 75 --disable-rpath \ 76 --enable-gl-x11 \ 77 --enable-gl-flavor-gles \ 78 --enable-gles-variety-sgx \ 79 %ifarch %{arm} 80 --enable-pthreads \ 81 --enable-cpu-neon \ 82 --enable-winkcodec=yes 83 %else 84 --enable-pthreads \ 85 --enable-winkcodec=no 86 %endif
実際には存在していないオプションがあるようで、一部警告されますがひとまずMakefileの生成には支障がないため無視しています。
一点、下記のようにしてprefixを指定しインストール先をローカルディレクトリに変更しています。
--prefix=`pwd`/binary
これで、
$ make clean; make; make install
すれば、ソースフォルダのbinary直下に必要なファイルが生成されます。何らかの方法で実機にコピーして動作確認してみましょう。。。
余談 - おすすめできない理由の数々
依存関係の解決は非常に邪魔くさい手順です。GBSだとここを半自動でやってくれます。
おそらく一番の問題は、./configureの際にSBSのローカル環境のパスを参照するため、環境がごちゃごちゃになっていくという事です。
昨日やっていて気づいたのですが、Tizen 1.0向けにEFL関連のパッケージedjeをリビルドしようとしたところ、1.7のevasモジュールを参照していて、1.2のevasにしか存在しない関数がundefinedになりビルドエラーが発生しました。
どうも、Makefileの生成時にローカルのSBSか関連のファイルを見るのか変なincludeパスやlibパスを参照してしまっていたようです。特に1.0向けと2.0向けで複数Verの同一パッケージ(evas1.2/1.7)を同じSBS環境でビルドしていたのがよくなかったのだと思いますが・・・
そんな訳で、おすすめできないSBSでのパッケージビルドでした。