Skip to content
dynamis edited this page Jan 25, 2013 · 22 revisions

主に Mac/Ubuntu でのビルドについてメモ

ビルド準備

XCode (Mac)

  • Command Line Tools をインストール
  • XCode 4.3.x の MacOSX10.7.sdk を最新の XCode 配下にコピー
  • /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk
  • XCode 更新時に消えるので注意

MacPorts (Mac)

いろいろ苦労するので正直推奨しない。HomeBrew 推奨。

  • git
  • gpg
  • ccache
  • yasm
  • autoconf-213
  • gcc-4.6
    • システムの gcc 切り替え
    • sudo port select --list gcc
    • sudo port select --set gcc mp-gcc46
    • デフォルトに戻す
    • sudo port select --set gcc none

HomeBrew (Mac)

一通りセットアップするスクリプトが用意されているのでそれを利用する:

# http://mxcl.github.com/homebrew/
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
# 
curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash
# install yasm from github when the server is down:
brew install --HEAD yasm

依存ライブラリ (Linux)

Linux は 64bit 版 Ubuntu 12.04 を推奨。Ubuntu 12.10 以降の gcc 4.7 などだとビルドできません。クリーンな Ubuntu 12.04 以外で頑張りたい人は MDN のドキュメント を参照して頑張ってください。

次のコマンドでインストール。

sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make

Java

Heimdall

Samsung Galaxy S2 への書き込みには必要。

ビルド (初回ビルド)

環境ができたら B2G のリポジトリを Clone してビルド対象を設定

git clone git://github.com/mozilla-b2g/B2G.git
cd B2G
# デバイス名のリストを出力
./config.sh
# デバイス名を指定して設定 (エミュレータ向けの場合)
./config.sh emulator

それではビルドスタート!上手くいくようにお祈り。実機向けにビルドする場合は Android 4.0 の入った実機を USB に繋いだ状態でビルド開始する必要があるので注意(ドライバなどを抜き出すため)。

# すべてビルド (並列数を -j オプションで指定)
./build.sh -j2
# ログを残してビルド
./build.sh -j2 2>&1 | tee build.log
# gecko だけビルド
./build.sh -j2 gecko
# gaia の特定アプリだけビルド
BUILD_APP_NAME=calendar ./build.sh gaia

out/target/product/galaxys2 に *.img ファイル群が生成される。

ソースを最新にしてビルド (2 回目以降)

最新のソースコードを repo スクリプトで取得

./repo sync

リポジトリ管理スクリプト repo 自体が更新された場合は次のようなメッセージが出るので言われたとおり repo スクリプトを更新する:

... A new repo command ( 1.19) is available.
... You should upgrade soon:

    cp /Users/dynamis/build/B2G-unagi/.repo/repo/repo /Users/dynamis/build/B2G-unagi/repo

無事リポジトリの更新ができたら ./build.sh でビルドする。

端末にインストール

ビルドが無事完了したら ./build.sh の最後に ./flash.sh しろという指示が出るはず。そしたら次の通り gonk/gecko と gaia を順に書き込む。

# gonk/gecko を書き込み
./flash.sh
# gaia を書き込み
./flash.sh gaia
## 以下のコマンドでもよいか?
#make -C gaia install-gaia
#make -C gaia install-media-samples

無事書き込まれると Firefox OS が起動するハズです。(・・).

Trouble Shooting

ビルド中にクラッシュする

低スペックマシンでビルドすると 16 スレッド平行ビルドする時に OS クラッシュしたりする。 gonk-misc/Android.mk の GECKO_MAKE_FLAGS ?= -j16 とされているオプションを自分のマシンの CPU コア数に修正

$ grep -r _MAKE_FLAGS gecko gonk-misc
# 以下のファイルで -j12 以上になっている
gecko/b2g/config/mozconfigs/macosx64_gecko/nightly:mk_add_options MOZ_MAKE_FLAGS="-j12"
gecko/browser/config/mozconfigs/macosx-universal/nightly:mk_add_options MOZ_MAKE_FLAGS="-j12"
gecko/browser/config/mozconfigs/macosx-universal/shark:mk_add_options MOZ_MAKE_FLAGS="-j12"
gecko/browser/config/mozconfigs/macosx32/debug:mk_add_options MOZ_MAKE_FLAGS="-j12"
gecko/browser/config/mozconfigs/macosx64/debug:mk_add_options MOZ_MAKE_FLAGS="-j12"
gecko/browser/config/mozconfigs/macosx64/debug-asan:mk_add_options MOZ_MAKE_FLAGS="-j12"
gonk-misc/Android.mk:GECKO_MAKE_FLAGS ?= -j16

ccache で止まる

デフォルトキャッシュサイズが 1GB しかないので大きくする。以前は 2GB 以上を推奨だったが今は 3GB 以上を推奨。

ccache --max-size 3GB

gcc version

gcc 4.6 をインストールしてないと警告が表示される。正しく動作するビルドができないので gcc 4.6 をインストールすること。homebrew であれば mozilla の用意している bootstrap-mac.sh スクリプトでパッチ入り gcc がインストールされる。

'M_PI' undeclared

Mac で Emulator ビルド時に external/qemu/Makefile.android ファイルで次のエラーが出る。gcc が標準以外のヘッダを含んでいないからで、次のパッチで修正すればよい

diff --git a/Makefile.android b/Makefile.android
index 195c061..61fd889 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -75,6 +75,7 @@ endif
 
 ifeq ($(HOST_OS),darwin)
     MY_CFLAGS += -mdynamic-no-pic -D_DARWIN_C_SOURCE=1
+    MY_CFLAGS += -DM_PI=3.14159265358979323846264338327950288   #/* B2G_fix: not finding M_PI constant */
 
     # When building on Leopard or above, we need to use the 10.4 SDK
     # or the generated binary will not run on Tiger.

Fake Java Warning

Mac 標準の Java だと次のようなメッセージが出るが問題ない。
see: https://github.com/mozilla-b2g/B2G/issues/61

You are attempting to build with the incorrect version
of java.
 
Your version is: Fake java 1.6.0 revisiion.
The correct version is: Java SE 1.6.

./repo sync できない

パッチをあてて書き換えているファイルがあると git pull できずに ./repo sync の途中で次のようにエラーを吐いて停止する。

error: gaia/: gaia.git checkout 5cb6a64dbf643e2c8774f4aadedd57a6e0d6dafb 
error: gonk-misc/: gonk-misc checkout 2f8c7d3546bda16b02a61b422786919875c19f15 

書き換えてるファイルを戻してから sync し再度パッチをあてること。

Heimdall flashing failed

Heimdall のバージョンによっては flash.sh 実行時に次のエラーが出ることがある。書き込みはできているのだが、スクリプトがそこで止まって気持ち悪いので古いバージョンをインストールする。

Heimdall flashing failed.
Restart your system if you've just installed heimdall.

起動ロゴ画面で止まる

  • mozilla のロゴとか Firefox OS のロゴとかだけがでて止まる場合、Gecko は起動しているが homescreen が正しく読み込めてない状態。gaia のインストールパスが間違っているとか、homescreen アプリが壊れてるとか、パーミッション管理の sqlite が壊れてるといった状況。
  • Galaxy S2 の場合は GAIA_INSTALL_PARENT (gaia のインストールパス)の変更が必要。
    • GAIA_INSTALL_PARENT?=/system/b2g
  • flash.sh gaia して起動しなくなった場合、gaia のリセットも必要なことがある。
cd gaia
make reset-gaia

Nexus S

  • WiFi の設定ができない場合は設定ファイルを直接編集する
  • /etc/wifi/wpa_supplicant.conf (/data/wifi/wpa_supplicant.conf かも?)
  • ファイルが存在しない場合に作ると root 所有で読めないことがある。その場合 adb shell で接続して chmod する。
update_config=1
ctrl_interface=wlan0
eapol_version=1
ap_scan=1
fast_reauth=1

network={
	ssid="<SSID>"
	psk="<PASSWORD>"
	key_mgmt=WPA-PSK
	priority=1
}

Galaxy S2

  • gaia のビルド前に gaia/Makefile の修正が必要。これをしないと Galaxy S2 は起動時に Gecko エンジンだけ読み込んだ黒画面で停止する。
-GAIA_INSTALL_PARENT?=/data/local
+GAIA_INSTALL_PARENT?=/system/b2g

Desktop Build

プロファイルを作成:

DEBUG=1 make profile

Hacking Gaia

Clone this wiki locally