27
27

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.

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

Last updated at Posted at 2015-03-08

以前こちらの記事にて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プロセスでのコンパイルになっていまいました。

cocos_compile_1.png

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

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

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

cocos_compile.png

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


cocos compile -p android -j 7

ndk_build_j7.png

Eclipse の場合

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

eclipse_build.png

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

build_native_help.png

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


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

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

27
27
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
27
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?