おもちゃバコ

中身スカスカ♡

unity(jumbo)ビルドについてのメモ

こんにちは

unityビルド(別名: jumboビルド)についての備忘録です。
ゲームエンジンのUnityじゃないよ。


unityビルドとは

unityビルドとは,複数のソースコードを1つのソースコードにまとめ,翻訳単位毎に生成されるオブジェクトファイルの数を減らすことでコンパイルを高速化する手法です。
近頃はゲームエンジンのUnityと区別するためJumboビルドやUnifiedビルドとも呼ばれています。
(個人的にですが)日本語で検索するよりもunity build, jumbo build, unified buildなど,英語で検索した方がunityビルドに関する情報を手に入れやすい気がします。

austinmorlan.com
参考抄録 -> https://dl.acm.org/doi/10.1145/3302516.3307347

Unityビルドは,オープンソースではChromiumやGenntooLinux,ゲームエンジンではUnrealEngine4など,分散ビルドシステムなどの高速ビルド環境を持たない個人環境でコンパイルされることが想定されるプロジェクトで採用されているようです。

chromium.googlesource.com
packages.gentoo.org
historia.co.jp

また,Visual Studioでは,Visual Studio 2017以降でunityビルドに関するオプションが追加されていますね。

devblogs.microsoft.com


利用方法

unityビルドに含めたいソースコードをunityビルド専用のソースコード上でインクルードするだけです。
ポイントは.cppをインクルードすること。


メリット・デメリット

unityビルドのメリット・デメリットとして,以下の要素が考えられます。

メリット

  • オブジェクトファイルの生成にかかるオーバヘッドが減少する。
  • 複数の処理が1つのオブジェクトファイルにまとまるため,unityビルド未使用時よりリンクが高速化される。

デメリット

  • 1つのソースコード上に複数の処理が展開されるため,翻訳単位に含まれる処理を参照・使用できる。
  • 無名名前空間などに定義された変数・関数名が他のソースコードと衝突する可能性がある。
  • 1つのソースコードだけ処理を変更した場合も,翻訳単位に含まれるソースコード全てが再コンパイルされる。
  • 翻訳単位が大きい場合,コンパイル時に使用されるメモリが増大する。
  • 翻訳単位が1つになるため,分散ビルドの恩恵を受けにくい。

unityビルドはコンパイルやリンクなどが高速化されるメリットがありますが,翻訳単位を意識しないで活用すると軽微な修正のはずなのに却ってコンパイル時間が肥大化するなどのデメリットがあります。
特にunityビルドに含まれていればインクルードしていないソースコード中の処理が参照できるため,IntelliSenseの違反検知が正常に動作しないことで無意識にコーディング規約に違反してしまうなど,プロジェクト運用上のリスクが考えられます。

より詳しく知りたい方は各種参考URLを見てね。


まとめ

unityビルドを採用する場合は,メリットだけでなくデメリットにも注意したいですね。