Xcode で設定できる Compilation Mode
はProject のビルド方法を、速度を最適化する必要があるか、それらの最適化をスキップする必要があるかを設定することができます。簡潔に言い換えると、変更されたファイルのみをコンパイルするか、全体をコンパイルするかを選択することができるとも表現できます。
Compilation Mode の種類
Compilation Mode には主に下記の2つが存在します。
Primary-file
primary-file
モードでは、driver は実行する必要のある作業を frontend processes に分割し、部分的な結果を出力し、全ての frontend が終了した時にそれらの結果をマージします。このモードには下記の2つのサブモードが存在します。
single-file sub-mode
- ファイルごとに1つの frontend job を実行し、各 job には1つの primary があります。
batch sub-mode
- CPU ごとに1つの frontend job を実行し、モジュールのファイルと同じサイズの "batch" を primary として識別します。
Xcode 内で Incremental
を選択した場合は、こちらのモードが適用されます。
whole-module
whole-module optimization (WMO) mode
では、driver は、モジュール全体に対して1つの frontend job を実行します。その frontend は、モジュールないの全てのファイルを一回に読み取り、それらを全て一度にコンパイルします。
最後に
Driver
や Frontend jobs
とはなんぞやという方は下記の記事がわかりやすくまとまっているのでお勧めです。
参考
- https://github.com/apple/swift/blob/main/docs/CompilerPerformance.md#compilation-modes
- https://medium.com/xcblog/wwdc18-modern-tips-for-optimising-swift-build-time-in-xcode-10-a81de3a9be6d#:~:text=Compilation%20Mode%20Vs%20Optimization%20Level&text=In%20Xcode%2010%2C%20by%20default,file%20during%20the%20build%20process.
- https://qiita.com/shiz/items/b8d5126210de736d7986