ユーザ用ツール

サイト用ツール


ue4:buildsystem

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ue4:buildsystem [2021/12/21 13:56] – [Build.cs の読み込み] ogaue4:buildsystem [2022/03/17 21:58] (現在) – [Unity Build] oga
行 4: 行 4:
 その中心になるのが C# で記述された UnrealBuildTool になります。 その中心になるのが C# で記述された UnrealBuildTool になります。
  
-各 Module の Build file (Makefile 相当) も *.Build.cs と言う名前の C# で書かれています。+各 Module のビルド定義 (Makefile 相当) も *.Build.cs と言う名前のファイルで C# 言語で書かれています。
  
 主に2つの機能があります。 主に2つの機能があります。
行 11: 行 11:
   * ビルドの実行   * ビルドの実行
  
-Project File の生成は Debug など IDE を利用するためのものあって、ビルドそのものには利用していません。 +IDE 向けに生成する Project File はデバッグが目的す。 
-ビルド自体は UnrealBuildTool が行います。+IDE Native のビルドツールは使われおらず、ビルドそのものは UnrealBuildTool が行っています。
  
  
行 38: 行 38:
 ^ Executor           ^ 説明    ^ ^ Executor           ^ 説明    ^
 | LocalExecutor      | Network を使わずに PC の Local CPU だけでビルドします。並列ビルドしますが、HT が有効な場合すべての Thread が使われないという問題があります。設定で変更可能ですが、デフォルトだと本来の速度よりもビルド速度が落ちているので注意。今はほとんど使われていません。  | | LocalExecutor      | Network を使わずに PC の Local CPU だけでビルドします。並列ビルドしますが、HT が有効な場合すべての Thread が使われないという問題があります。設定で変更可能ですが、デフォルトだと本来の速度よりもビルド速度が落ちているので注意。今はほとんど使われていません。  |
-| ParallelExecutor   | Local CPU 用の新しい Executor で、LocalExecutor よりも高速です。設定不要ですべての CPU core とすべての Thread を使います。  |+| ParallelExecutor   | Local CPU 用の新しい Executor で、LocalExecutor よりも高速です。HyperThreading 対応 CPU 場合、すべてのスレッドを使用するには BuildConfiguration.xml への設定が必要です。  |
 | XGE                | 有料の分散ビルドツール IncrediBuild を install している場合に使用します。CPU/Thread 数に応じたライセンスが必要です。    | | XGE                | 有料の分散ビルドツール IncrediBuild を install している場合に使用します。CPU/Thread 数に応じたライセンスが必要です。    |
 | HybridExecutor     | XGE と同じですが、分散ビルドと同時に Local の CPU も最大限活用します。IncrediBuild のライセンスよりも CPU core 数が多い場合に有効かもしれません。未確認   | | HybridExecutor     | XGE と同じですが、分散ビルドと同時に Local の CPU も最大限活用します。IncrediBuild のライセンスよりも CPU core 数が多い場合に有効かもしれません。未確認   |
 | SNDBS              | SONY の分散ビルドツール SN-DBS を install している場合に使用します。     | | SNDBS              | SONY の分散ビルドツール SN-DBS を install している場合に使用します。     |
 | Distcc             | macOS 上で分散ビルドツールの Distcc を用いる場合にこの Executor を使います。   | | Distcc             | macOS 上で分散ビルドツールの Distcc を用いる場合にこの Executor を使います。   |
 +| FASTBuild          | オープンソースの分散ビルドツール FASTbuild を使用する場合に用いられます。   |
  
  
行 104: 行 105:
 ==== Unity Build ==== ==== Unity Build ====
  
-UnrealBuildTool はデフォルトで UnityBuild を行います。設定で無効化することができます。+UnrealBuildTool はデフォルトで UnityBuild を行います。BuildConfiguration.xml の設定で無効化することができます。
  
 UnityBuild を有効にすると複数のソースコードを単一のファイルにまとめてコンパイルを行います。ビルド時間を大幅に短縮することができます。 UnityBuild を有効にすると複数のソースコードを単一のファイルにまとめてコンパイルを行います。ビルド時間を大幅に短縮することができます。
行 125: 行 126:
 他のファイルで #include されているかもしれないからです。 他のファイルで #include されているかもしれないからです。
 Unity Build が行われる単位は変化するので、以前はビルドが通っていても再ビルドしたらエラーが出ていて戸惑うこともあります。 Unity Build が行われる単位は変化するので、以前はビルドが通っていても再ビルドしたらエラーが出ていて戸惑うこともあります。
 +
 +Unity Build を無効化してビルドが通るかテストしたい場合は、ビルド時のコマンドラインオプションに -DisableUnity を指定します。
 +(VisualStudio から呼ばれている Build.bat のコマンドラインオプションに指定できます。)
 +
 +または BuildConfiguration.xml でも設定可能です。
 +
 +
  
  
行 133: 行 141:
  
  
 +=== UnityBuild の各種設定 ===
 +
 +UnityBuild はビルド時間を短縮しますが、ビルドするソースコードが肥大しメモリ消費が増えます。
 +特にマルチコア・マルチスレッド CPU で並列ビルドを行う場合はメモリがあふれる可能性があります。
 +
 +コマンドラインオプションではなく、BuildConfigration.xml で無効化したい場合は bUseUnityBuild を使います。
 +
 +また、Unity 化する場合のソースコードのサイズ制限の目安を NumIncludedBytesPerUnityCPP (byte数) で指定できます。デフォルトは 384KB (393216) です。
 +RAM 容量が少なくメモリ不足が発生する場合はサイズを減らしてみてください。
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 +    <BuildConfiguration>
 +        <bUseUnityBuild>true</bUseUnityBuild>
 +        <NumIncludedBytesPerUnityCPP>393216</NumIncludedBytesPerUnityCPP>
 +    </BuildConfiguration>
 +</Configuration>
 +</code>
 +
 +
 +
 +
 +
 +==== ビルド速度の調整 ====
 +
 +
 +=== ParallelExecutor のビルドスレッド数 ===
 +
 +ParallelExecutor はすべてのスレッドを使用するとは限りません。
 +最大速度でビルドを行いたい場合は BuildConfiguration.xml への設定が必要です。
 +
 +例えば物理コアが 6個である場合はデフォルトで 6スレッドでビルドが行われます。
 +HyperThreading の 12スレッド分すべて使ってビルドを行いたい場合は、下記のように倍率として 2.0 を設定します。
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <ParallelExecutor>
 + <ProcessorCountMultiplier>2.0</ProcessorCountMultiplier>
 + </ParallelExecutor>
 +</Configuration>
 +</code>
 +
 +ただし RAM 容量が少ない場合は指定した数だけビルドを走らせることができません。
 +ParallelExecutor は RAM の空き容量によって最大スレッド数を制限しています。
 +
 +UnityBuild は非常にメモリを消費するので、RAM が少ない場合はむやみにビルドスレッド数を増やさないようにしてください。
 +SN-DBS や FASTBuild では RAM 容量に関係なくビルドスレッド数を増やすことができますが、増やしすぎるとスラッシングが発生しビルド速度が著しく低下します。
  
 +RAM が 32GB の場合は、最大でも 8~12 スレッド程度にとどめておくことをおすすめします。
  
  
行 148: 行 206:
  
  
-上記のように <nowiki>C++</nowki> のプリプロセッサの前に走るので、UHT が解析するコマンドにはブロックコメントや #if ~、define マクロが意味を持ちません。+上記のように <nowiki>C++</nowiki> のプリプロセッサの前に走るので、UHT が解析するコマンドにはブロックコメントや #if ~、define マクロが意味を持ちません。
 例えば下記の UFUNCTION() はどちらも <nowiki>C/C++</nowiki> 言語的にはコメントアウトされていますが UHT では有効になります。#if ~ #endif block でも同じです。 例えば下記の UFUNCTION() はどちらも <nowiki>C/C++</nowiki> 言語的にはコメントアウトされていますが UHT では有効になります。#if ~ #endif block でも同じです。
  
行 283: 行 341:
 もちろん対応していない Compiler を使うと Engine のビルドではエラーが出ます。 もちろん対応していない Compiler を使うと Engine のビルドではエラーが出ます。
 特定の Module で clang が必要になった場合に、build.cs 内部で指定するのが本来の使い方だと思われます。 特定の Module で clang が必要になった場合に、build.cs 内部で指定するのが本来の使い方だと思われます。
 +
 +
 +==== Windows SDK の選択 ====
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <WindowsPlatform>
 + <WindowsSdkVersion>10.0.18362.0</WindowsSdkVersion>
 + </WindowsPlatform>
 +</Configuration>
 +</code>
 +
 +
 +
 +
 +==== 有効な分散ビルドの指定 ====
 +
 +<code xml>
 +<?xml version='1.0' encoding='utf-8'?>
 +<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 + <BuildConfiguration>
 + <bAllowXGE>false</bAllowXGE>
 + <bAllowSNDBS>false</bAllowSNDBS>
 + <bAllowFASTBuild>true</bAllowFASTBuild>
 + </BuildConfiguration>
 +</Configuration>
 +</code>
 +
 +
 +| bAllowXGE     | IncrediBuild   |
 +| bAllowSNDBS   | SN-DBS         |
 +| bAllowFASTBuild  | FASTBuild   |
 +
  
  
ue4/buildsystem.txt · 最終更新: 2022/03/17 21:58 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki