==================================================================
Getting Started with the LLVM System using Microsoft Visual Studio
==================================================================


.. contents::
   :local:


Overview
========
Welcome to LLVM on Windows! This document only covers LLVM on Windows using
Visual Studio, not WSL, mingw or cygwin. In order to get started, you first need
to know some basic information.

LLVM is composed of many different projects. The first piece is the
LLVM suite. This contains all of the tools, libraries, and header files needed
to use LLVM. It contains an assembler, disassembler, bitcode analyzer, and
bitcode optimizer. It also contains basic regression tests that can be used to
test the LLVM tools and the Clang front end.

The second piece is the `Clang <https://clang.llvm.org/>`_ front end.  This
component compiles C, C++, Objective C, and Objective C++ code into LLVM
bitcode. Clang typically uses LLVM libraries to optimize the bitcode and emit
machine code. LLVM fully supports the COFF object file format, which is
compatible with all other existing Windows toolchains.

This document does not discuss other LLVM projects.


Requirements
============
Before you begin to use the LLVM system, review the requirements given
below.  This may save you some trouble by knowing ahead of time what hardware
and software you will need.

Hardware
--------
Any system that can adequately run Visual Studio 2019 is fine. The LLVM
source tree, including the git index, consumes approximately 3GB.
Object files, libraries, and executables consume approximately 5GB in
Release mode and much more in Debug mode. An SSD drive and >16GB RAM are
recommended.


Software
--------
You will need `Visual Studio <https://visualstudio.microsoft.com/>`_ 2019 or
later, with the latest Update installed. Visual Studio Community Edition
suffices.

You will also need the `CMake <http://www.cmake.org/>`_ build system since it
generates the project files you will use to build with. CMake is bundled with
Visual Studio 2019 so a separate installation is not required. If you do install
CMake separately, Visual Studio 2022 will require CMake Version 3.21 or later.

If you would like to run the LLVM tests you will need `Python
<http://www.python.org/>`_. Version 3.8 and newer are known to work. You can
install Python with Visual Studio 2019, from the Microsoft store or from
the `Python web site <http://www.python.org/>`_. We recommend the latter since it
allows you to adjust installation options.

You will need `Git for Windows <https://git-scm.com/>`_ with bash tools, too.
Git for Windows is also bundled with Visual Studio 2019.


Getting Started
===============
Here's the short story for getting up and running quickly with LLVM.
These instructions were tested with Visual Studio 2019 and Python 3.9.6:

1. Download and install `Visual Studio <https://visualstudio.microsoft.com/>`_.
2. In the Visual Studio installer, Workloads tab, select the
   **Desktop development with C++** workload. Under Individual components tab,
   select **Git for Windows**.
3. Complete the Visual Studio installation.
4. Download and install the latest `Python 3 release <http://www.python.org/>`_.
5. In the first install screen, select both **Install launcher for all users**
   and **Add Python to the PATH**. This will allow installing psutil for all
   users for the regression tests and make Python available from the command
   line.
6. In the second install screen, select (again) **Install for all users** and
   if you want to develop `lldb <https://lldb.llvm.org/>`_, selecting
   **Download debug binaries** is useful.
7. Complete the Python installation.
8. Run a "Developer Command Prompt for VS 2019" **as administrator**. This command
    prompt provides the correct path and environment variables to Visual Studio and
    the installed tools.
9. In the terminal window, type the commands:

   .. code-block:: bat

     c:
     cd \

  You may install the llvm sources in a location other than ``c:\llvm`` but do not
  install into a path containing spaces (e.g., ``c:\Documents and Settings\...``)
  as it will fail.

10. Register the Microsoft Debug Interface Access (DIA) DLLs:

    .. code-block:: bat

     regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\msdia140.dll"
     regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\amd64\msdia140.dll"

 The DIA library is required for LLVM PDB tests and
 `LLDB development <https://lldb.llvm.org/resources/build.html>`_.

11. Install psutil and obtain the LLVM source code:

    .. code-block:: bat

     pip install psutil
     git clone https://github.com/llvm/llvm-project.git llvm

 Instead of ``git clone`` you may download a compressed source distribution
 from the `releases page <https://github.com/llvm/llvm-project/releases>`_.
 Select the last link: ``Source code (zip)`` and unpack the downloaded file using
 Windows Explorer built-in zip support or any other unzip tool.

12. Finally, configure LLVM using CMake:

    .. code-block:: bat

       cmake -S llvm\llvm -B build -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64
       exit

   .. note::
     By default, the Visual Studio project files generated by CMake use the
     32-bit toolset. If you are developing on a 64-bit version of Windows and
     want to use the 64-bit toolset, pass the ``-Thost=x64`` flag when
     generating the Visual Studio solution. This requires CMake 3.8.0 or later.

     For Windows on Arm the equivalent is ``-Thost=ARM64``, but this the default
     for those hosts, so you do not have to use this option.

   ``LLVM_ENABLE_PROJECTS`` specifies any additional LLVM projects you want to
   build while ``LLVM_TARGETS_TO_BUILD`` selects the compiler targets. If
   ``LLVM_TARGETS_TO_BUILD`` is omitted by default all targets are built
   slowing compilation and using more disk space.
   See the :doc:`LLVM CMake guide <CMake>` for detailed information about
   how to configure the LLVM build.

   The ``cmake`` command line tool is bundled with Visual Studio but its GUI is
   not. You may install `CMake <http://www.cmake.org/>`_ to use its GUI to change
   CMake variables or modify the above command line.

   * Once CMake is installed then the simplest way is to just start the
     CMake GUI, select the directory where you have LLVM extracted to, and
     the default options should all be fine.  One option you may really
     want to change, regardless of anything else, might be the
     ``CMAKE_INSTALL_PREFIX`` setting to select a directory to INSTALL to
     once compiling is complete, although installation is not mandatory for
     using LLVM.  Another important option is ``LLVM_TARGETS_TO_BUILD``,
     which controls the LLVM target architectures that are included on the
     build.
   * CMake generates project files for all build types. To select a specific
     build type, use the Configuration manager from the VS IDE or the
     ``/property:Configuration`` command-line option when using MSBuild.

13. Start Visual Studio and select configuration:

   In the directory you created the project files will have an ``llvm.sln``
   file, just double-click on that to open Visual Studio. The default Visual
   Studio configuration is **Debug** which is slow and generates a huge amount
   of debug information on disk. For now, we recommend selecting **Release**
   configuration for the LLVM project which will build the fastest or
   **RelWithDebInfo** which is also several time larger than Release.
   Another technique is to build all of LLVM in Release mode and change
   compiler flags, disabling optimization and enabling debug information, only
   for specific libraries or source files you actually need to debug.

14. Test LLVM in Visual Studio:

   You can run LLVM tests by merely building the project "check-all". The test
   results will be shown in the VS output window. Once the build succeeds, you
   have verified a working LLVM development environment!

   You should not see any unexpected failures, but you will see many unsupported
   tests and expected failures:

   ::

    114>Testing Time: 1124.66s
    114>  Skipped          :    39
    114>  Unsupported      : 21649
    114>  Passed           : 51615
    114>  Expectedly Failed:    93
    ========== Build: 114 succeeded, 0 failed, 321 up-to-date, 0 skipped ==========``

Alternatives to manual installation
===================================
Instead of the steps above, to simplify the installation procedure you can use
`Chocolatey <https://chocolatey.org/>`_ as package manager.
After the `installation <https://chocolatey.org/install>`_ of Chocolatey,
run these commands in an admin shell to install the required tools:

.. code-block:: bat

   choco install -y git cmake python3
   pip3 install psutil

There is also a Windows
`Dockerfile <https://github.com/llvm/llvm-zorg/blob/main/buildbot/google/docker/windows-base-vscode2019/Dockerfile>`_
with the entire build toolchain. This can be used to test the build with a
toolchain different from your host installation or to create build servers.

Next steps
==========
1. Read the documentation.
2. Seriously, read the documentation.
3. Remember that you were warned twice about reading the documentation.

Test LLVM on the command line:
------------------------------
The LLVM tests can be run by changing directory to the llvm source
directory and running:

.. code-block:: bat

  c:\llvm> python ..\build\Release\bin\llvm-lit.py llvm\test

This example assumes that Python is in your ``PATH`` variable, which would be
after **Add Python to the PATH** was selected during Python installation.
If you had opened a command window prior to Python installation, you would
have to close and reopen it to get the updated ``PATH``.

A specific test or test directory can be run with:

.. code-block:: bat

  c:\llvm> python ..\build\Release\bin\llvm-lit.py llvm\test\Transforms\Util

Build the LLVM Suite:
---------------------
* The projects may still be built individually, but to build them all do
  not just select all of them in batch build (as some are meant as
  configuration projects), but rather select and build just the
  ``ALL_BUILD`` project to build everything, or the ``INSTALL`` project,
  which first builds the ``ALL_BUILD`` project, then installs the LLVM
  headers, libs, and other useful things to the directory set by the
  ``CMAKE_INSTALL_PREFIX`` setting when you first configured CMake.
* The Fibonacci project is a sample program that uses the JIT. Modify the
  project's debugging properties to provide a numeric command-line argument
  or run it from the command line.  The program will print the
  corresponding Fibonacci value.


Links
=====
This document is just an **introduction** to how to use LLVM to do some simple
things... there are many more interesting and complicated things that you can
do that aren't documented here (but we'll gladly accept a patch if you want to
write something up!).  For more information about LLVM, check out:

* `LLVM homepage <https://llvm.org/>`_
* `LLVM doxygen tree <https://llvm.org/doxygen/>`_
* Additional information about the LLVM directory structure and tool chain
  can be found on the main :doc:`GettingStarted` page.
* If you are having problems building or using LLVM, or if you have any other
  general questions about LLVM, please consult the
  :doc:`Frequently Asked Questions <FAQ>` page.
