Home | History | Annotate | Download | only in docs
      1 ========================
      2 Building LLVM with CMake
      3 ========================
      4 
      5 .. contents::
      6    :local:
      7 
      8 Introduction
      9 ============
     10 
     11 `CMake <http://www.cmake.org/>`_ is a cross-platform build-generator tool. CMake
     12 does not build the project, it generates the files needed by your build tool
     13 (GNU make, Visual Studio, etc) for building LLVM.
     14 
     15 If you are really anxious about getting a functional LLVM build, go to the
     16 `Quick start`_ section. If you are a CMake novice, start on `Basic CMake usage`_
     17 and then go back to the `Quick start`_ once you know what you are doing. The
     18 `Options and variables`_ section is a reference for customizing your build. If
     19 you already have experience with CMake, this is the recommended starting point.
     20 
     21 .. _Quick start:
     22 
     23 Quick start
     24 ===========
     25 
     26 We use here the command-line, non-interactive CMake interface.
     27 
     28 #. `Download <http://www.cmake.org/cmake/resources/software.html>`_ and install
     29    CMake. Version 2.8 is the minimum required.
     30 
     31 #. Open a shell. Your development tools must be reachable from this shell
     32    through the PATH environment variable.
     33 
     34 #. Create a directory for containing the build. It is not supported to build
     35    LLVM on the source directory. cd to this directory:
     36 
     37    .. code-block:: console
     38 
     39      $ mkdir mybuilddir
     40      $ cd mybuilddir
     41 
     42 #. Execute this command on the shell replacing `path/to/llvm/source/root` with
     43    the path to the root of your LLVM source tree:
     44 
     45    .. code-block:: console
     46 
     47      $ cmake path/to/llvm/source/root
     48 
     49    CMake will detect your development environment, perform a series of test and
     50    generate the files required for building LLVM. CMake will use default values
     51    for all build parameters. See the `Options and variables`_ section for
     52    fine-tuning your build
     53 
     54    This can fail if CMake can't detect your toolset, or if it thinks that the
     55    environment is not sane enough. On this case make sure that the toolset that
     56    you intend to use is the only one reachable from the shell and that the shell
     57    itself is the correct one for you development environment. CMake will refuse
     58    to build MinGW makefiles if you have a POSIX shell reachable through the PATH
     59    environment variable, for instance. You can force CMake to use a given build
     60    tool, see the `Usage`_ section.
     61 
     62 .. _Basic CMake usage:
     63 .. _Usage:
     64 
     65 Basic CMake usage
     66 =================
     67 
     68 This section explains basic aspects of CMake, mostly for explaining those
     69 options which you may need on your day-to-day usage.
     70 
     71 CMake comes with extensive documentation in the form of html files and on the
     72 cmake executable itself. Execute ``cmake --help`` for further help options.
     73 
     74 CMake requires to know for which build tool it shall generate files (GNU make,
     75 Visual Studio, Xcode, etc). If not specified on the command line, it tries to
     76 guess it based on you environment. Once identified the build tool, CMake uses
     77 the corresponding *Generator* for creating files for your build tool. You can
     78 explicitly specify the generator with the command line option ``-G "Name of the
     79 generator"``. For knowing the available generators on your platform, execute
     80 
     81 .. code-block:: console
     82 
     83   $ cmake --help
     84 
     85 This will list the generator's names at the end of the help text. Generator's
     86 names are case-sensitive. Example:
     87 
     88 .. code-block:: console
     89 
     90   $ cmake -G "Visual Studio 11" path/to/llvm/source/root
     91 
     92 For a given development platform there can be more than one adequate
     93 generator. If you use Visual Studio "NMake Makefiles" is a generator you can use
     94 for building with NMake. By default, CMake chooses the more specific generator
     95 supported by your development environment. If you want an alternative generator,
     96 you must tell this to CMake with the ``-G`` option.
     97 
     98 .. todo::
     99 
    100   Explain variables and cache. Move explanation here from #options section.
    101 
    102 .. _Options and variables:
    103 
    104 Options and variables
    105 =====================
    106 
    107 Variables customize how the build will be generated. Options are boolean
    108 variables, with possible values ON/OFF. Options and variables are defined on the
    109 CMake command line like this:
    110 
    111 .. code-block:: console
    112 
    113   $ cmake -DVARIABLE=value path/to/llvm/source
    114 
    115 You can set a variable after the initial CMake invocation for changing its
    116 value. You can also undefine a variable:
    117 
    118 .. code-block:: console
    119 
    120   $ cmake -UVARIABLE path/to/llvm/source
    121 
    122 Variables are stored on the CMake cache. This is a file named ``CMakeCache.txt``
    123 on the root of the build directory. Do not hand-edit it.
    124 
    125 Variables are listed here appending its type after a colon. It is correct to
    126 write the variable and the type on the CMake command line:
    127 
    128 .. code-block:: console
    129 
    130   $ cmake -DVARIABLE:TYPE=value path/to/llvm/source
    131 
    132 Frequently-used CMake variables
    133 -------------------------------
    134 
    135 Here are some of the CMake variables that are used often, along with a
    136 brief explanation and LLVM-specific notes. For full documentation, check the
    137 CMake docs or execute ``cmake --help-variable VARIABLE_NAME``.
    138 
    139 **CMAKE_BUILD_TYPE**:STRING
    140   Sets the build type for ``make`` based generators. Possible values are
    141   Release, Debug, RelWithDebInfo and MinSizeRel. On systems like Visual Studio
    142   the user sets the build type with the IDE settings.
    143 
    144 **CMAKE_INSTALL_PREFIX**:PATH
    145   Path where LLVM will be installed if "make install" is invoked or the
    146   "INSTALL" target is built.
    147 
    148 **LLVM_LIBDIR_SUFFIX**:STRING
    149   Extra suffix to append to the directory where libraries are to be
    150   installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
    151   to install libraries to ``/usr/lib64``.
    152 
    153 **CMAKE_C_FLAGS**:STRING
    154   Extra flags to use when compiling C source files.
    155 
    156 **CMAKE_CXX_FLAGS**:STRING
    157   Extra flags to use when compiling C++ source files.
    158 
    159 **BUILD_SHARED_LIBS**:BOOL
    160   Flag indicating if shared libraries will be built. Its default value is
    161   OFF. Shared libraries are not supported on Windows and not recommended on the
    162   other OSes.
    163 
    164 .. _LLVM-specific variables:
    165 
    166 LLVM-specific variables
    167 -----------------------
    168 
    169 **LLVM_TARGETS_TO_BUILD**:STRING
    170   Semicolon-separated list of targets to build, or *all* for building all
    171   targets. Case-sensitive. Defaults to *all*. Example:
    172   ``-DLLVM_TARGETS_TO_BUILD="X86;PowerPC"``.
    173 
    174 **LLVM_BUILD_TOOLS**:BOOL
    175   Build LLVM tools. Defaults to ON. Targets for building each tool are generated
    176   in any case. You can build an tool separately by invoking its target. For
    177   example, you can build *llvm-as* with a makefile-based system executing *make
    178   llvm-as* on the root of your build directory.
    179 
    180 **LLVM_INCLUDE_TOOLS**:BOOL
    181   Generate build targets for the LLVM tools. Defaults to ON. You can use that
    182   option for disabling the generation of build targets for the LLVM tools.
    183 
    184 **LLVM_BUILD_EXAMPLES**:BOOL
    185   Build LLVM examples. Defaults to OFF. Targets for building each example are
    186   generated in any case. See documentation for *LLVM_BUILD_TOOLS* above for more
    187   details.
    188 
    189 **LLVM_INCLUDE_EXAMPLES**:BOOL
    190   Generate build targets for the LLVM examples. Defaults to ON. You can use that
    191   option for disabling the generation of build targets for the LLVM examples.
    192 
    193 **LLVM_BUILD_TESTS**:BOOL
    194   Build LLVM unit tests. Defaults to OFF. Targets for building each unit test
    195   are generated in any case. You can build a specific unit test with the target
    196   *UnitTestNameTests* (where at this time *UnitTestName* can be ADT, Analysis,
    197   ExecutionEngine, JIT, Support, Transform, VMCore; see the subdirectories of
    198   *unittests* for an updated list.) It is possible to build all unit tests with
    199   the target *UnitTests*.
    200 
    201 **LLVM_INCLUDE_TESTS**:BOOL
    202   Generate build targets for the LLVM unit tests. Defaults to ON. You can use
    203   that option for disabling the generation of build targets for the LLVM unit
    204   tests.
    205 
    206 **LLVM_APPEND_VC_REV**:BOOL
    207   Append version control revision info (svn revision number or Git revision id)
    208   to LLVM version string (stored in the PACKAGE_VERSION macro). For this to work
    209   cmake must be invoked before the build. Defaults to OFF.
    210 
    211 **LLVM_ENABLE_THREADS**:BOOL
    212   Build with threads support, if available. Defaults to ON.
    213 
    214 **LLVM_ENABLE_CXX1Y**:BOOL
    215   Build in C++1y mode, if available. Defaults to OFF.
    216 
    217 **LLVM_ENABLE_ASSERTIONS**:BOOL
    218   Enables code assertions. Defaults to OFF if and only if ``CMAKE_BUILD_TYPE``
    219   is *Release*.
    220 
    221 **LLVM_ENABLE_PIC**:BOOL
    222   Add the ``-fPIC`` flag for the compiler command-line, if the compiler supports
    223   this flag. Some systems, like Windows, do not need this flag. Defaults to ON.
    224 
    225 **LLVM_ENABLE_WARNINGS**:BOOL
    226   Enable all compiler warnings. Defaults to ON.
    227 
    228 **LLVM_ENABLE_PEDANTIC**:BOOL
    229   Enable pedantic mode. This disable compiler specific extensions, is
    230   possible. Defaults to ON.
    231 
    232 **LLVM_ENABLE_WERROR**:BOOL
    233   Stop and fail build, if a compiler warning is triggered. Defaults to OFF.
    234 
    235 **LLVM_BUILD_32_BITS**:BOOL
    236   Build 32-bits executables and libraries on 64-bits systems. This option is
    237   available only on some 64-bits unix systems. Defaults to OFF.
    238 
    239 **LLVM_TARGET_ARCH**:STRING
    240   LLVM target to use for native code generation. This is required for JIT
    241   generation. It defaults to "host", meaning that it shall pick the architecture
    242   of the machine where LLVM is being built. If you are cross-compiling, set it
    243   to the target architecture name.
    244 
    245 **LLVM_TABLEGEN**:STRING
    246   Full path to a native TableGen executable (usually named ``tblgen``). This is
    247   intended for cross-compiling: if the user sets this variable, no native
    248   TableGen will be created.
    249 
    250 **LLVM_LIT_ARGS**:STRING
    251   Arguments given to lit.  ``make check`` and ``make clang-test`` are affected.
    252   By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
    253   others.
    254 
    255 **LLVM_LIT_TOOLS_DIR**:PATH
    256   The path to GnuWin32 tools for tests. Valid on Windows host.  Defaults to "",
    257   then Lit seeks tools according to %PATH%.  Lit can find tools(eg. grep, sort,
    258   &c) on LLVM_LIT_TOOLS_DIR at first, without specifying GnuWin32 to %PATH%.
    259 
    260 **LLVM_ENABLE_FFI**:BOOL
    261   Indicates whether LLVM Interpreter will be linked with Foreign Function
    262   Interface library. If the library or its headers are installed on a custom
    263   location, you can set the variables FFI_INCLUDE_DIR and
    264   FFI_LIBRARY_DIR. Defaults to OFF.
    265 
    266 **LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR**:PATH
    267   Path to ``{Clang,lld,Polly}``\'s source directory. Defaults to
    268   ``tools/{clang,lld,polly}``. ``{Clang,lld,Polly}`` will not be built when it
    269   is empty or it does not point to a valid path.
    270 
    271 **LLVM_USE_OPROFILE**:BOOL
    272   Enable building OProfile JIT support. Defaults to OFF
    273 
    274 **LLVM_USE_INTEL_JITEVENTS**:BOOL
    275   Enable building support for Intel JIT Events API. Defaults to OFF
    276 
    277 **LLVM_ENABLE_ZLIB**:BOOL
    278   Build with zlib to support compression/uncompression in LLVM tools.
    279   Defaults to ON.
    280 
    281 **LLVM_USE_SANITIZER**:STRING
    282   Define the sanitizer used to build LLVM binaries and tests. Possible values
    283   are ``Address``, ``Memory`` and ``MemoryWithOrigins``. Defaults to empty
    284   string.
    285 
    286 **LLVM_BUILD_DOCS**:BOOL
    287   Enables all enabled documentation targets (i.e. Doxgyen and Sphinx targets) to
    288   be built as part of the normal build. If the ``install`` target is run then
    289   this also enables all built documentation targets to be installed. Defaults to
    290   OFF.
    291 
    292 **LLVM_ENABLE_DOXYGEN**:BOOL
    293   Enables the generation of browsable HTML documentation using doxygen.
    294   Defaults to OFF.
    295 
    296 **LLVM_ENABLE_DOXYGEN_QT_HELP**:BOOL
    297   Enables the generation of a Qt Compressed Help file. Defaults to OFF.
    298   This affects the make target ``doxygen-llvm``. When enabled, apart from
    299   the normal HTML output generated by doxygen, this will produce a QCH file
    300   named ``org.llvm.qch``. You can then load this file into Qt Creator.
    301   This option is only useful in combination with ``-DLLVM_ENABLE_DOXYGEN=ON``;
    302   otherwise this has no effect.
    303 
    304 **LLVM_DOXYGEN_QCH_FILENAME**:STRING
    305   The filename of the Qt Compressed Help file that will be genrated when
    306   ``-DLLVM_ENABLE_DOXYGEN=ON`` and 
    307   ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON`` are given. Defaults to
    308   ``org.llvm.qch``.
    309   This option is only useful in combination with
    310   ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
    311   otherwise this has no effect.
    312 
    313 **LLVM_DOXYGEN_QHP_NAMESPACE**:STRING
    314   Namespace under which the intermediate Qt Help Project file lives. See `Qt
    315   Help Project`_
    316   for more information. Defaults to "org.llvm". This option is only useful in
    317   combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise
    318   this has no effect.
    319     
    320 **LLVM_DOXYGEN_QHP_CUST_FILTER_NAME**:STRING
    321   See `Qt Help Project`_ for
    322   more information. Defaults to the CMake variable ``${PACKAGE_STRING}`` which
    323   is a combination of the package name and version string. This filter can then
    324   be used in Qt Creator to select only documentation from LLVM when browsing
    325   through all the help files that you might have loaded. This option is only
    326   useful in combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
    327   otherwise this has no effect.
    328 
    329 .. _Qt Help Project: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters
    330 
    331 **LLVM_DOXYGEN_QHELPGENERATOR_PATH**:STRING
    332   The path to the ``qhelpgenerator`` executable. Defaults to whatever CMake's
    333   ``find_program()`` can find. This option is only useful in combination with
    334   ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise this has no
    335   effect.
    336 
    337 **LLVM_ENABLE_SPHINX**:BOOL
    338   If enabled CMake will search for the ``sphinx-build`` executable and will make
    339   the ``SPHINX_OUTPUT_HTML`` and ``SPHINX_OUTPUT_MAN`` CMake options available.
    340   Defaults to OFF.
    341 
    342 **SPHINX_EXECUTABLE**:STRING
    343   The path to the ``sphinx-build`` executable detected by CMake.
    344 
    345 **SPHINX_OUTPUT_HTML**:BOOL
    346   If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) then the targets for
    347   building the documentation as html are added (but not built by default unless
    348   ``LLVM_BUILD_DOCS`` is enabled). There is a target for each project in the
    349   source tree that uses sphinx (e.g.  ``docs-llvm-html``, ``docs-clang-html``
    350   and ``docs-lld-html``). Defaults to ON.
    351 
    352 **SPHINX_OUTPUT_MAN**:BOOL
    353   If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) the targets for building
    354   the man pages are added (but not built by default unless ``LLVM_BUILD_DOCS``
    355   is enabled). Currently the only target added is ``docs-llvm-man``. Defaults
    356   to ON.
    357 
    358 Executing the test suite
    359 ========================
    360 
    361 Testing is performed when the *check* target is built. For instance, if you are
    362 using makefiles, execute this command while on the top level of your build
    363 directory:
    364 
    365 .. code-block:: console
    366 
    367   $ make check
    368 
    369 On Visual Studio, you may run tests to build the project "check".
    370 
    371 Cross compiling
    372 ===============
    373 
    374 See `this wiki page <http://www.vtk.org/Wiki/CMake_Cross_Compiling>`_ for
    375 generic instructions on how to cross-compile with CMake. It goes into detailed
    376 explanations and may seem daunting, but it is not. On the wiki page there are
    377 several examples including toolchain files. Go directly to `this section
    378 <http://www.vtk.org/Wiki/CMake_Cross_Compiling#Information_how_to_set_up_various_cross_compiling_toolchains>`_
    379 for a quick solution.
    380 
    381 Also see the `LLVM-specific variables`_ section for variables used when
    382 cross-compiling.
    383 
    384 Embedding LLVM in your project
    385 ==============================
    386 
    387 The most difficult part of adding LLVM to the build of a project is to determine
    388 the set of LLVM libraries corresponding to the set of required LLVM
    389 features. What follows is an example of how to obtain this information:
    390 
    391 .. code-block:: cmake
    392 
    393   # A convenience variable:
    394   set(LLVM_ROOT "" CACHE PATH "Root of LLVM install.")
    395 
    396   # A bit of a sanity check:
    397   if( NOT EXISTS ${LLVM_ROOT}/include/llvm )
    398   message(FATAL_ERROR "LLVM_ROOT (${LLVM_ROOT}) is not a valid LLVM install")
    399   endif()
    400 
    401   # We incorporate the CMake features provided by LLVM:
    402   set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_ROOT}/share/llvm/cmake")
    403   include(LLVMConfig)
    404 
    405   # Now set the header and library paths:
    406   include_directories( ${LLVM_INCLUDE_DIRS} )
    407   link_directories( ${LLVM_LIBRARY_DIRS} )
    408   add_definitions( ${LLVM_DEFINITIONS} )
    409 
    410   # Let's suppose we want to build a JIT compiler with support for
    411   # binary code (no interpreter):
    412   llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)
    413 
    414   # Finally, we link the LLVM libraries to our executable:
    415   target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES})
    416 
    417 This assumes that LLVM_ROOT points to an install of LLVM. The procedure works
    418 too for uninstalled builds although we need to take care to add an
    419 `include_directories` for the location of the headers on the LLVM source
    420 directory (if we are building out-of-source.)
    421 
    422 Alternativaly, you can utilize CMake's ``find_package`` functionality. Here is
    423 an equivalent variant of snippet shown above:
    424 
    425 .. code-block:: cmake
    426 
    427   find_package(LLVM)
    428 
    429   if( NOT LLVM_FOUND )
    430     message(FATAL_ERROR "LLVM package can't be found. Set CMAKE_PREFIX_PATH variable to LLVM's installation prefix.")
    431   endif()
    432 
    433   include_directories( ${LLVM_INCLUDE_DIRS} )
    434   link_directories( ${LLVM_LIBRARY_DIRS} )
    435 
    436   llvm_map_components_to_libraries(REQ_LLVM_LIBRARIES jit native)
    437 
    438   target_link_libraries(mycompiler ${REQ_LLVM_LIBRARIES})
    439 
    440 .. _cmake-out-of-source-pass:
    441 
    442 Developing LLVM pass out of source
    443 ----------------------------------
    444 
    445 It is possible to develop LLVM passes against installed LLVM.  An example of
    446 project layout provided below:
    447 
    448 .. code-block:: none
    449 
    450   <project dir>/
    451       |
    452       CMakeLists.txt
    453       <pass name>/
    454           |
    455           CMakeLists.txt
    456           Pass.cpp
    457           ...
    458 
    459 Contents of ``<project dir>/CMakeLists.txt``:
    460 
    461 .. code-block:: cmake
    462 
    463   find_package(LLVM)
    464 
    465   # Define add_llvm_* macro's.
    466   include(AddLLVM)
    467 
    468   add_definitions(${LLVM_DEFINITIONS})
    469   include_directories(${LLVM_INCLUDE_DIRS})
    470   link_directories(${LLVM_LIBRARY_DIRS})
    471 
    472   add_subdirectory(<pass name>)
    473 
    474 Contents of ``<project dir>/<pass name>/CMakeLists.txt``:
    475 
    476 .. code-block:: cmake
    477 
    478   add_llvm_loadable_module(LLVMPassname
    479     Pass.cpp
    480     )
    481 
    482 When you are done developing your pass, you may wish to integrate it
    483 into LLVM source tree. You can achieve it in two easy steps:
    484 
    485 #. Copying ``<pass name>`` folder into ``<LLVM root>/lib/Transform`` directory.
    486 
    487 #. Adding ``add_subdirectory(<pass name>)`` line into
    488    ``<LLVM root>/lib/Transform/CMakeLists.txt``.
    489 
    490 Compiler/Platform-specific topics
    491 =================================
    492 
    493 Notes for specific compilers and/or platforms.
    494 
    495 Microsoft Visual C++
    496 --------------------
    497 
    498 **LLVM_COMPILER_JOBS**:STRING
    499   Specifies the maximum number of parallell compiler jobs to use per project
    500   when building with msbuild or Visual Studio. Only supported for the Visual
    501   Studio 2010 CMake generator. 0 means use all processors. Default is 0.
    502