| .. raw:: html |
| |
| <style type="text/css"> |
| .none { background-color: #FFCCCC } |
| .partial { background-color: #FFFF99 } |
| .good { background-color: #CCFF99 } |
| </style> |
| |
| .. role:: none |
| .. role:: partial |
| .. role:: good |
| |
| =============== |
| Windows support |
| =============== |
| |
| LLD supports Windows operating system. When invoked as ``lld-link.exe`` or with |
| ``-flavor link``, the driver for Windows operating system is used to parse |
| command line options, and it drives further linking processes. LLD accepts |
| almost all command line options that the linker shipped with Microsoft Visual |
| C++ (link.exe) supports. |
| |
| The current status is that LLD can link itself on Windows x86/x64 |
| using Visual C++ 2013 as the compiler. |
| |
| Development status |
| ================== |
| |
| Driver |
| :good:`Mostly done`. Some exotic command line options that are not usually |
| used for application develompent, such as ``/DRIVER``, are not supported. |
| |
| Linking against DLL |
| :good:`Done`. LLD can read import libraries needed to link against DLL. Both |
| export-by-name and export-by-ordinal are supported. |
| |
| Linking against static library |
| :good:`Done`. The format of static library (.lib) on Windows is actually the |
| same as on Unix (.a). LLD can read it. |
| |
| Creating DLL |
| :good:`Done`. LLD creates a DLL if ``/DLL`` option is given. Exported |
| functions can be specified either via command line (``/EXPORT``) or via |
| module-definition file (.def). Both export-by-name and export-by-ordinal are |
| supported. |
| |
| Windows resource files support |
| :good:`Done`. If an ``.res`` file is given, LLD converts the file to a COFF |
| file using LLVM's Object library. |
| |
| Safe Structured Exception Handler (SEH) |
| :good:`Done` for both x86 and x64. |
| |
| Module-definition file |
| :partial:`Partially done`. LLD currently recognizes these directives: |
| ``EXPORTS``, ``HEAPSIZE``, ``STACKSIZE``, ``NAME``, and ``VERSION``. |
| |
| Debug info |
| :good:`Done`. LLD can emit PDBs that are at parity with those generated by |
| link.exe. However, LLD does not support /DEBUG:FASTLINK. |
| |
| |
| Downloading LLD |
| =============== |
| |
| The Windows version of LLD is included in the `pre-built binaries of LLVM's |
| releases <https://releases.llvm.org/download.html>`_ and in the `LLVM Snapshot |
| Builds <https://llvm.org/builds/>`_. |
| |
| Building LLD |
| ============ |
| |
| Using Visual Studio IDE/MSBuild |
| ------------------------------- |
| |
| 1. Check out LLVM and LLD from the LLVM SVN repository (or Git mirror), |
| #. run ``cmake -G "Visual Studio 12" <llvm-source-dir>`` from VS command prompt, |
| #. open LLVM.sln with Visual Studio, and |
| #. build ``lld`` target in ``lld executables`` folder |
| |
| Alternatively, you can use msbuild if you don't like to work in an IDE:: |
| |
| msbuild LLVM.sln /m /target:"lld executables\lld" |
| |
| MSBuild.exe had been shipped as a component of the .NET framework, but since |
| 2013 it's part of Visual Studio. You can find it at "C:\\Program Files |
| (x86)\\msbuild". |
| |
| You can build LLD as a 64 bit application. To do that, open VS2013 x64 command |
| prompt and run cmake for "Visual Studio 12 Win64" target. |
| |
| Using Ninja |
| ----------- |
| |
| 1. Check out LLVM and LLD from the LLVM SVN repository (or Git mirror), |
| #. run ``cmake -G ninja <llvm-source-dir>`` from VS command prompt, |
| #. run ``ninja lld`` |