123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- ==================================================================
- 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 mingw or cygwin. In order to get started, you first need to
- know some basic information.
- There are many different projects that compose LLVM. 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 <http://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.
- The last major part of LLVM, the execution Test Suite, does not run on Windows,
- and this document does not discuss it.
- Additional information about the LLVM directory structure and tool chain
- can be found on the main :doc:`GettingStarted` page.
- 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 2017 is fine. The LLVM
- source tree and object files, libraries and executables will consume
- approximately 3GB.
- Software
- --------
- You will need Visual Studio 2017 or higher, with the latest Update installed.
- You will also need the `CMake <http://www.cmake.org/>`_ build system since it
- generates the project files you will use to build with.
- If you would like to run the LLVM tests you will need `Python
- <http://www.python.org/>`_. Version 2.7 and newer are known to work. You will
- need `GnuWin32 <http://gnuwin32.sourceforge.net/>`_ tools, too.
- Do not install the LLVM directory tree into a path containing spaces (e.g.
- ``C:\Documents and Settings\...``) as the configure step will fail.
- Getting Started
- ===============
- Here's the short story for getting up and running quickly with LLVM:
- 1. Read the documentation.
- 2. Seriously, read the documentation.
- 3. Remember that you were warned twice about reading the documentation.
- 4. Get the Source Code
- * With the distributed files:
- 1. ``cd <where-you-want-llvm-to-live>``
- 2. ``gunzip --stdout llvm-VERSION.tar.gz | tar -xvf -``
- (*or use WinZip*)
- 3. ``cd llvm``
- * With anonymous Subversion access:
- *Note:* some regression tests require Unix-style line ending (``\n``). To
- pass all regression tests, please add two lines *enable-auto-props = yes*
- and *\* = svn:mime-type=application/octet-stream* to
- ``C:\Users\<username>\AppData\Roaming\Subversion\config``.
- 1. ``cd <where-you-want-llvm-to-live>``
- 2. ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm``
- 3. ``cd llvm``
- 5. Use `CMake <http://www.cmake.org/>`_ to generate up-to-date project files:
- * 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.
- * If CMake complains that it cannot find the compiler, make sure that
- you have the Visual Studio C++ Tools installed, not just Visual Studio
- itself (trying to create a C++ project in Visual Studio will generally
- download the C++ tools if they haven't already been).
- * See the :doc:`LLVM CMake guide <CMake>` for detailed information about
- how to configure the LLVM 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.
- * 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.
- 6. Start Visual Studio
- * In the directory you created the project files will have an ``llvm.sln``
- file, just double-click on that to open Visual Studio.
- 7. 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.
- 8. Test LLVM in Visual Studio:
- * If ``%PATH%`` does not contain GnuWin32, you may specify
- ``LLVM_LIT_TOOLS_DIR`` on CMake for the path to GnuWin32.
- * You can run LLVM tests by merely building the project "check". The test
- results will be shown in the VS output window.
- 9. 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\bin\llvm-lit --param build_config=Win32 --param build_mode=Debug --param llvm_site_config=../build/test/lit.site.cfg test
- This example assumes that Python is in your PATH variable, you
- have built a Win32 Debug version of llvm with a standard out of
- line build. You should not see any unexpected failures, but will
- see many unsupported tests and expected failures.
- A specific test or test directory can be run with:
- .. code-block:: bat
- C:\..\llvm> python ..\build\bin\llvm-lit --param build_config=Win32 --param build_mode=Debug --param llvm_site_config=../build/test/lit.site.cfg test/path/to/test
- An Example Using the LLVM Tool Chain
- ====================================
- 1. First, create a simple C file, name it '``hello.c``':
- .. code-block:: c
- #include <stdio.h>
- int main() {
- printf("hello world\n");
- return 0;
- }
- 2. Next, compile the C file into an LLVM bitcode file:
- .. code-block:: bat
- C:\..> clang -c hello.c -emit-llvm -o hello.bc
- This will create the result file ``hello.bc`` which is the LLVM bitcode
- that corresponds the compiled program and the library facilities that
- it required. You can execute this file directly using ``lli`` tool,
- compile it to native assembly with the ``llc``, optimize or analyze it
- further with the ``opt`` tool, etc.
- Alternatively you can directly output an executable with clang with:
- .. code-block:: bat
- C:\..> clang hello.c -o hello.exe
- The ``-o hello.exe`` is required because clang currently outputs ``a.out``
- when neither ``-o`` nor ``-c`` are given.
- 3. Run the program using the just-in-time compiler:
- .. code-block:: bat
- C:\..> lli hello.bc
- 4. Use the ``llvm-dis`` utility to take a look at the LLVM assembly code:
- .. code-block:: bat
- C:\..> llvm-dis < hello.bc | more
- 5. Compile the program to object code using the LLC code generator:
- .. code-block:: bat
- C:\..> llc -filetype=obj hello.bc
- 6. Link to binary using Microsoft link:
- .. code-block:: bat
- C:\..> link hello.obj -defaultlib:libcmt
- 7. Execute the native code program:
- .. code-block:: bat
- C:\..> hello.exe
- Common Problems
- ===============
- 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.
- 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 <http://llvm.org/>`_
- * `LLVM doxygen tree <http://llvm.org/doxygen/>`_
|