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.
