Cocos2d-x 3系で Android の NDKビルドをパラレルに行ってビルド時間を短縮する


以前こちらの記事にて2系の場合のやり方を書きました。
http://qiita.com/d_nishiyama85/items/945365ad6385c0f81f9f

Cocos2d-x 3系では上の記事では対応できないので今回改めて書いてみます。動作確認は 3.2 で行なっています。

やりたいこと

要はC++のソースをコンパイルするコマンドである、ndk-build に並列するプロセスの数を nkd-build -j 7 のようにオプションとして渡せればよい、というお話です。なお、指定する数をマシンのコア数以上にしてしまうとコンパイルに全てのCPUリソースを使ってしまうため、マシンがかなり重くなってしまい、OSの操作自体もやりにくくなってしまいます。指定する数は最大でも (コア数 - 1) がオススメです。

cocos コマンドの場合

Cocos2d-x の3系において Android のビルドはコマンドラインでは cocos コマンドで行うと思います:

cocos compile -p android

このcocosコマンドには、使っているマシンのCPUのコア数を取得してこのオプションを自動的に追加する機能が組み込まれているのですが、 python の外部ライブラリ numpy に依存しているため、必ずしも動くとは限りません。
わたしの環境 (OSX, Mavericks)では numpy が入っていなかったのでコア数を取得できず、1プロセスでのコンパイルになっていまいました。

対策として、numpy をインストールすればいいのですが、諸事情でできない or したくない、という人は以下のようにしましょう。

並列数をオプションとして明示的に渡す

cocos compile -h でヘルプを見ると、-j N または --jobs N (Nは数値)で並列数を渡すことができる事がわかります:

これで numpy がなくても並列ビルドをしてくれます:


cocos compile -p android -j 7

Eclipse の場合

Eclipse の実行ボタンでビルドする場合には cocos コマンドとは別のビルドスクリプトが使われます。
Eclipse のプロジェクトを右クリック → プロパティー → C/C++ ビルド → ビルダー設定 にビルドコマンドが書いてあります:

これを見ると、proj.android のは以下にある build_native.py というスクリプトが使われるようです。
このスクリプトのヘルプを見ると、-n というオプションに続けて書けば ndk-build にオプションを渡せるようです:

したがって、Eclipse のビルドコマンドの設定に -n -j7 などと追加すればよいことになります。(Eclipseのスクリーンショット参照)


python ${ProjDirPath}/build_native.py -b debug -n -j7

追記: build_native.py のオプションに関しては -j と 7 の間にスペースを入れると 7 が認識されず、プロセスが無限に生成されてビルドが暴走する、という状況になっていました。修正します。