4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OS X El Capitan + Xcode 7でAOSPをコンパイルする

Last updated at Posted at 2015-12-28

どうしてまた

デスクトップ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を足してみる。適当すぎチャレンジ。

build/core/combo/mac_version.mk
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。

参考文献

  • 後になって知ったのですが、こちらのほうがはるかに先で詳しく正確な記事でした。大変失礼しました。
  • こちらの問題は出なかったんですよね…。Xcodeのバージョンが違うから?

欲しいもの

Thunderbolt外付けSSD(PCIe接続)

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?