どうしてまた
デスクトップPCが仮想化で資源分断化->メモリ不足->2GBのUbuntu VMでは、Android(AOSP)のコンパイルが失敗…(swapを用意しても有効時間内にゴールしなかった)。
そこで、手元のMacBook Proの8GBならゴールするのでは。持ち歩けるし、SSDで速そうだし、El Capitanにしたら、なんとなく快調だし。
でも、本家情報は、Yosemite + Xcode 4.5.2で止まっている。そこで…
用意したもの
- Mac: MacBook Pro (Retina, Mid 2012) Core i7 8GB
- OS: OS X El Capitan 10.11.2
- アンチウイルスソフト: Sophos Home最新版
- Xcode: Version 7.2 (7C68), Command_Line_Tools_OS_X_10.11_for_Xcode_7.2.dmg
- MacPorts: MacPorts-2.3.4-10.11-ElCapitan.pkg
- AOSP: android-6.0.1_r3
種明かし
- MacPortsで入れるパッケージを手抜きしてみた
- アンチウイルスソフトはOffにしておく
- Makefileにバージョン追記
- .imgはできたが、実は実機での動作未確認…動かなかったらすいません
手順詳細
まずは、本家を参照。
ファイルシステム
ファイルシステムの生成
残念ながら、ベースのOS Xのファイルシステムが「大文字/小文字を区別しない」なので、本家の通り、
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
で、大文字/小文字を区別するdmgを生成。
生成された~/android.dmg.sparseimageは肥大化するので、あらかじめTime Machine対象外に設定。
ファイルシステムのマウント
本家のシェルコマンドは面倒なので、~/android.dmg.sparseimageをダブルクリックしたら、mountされた。
…が、ボリューム名がuntitledだったので、GUIでandroidに変更。
すると、/Volumes/android/からアクセス可能になった。
ツールの導入
- JDK: 現状最新のjdk-7u80-macosx-x64.dmgをダブルクリックでインストール
- Xcode: App Storeからインストール
- Command Line Tools: Developerからダウンロードしてインストール
- Xcode: 一度起動して、ライセンスに同意しておく
- MacPorts: 現状最新のMacPorts-2.3.4-10.11-ElCapitan.pkgをダブルクリックでインストール
- cache: とりあえず使わなかった
- しまった、本家を読み返していて、
ulimit -S -n 1024
し忘れたことに気づく…本来の能力よりコンパイルに時間かかったかも
MacPortsの設定
本家にあるパスの設定は、MacPortsのインストーラーが~/.profileによしなに設定してくれた。
問題はどのパッケージを入れるかだが、本家の下を見ると、gmakeの3.82を3.81にダウングレード必要とある。ところが、Xcodeにもgmakeが入っており、make --version
で見ると、GNU Make 3.81
と出て、ラッキー。gitもXcodeで入った模様。なので、パッケージは、gmakeとgitを除いた、
$ POSIXLY_CORRECT=1 sudo port install libsdl gnupg
としてみた。
ソースの入手
repo syncしたら、40GBに収まらなかった? orz
別PCでrepo syncして、.repoを除いて持ってきた。OS Xの/Volumes/android/以外で、repo syncしても良いかもしれない。
持ってきたものを、/Volumes/android/に展開。
Makefileの改造
本家情報は、Xcode 4.5.2で止まっている。ソースも、少なくとも今回用意したXcodeには対応していない。そこで、build/core/combo/mac_version.mkを改造。
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/の下が、MacOSX10.11.sdkだったため、
mac_dk_versions_supported
に、10.11
を足してみる。適当すぎチャレンジ。
mac_sdk_versions_supported := 10.6 10.7 10.8 10.9 10.11
コンパイル
Ubuntuと同様に、source build/envsetup.sh
して、lunch
なりして、make -j4
とか。Hyper Threading推しなら-j8
か。
当初、Sophosを切っておかなかったら、最終段でコンパイルエラー。本家情報通り、切ってやったら、なんかゴールしたっぽい。(下記時間は、コンパイルエラー後の再makeからの時間なので気にしないで下さい)
#### make completed successfully (13:18 (mm:ss)) ####
$ ls out/target/product/deb/*.img
out/target/product/deb/boot.img
out/target/product/deb/cache.img
out/target/product/deb/ramdisk-recovery.img
out/target/product/deb/ramdisk.img
out/target/product/deb/recovery.img
out/target/product/deb/system.img
out/target/product/deb/userdata.img
考察
疑問
- クロスコンパイラは、prebuild/のものが使われる? (未調査)
- 依存するhost側のツールは、Xcode Command Line Toolsのもので結構まかなえている? (未調査)
- MacPortsはlibsdlとgnupg入れるのに相当いろんなもの引っ張ってくるのはなんで? ソースからコンパイルするから? (未調査)
- libsdlって何に使うの? (未調査)
- っていうか、実機で動くの? (未調査) すいません!
.dmg越しの速度
Blackmagic Disk Speed Testだと、
- ネイティブ(OS X 拡張(ジャーナリング、暗号化)): WRITE=417.1MB/s, READD=448.5MB/s
- .dmg(OSX 拡張(大文字/小文字を区別、ジャーナリング)): WRITE=221.4MB/s, READ=332.7MB/s
これがどの程度影響するのかな。あんまり影響ない気もするけど、思ったよりは時間かかった。ウィルスチェック切り忘れたり、ulimitし忘れたり、-j4でやったり、-j8でやったり、途中でエラー起こったりで、コンパイル時間はちゃんと計れていません。
コンパイル後の.dmgの容量
32GB。
参考文献
欲しいもの
Thunderbolt外付けSSD(PCIe接続)