Mach-O LLD Port =============== LLD is a linker from the LLVM project that is a drop-in replacement for system linkers and runs much faster than them. It also provides features that are useful for toolchain developers. This document will describe the Mach-O port. Features -------- - LLD is a drop-in replacement for Apple's Mach-O linker, ld64, that accepts the same command line arguments. - LLD is very fast. When you link a large program on a multicore machine, you can expect that LLD runs more than twice as fast as the ld64 linker. Download -------- LLD is available as a pre-built binary by going to the `latest release `_, downloading the appropriate bundle (``clang+llvm---.tar.xz``), decompressing it, and locating the binary at ``bin/ld64.lld``. Note that if ``ld64.lld`` is moved out of ``bin``, it must still be accompanied by its sibling file ``lld``, as ``ld64.lld`` is technically a symlink to ``lld``. Build ----- The easiest way to build LLD is to check out the entire LLVM projects/sub-projects from a git mirror and build that tree. You need ``cmake`` and of course a C++ compiler. .. code-block:: console $ git clone https://github.com/llvm/llvm-project llvm-project $ mkdir build $ cd build $ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS='lld' ../llvm-project/llvm $ ninja check-lld-macho Then you can find output binary at ``build/bin/ld64.lld``. Note that if ``ld64.lld`` is moved out of ``bin``, it must still be accompanied by its sibling file ``lld``, as ``ld64.lld`` is technically a symlink to ``lld``. Using LLD --------- LLD can be used by adding ``-fuse-ld=/path/to/ld64.lld`` to the linker flags. For Xcode, this can be done by adding it to "Other linker flags" in the build settings. For Bazel, this can be done with ``--linkopt`` or with `rules_apple_linker `_. .. seealso:: :doc:`ld64-vs-lld` has more info on the differences between the two linkers. .. toctree:: :hidden: ld64-vs-lld