読者です 読者をやめる 読者になる 読者になる

Tizen パッケージビルド 〜SBS編〜

(※)ひたすら面倒臭いです。覚書で書いているのでGBSを使うことをおすすめします。

Tizen界隈ではパッケージビルドというと、GBS、OBSといわれますが、単に実機で動くバイナリをクロスビルドするだけならSBSでもできます。*1
とりあえずまとめという事で、SBSでクロスバイナリを出力する方法をまとめます。

必要なソースパッケージをダウンロードしてくる

実はソースはいろいろな方法で公開されています。

  1. https://download.tizen.org
    • srpm形式で配布
  2. https://review.tizen.org/git
    • git cloneで取ってくる方法(ログインアカウント不要)
  3. 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ファイルを開きます。

f:id:moguriso:20121021113316p:plain

”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でのパッケージビルドでした。

*1:完全に時代遅れなやり方になりますが

*2:実はgerrit+GBSの組み合わせが一番安全確実な手段だと思われます

*3:Canvas and scenegraph rendering library.

*4:rpmコマンドをインストールすれば、ubuntuなどのdebianディストリビューションでも展開可能です

*5:ソースの修正は母艦側でやっていましたが・・・