| # Integrated Distributed ThinLTO (DTLTO) | |
| Integrated Distributed ThinLTO (DTLTO) enables the distribution of backend | |
| ThinLTO compilations via external distribution systems, such as Incredibuild, | |
| during the traditional link step. | |
| The implementation is documented here: <https://llvm.org/docs/DTLTO.html>. | |
| Currently, DTLTO is only supported in ELF and COFF LLD. | |
| ## ELF LLD | |
| The command-line interface is as follows: | |
| - `--thinlto-distributor=<path>` | |
| Specifies the file to execute as the distributor process. If specified, | |
| ThinLTO backend compilations will be distributed. | |
| - `--thinlto-remote-compiler=<path>` | |
| Specifies the path to the compiler that the distributor process will use for | |
| backend compilations. The compiler invoked must match the version of LLD. | |
| - `--thinlto-distributor-arg=<arg>` | |
| Specifies `<arg>` on the command line when invoking the distributor. | |
| Can be specified multiple times. | |
| - `--thinlto-remote-compiler-prepend-arg=<arg>` | |
| Prepends `<arg>` to the remote compiler's command line. | |
| Can be specified multiple times. | |
| - `--thinlto-remote-compiler-arg=<arg>` | |
| Appends `<arg>` to the remote compiler's command line. | |
| Can be specified multiple times. | |
| Options that introduce extra input/output files may cause miscompilation if | |
| the distribution system does not automatically handle pushing/fetching them to | |
| remote nodes. In such cases, configure the distributor - possibly using | |
| `--thinlto-distributor-arg=` - to manage these dependencies. See the | |
| distributor documentation for details. | |
| Some LLD LTO options (e.g., `--lto-sample-profile=<file>`) are supported. | |
| Currently, other options are silently accepted but do not have the intended | |
| effect. Support for such options will be expanded in the future. | |
| ## COFF LLD | |
| The command-line interface is as follows: | |
| - `/thinlto-distributor:<path>` | |
| Specifies the file to execute as the distributor process. If specified, | |
| ThinLTO backend compilations will be distributed. | |
| - `/thinlto-remote-compiler:<path>` | |
| Specifies the path to the compiler that the distributor process will use for | |
| backend compilations. The compiler invoked must match the version of LLD. | |
| - `/thinlto-distributor-arg:<arg>` | |
| Specifies `<arg>` on the command line when invoking the distributor. | |
| Can be specified multiple times. | |
| - `/thinlto-remote-compiler-prepend-arg:<arg>` | |
| Prepends `<arg>` to the remote compiler's command line. | |
| Can be specified multiple times. | |
| - `/thinlto-remote-compiler-arg:<arg>` | |
| Appends `<arg>` to the remote compiler's command line. | |
| Can be specified multiple times. | |
| Options that introduce extra input/output files may cause miscompilation if | |
| the distribution system does not automatically handle pushing/fetching them to | |
| remote nodes. In such cases, configure the distributor - possibly using | |
| `/thinlto-distributor-arg:` - to manage these dependencies. See the | |
| distributor documentation for details. | |
| Some LLD LTO options (e.g., `/lto-sample-profile:<file>`) are supported. | |
| Currently, other options are silently accepted but do not have the intended | |
| effect. Support for such options could be expanded in the future. | |
| Currently, there is no DTLTO command line interface supplied for `clang-cl`, | |
| as users are expected to invoke LLD directly. | |