blob: c4c338a0fba11ae6f9ce81c457168377c814a356 [file] [log] [blame]
Rui Ueyama3e373262014-03-05 22:35:32 +00001.. raw:: html
2
3 <style type="text/css">
4 .none { background-color: #FFCCCC }
5 .partial { background-color: #FFFF99 }
6 .good { background-color: #CCFF99 }
7 </style>
8
9.. role:: none
10.. role:: partial
11.. role:: good
12
13===============
14Windows support
15===============
16
Rui Ueyama406c7d92015-09-03 17:01:18 +000017LLD supports Windows operating system. When invoked as ``lld-link.exe`` or with
Rui Ueyama3e373262014-03-05 22:35:32 +000018``-flavor link``, the driver for Windows operating system is used to parse
19command line options, and it drives further linking processes. LLD accepts
20almost all command line options that the linker shipped with Microsoft Visual
21C++ (link.exe) supports.
22
Rui Ueyama406c7d92015-09-03 17:01:18 +000023The current status is that LLD can link itself on Windows x86/x64
24using Visual C++ 2013 as the compiler.
Rui Ueyama3e373262014-03-05 22:35:32 +000025
26Development status
27==================
28
29Driver
30 :good:`Mostly done`. Some exotic command line options that are not usually
31 used for application develompent, such as ``/DRIVER``, are not supported.
32 Options for Windows 8 app store are not recognized too
33 (e.g. ``/APPCONTAINER``).
34
35Linking against DLL
36 :good:`Done`. LLD can read import libraries needed to link against DLL. Both
37 export-by-name and export-by-ordinal are supported.
38
39Linking against static library
40 :good:`Done`. The format of static library (.lib) on Windows is actually the
41 same as on Unix (.a). LLD can read it.
42
43Creating DLL
44 :good:`Done`. LLD creates a DLL if ``/DLL`` option is given. Exported
45 functions can be specified either via command line (``/EXPORT``) or via
46 module-definition file (.def). Both export-by-name and export-by-ordinal are
47 supported. LLD uses Microsoft ``lib.exe`` tool to create an import library
48 file.
49
50Windows resource files support
51 :good:`Done`. If an ``.rc`` file is given, LLD converts the file to a COFF
52 file using some external commands and link it. Specifically, ``rc.exe`` is
53 used to compile a resource file (.rc) to a compiled resource (.res)
54 file. ``rescvt.exe`` is then used to convert a compiled resource file to a
55 COFF object file section. Both tools are shipped with MSVC.
56
57Safe Structured Exception Handler (SEH)
Rui Ueyama406c7d92015-09-03 17:01:18 +000058 :good:`Done` for both x86 and x64.
Rui Ueyama3e373262014-03-05 22:35:32 +000059
60Module-definition file
61 :partial:`Partially done`. LLD currently recognizes these directives:
62 ``EXPORTS``, ``HEAPSIZE``, ``STACKSIZE``, ``NAME``, and ``VERSION``.
63
Rui Ueyama3e373262014-03-05 22:35:32 +000064Debug info
65 :none:`No progress has been made`. Microsoft linker can interpret the CodeGen
66 debug info (old-style debug info) and PDB to emit an .pdb file. LLD doesn't
67 support neither.
68
69
Rui Ueyamadcd25e32014-03-11 22:40:43 +000070Building LLD
71============
72
Rui Ueyama6ab29442014-03-13 05:48:46 +000073Using Visual Studio IDE/MSBuild
Dan Liewce5377a2014-08-06 14:11:47 +000074-------------------------------
Rui Ueyama6ab29442014-03-13 05:48:46 +000075
Rui Ueyamadcd25e32014-03-11 22:40:43 +0000761. Check out LLVM and LLD from the LLVM SVN repository (or Git mirror),
Rui Ueyama6ab29442014-03-13 05:48:46 +000077#. run ``cmake -G "Visual Studio 12" <llvm-source-dir>`` from VS command prompt,
Rui Ueyamadcd25e32014-03-11 22:40:43 +000078#. open LLVM.sln with Visual Studio, and
79#. build ``lld`` target in ``lld executables`` folder
80
81Alternatively, you can use msbuild if you don't like to work in an IDE::
82
83 msbuild LLVM.sln /m /target:"lld executables\lld"
Rui Ueyama406c7d92015-09-03 17:01:18 +000084
Rui Ueyamadcd25e32014-03-11 22:40:43 +000085MSBuild.exe had been shipped as a component of the .NET framework, but since
862013 it's part of Visual Studio. You can find it at "C:\\Program Files
87(x86)\\msbuild".
88
Rui Ueyama21f97dd2014-03-12 23:40:18 +000089You can build LLD as a 64 bit application. To do that, open VS2013 x64 command
90prompt and run cmake for "Visual Studio 12 Win64" target.
91
Rui Ueyama6ab29442014-03-13 05:48:46 +000092Using Ninja
93-----------
94
951. Check out LLVM and LLD from the LLVM SVN repository (or Git mirror),
96#. run ``cmake -G ninja <llvm-source-dir>`` from VS command prompt,
97#. run ``ninja lld``