1======================== 2Building LLVM with CMake 3======================== 4 5.. contents:: 6 :local: 7 8Introduction 9============ 10 11`CMake <http://www.cmake.org/>`_ is a cross-platform build-generator tool. CMake 12does not build the project, it generates the files needed by your build tool 13(GNU make, Visual Studio, etc.) for building LLVM. 14 15If **you are a new contributor**, please start with the :doc:`GettingStarted` 16page. This page is geared for existing contributors moving from the 17legacy configure/make system. 18 19If you are really anxious about getting a functional LLVM build, go to the 20`Quick start`_ section. If you are a CMake novice, start with `Basic CMake usage`_ 21and then go back to the `Quick start`_ section once you know what you are doing. The 22`Options and variables`_ section is a reference for customizing your build. If 23you already have experience with CMake, this is the recommended starting point. 24 25This page is geared towards users of the LLVM CMake build. If you're looking for 26information about modifying the LLVM CMake build system you may want to see the 27:doc:`CMakePrimer` page. It has a basic overview of the CMake language. 28 29.. _Quick start: 30 31Quick start 32=========== 33 34We use here the command-line, non-interactive CMake interface. 35 36#. `Download <http://www.cmake.org/cmake/resources/software.html>`_ and install 37 CMake. Version 3.4.3 is the minimum required. 38 39#. Open a shell. Your development tools must be reachable from this shell 40 through the PATH environment variable. 41 42#. Create a build directory. Building LLVM in the source 43 directory is not supported. cd to this directory: 44 45 .. code-block:: console 46 47 $ mkdir mybuilddir 48 $ cd mybuilddir 49 50#. Execute this command in the shell replacing `path/to/llvm/source/root` with 51 the path to the root of your LLVM source tree: 52 53 .. code-block:: console 54 55 $ cmake path/to/llvm/source/root 56 57 CMake will detect your development environment, perform a series of tests, and 58 generate the files required for building LLVM. CMake will use default values 59 for all build parameters. See the `Options and variables`_ section for 60 a list of build parameters that you can modify. 61 62 This can fail if CMake can't detect your toolset, or if it thinks that the 63 environment is not sane enough. In this case, make sure that the toolset that 64 you intend to use is the only one reachable from the shell, and that the shell 65 itself is the correct one for your development environment. CMake will refuse 66 to build MinGW makefiles if you have a POSIX shell reachable through the PATH 67 environment variable, for instance. You can force CMake to use a given build 68 tool; for instructions, see the `Usage`_ section, below. 69 70#. After CMake has finished running, proceed to use IDE project files, or start 71 the build from the build directory: 72 73 .. code-block:: console 74 75 $ cmake --build . 76 77 The ``--build`` option tells ``cmake`` to invoke the underlying build 78 tool (``make``, ``ninja``, ``xcodebuild``, ``msbuild``, etc.) 79 80 The underlying build tool can be invoked directly, of course, but 81 the ``--build`` option is portable. 82 83#. After LLVM has finished building, install it from the build directory: 84 85 .. code-block:: console 86 87 $ cmake --build . --target install 88 89 The ``--target`` option with ``install`` parameter in addition to 90 the ``--build`` option tells ``cmake`` to build the ``install`` target. 91 92 It is possible to set a different install prefix at installation time 93 by invoking the ``cmake_install.cmake`` script generated in the 94 build directory: 95 96 .. code-block:: console 97 98 $ cmake -DCMAKE_INSTALL_PREFIX=/tmp/llvm -P cmake_install.cmake 99 100.. _Basic CMake usage: 101.. _Usage: 102 103Basic CMake usage 104================= 105 106This section explains basic aspects of CMake 107which you may need in your day-to-day usage. 108 109CMake comes with extensive documentation, in the form of html files, and as 110online help accessible via the ``cmake`` executable itself. Execute ``cmake 111--help`` for further help options. 112 113CMake allows you to specify a build tool (e.g., GNU make, Visual Studio, 114or Xcode). If not specified on the command line, CMake tries to guess which 115build tool to use, based on your environment. Once it has identified your 116build tool, CMake uses the corresponding *Generator* to create files for your 117build tool (e.g., Makefiles or Visual Studio or Xcode project files). You can 118explicitly specify the generator with the command line option ``-G "Name of the 119generator"``. To see a list of the available generators on your system, execute 120 121.. code-block:: console 122 123 $ cmake --help 124 125This will list the generator names at the end of the help text. 126 127Generators' names are case-sensitive, and may contain spaces. For this reason, 128you should enter them exactly as they are listed in the ``cmake --help`` 129output, in quotes. For example, to generate project files specifically for 130Visual Studio 12, you can execute: 131 132.. code-block:: console 133 134 $ cmake -G "Visual Studio 12" path/to/llvm/source/root 135 136For a given development platform there can be more than one adequate 137generator. If you use Visual Studio, "NMake Makefiles" is a generator you can use 138for building with NMake. By default, CMake chooses the most specific generator 139supported by your development environment. If you want an alternative generator, 140you must tell this to CMake with the ``-G`` option. 141 142.. todo:: 143 144 Explain variables and cache. Move explanation here from #options section. 145 146.. _Options and variables: 147 148Options and variables 149===================== 150 151Variables customize how the build will be generated. Options are boolean 152variables, with possible values ON/OFF. Options and variables are defined on the 153CMake command line like this: 154 155.. code-block:: console 156 157 $ cmake -DVARIABLE=value path/to/llvm/source 158 159You can set a variable after the initial CMake invocation to change its 160value. You can also undefine a variable: 161 162.. code-block:: console 163 164 $ cmake -UVARIABLE path/to/llvm/source 165 166Variables are stored in the CMake cache. This is a file named ``CMakeCache.txt`` 167stored at the root of your build directory that is generated by ``cmake``. 168Editing it yourself is not recommended. 169 170Variables are listed in the CMake cache and later in this document with 171the variable name and type separated by a colon. You can also specify the 172variable and type on the CMake command line: 173 174.. code-block:: console 175 176 $ cmake -DVARIABLE:TYPE=value path/to/llvm/source 177 178Frequently-used CMake variables 179------------------------------- 180 181Here are some of the CMake variables that are used often, along with a 182brief explanation and LLVM-specific notes. For full documentation, consult the 183CMake manual, or execute ``cmake --help-variable VARIABLE_NAME``. 184 185**CMAKE_BUILD_TYPE**:STRING 186 Sets the build type for ``make``-based generators. Possible values are 187 Release, Debug, RelWithDebInfo and MinSizeRel. If you are using an IDE such as 188 Visual Studio, you should use the IDE settings to set the build type. 189 Be aware that Release and RelWithDebInfo are not using the same optimization 190 level on most platform. 191 192**CMAKE_INSTALL_PREFIX**:PATH 193 Path where LLVM will be installed if "make install" is invoked or the 194 "install" target is built. 195 196**LLVM_LIBDIR_SUFFIX**:STRING 197 Extra suffix to append to the directory where libraries are to be 198 installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64`` 199 to install libraries to ``/usr/lib64``. 200 201**CMAKE_C_FLAGS**:STRING 202 Extra flags to use when compiling C source files. 203 204**CMAKE_CXX_FLAGS**:STRING 205 Extra flags to use when compiling C++ source files. 206 207.. _LLVM-specific variables: 208 209LLVM-specific variables 210----------------------- 211 212**LLVM_TARGETS_TO_BUILD**:STRING 213 Semicolon-separated list of targets to build, or *all* for building all 214 targets. Case-sensitive. Defaults to *all*. Example: 215 ``-DLLVM_TARGETS_TO_BUILD="X86;PowerPC"``. 216 217**LLVM_BUILD_TOOLS**:BOOL 218 Build LLVM tools. Defaults to ON. Targets for building each tool are generated 219 in any case. You can build a tool separately by invoking its target. For 220 example, you can build *llvm-as* with a Makefile-based system by executing *make 221 llvm-as* at the root of your build directory. 222 223**LLVM_INCLUDE_TOOLS**:BOOL 224 Generate build targets for the LLVM tools. Defaults to ON. You can use this 225 option to disable the generation of build targets for the LLVM tools. 226 227**LLVM_BUILD_EXAMPLES**:BOOL 228 Build LLVM examples. Defaults to OFF. Targets for building each example are 229 generated in any case. See documentation for *LLVM_BUILD_TOOLS* above for more 230 details. 231 232**LLVM_INCLUDE_EXAMPLES**:BOOL 233 Generate build targets for the LLVM examples. Defaults to ON. You can use this 234 option to disable the generation of build targets for the LLVM examples. 235 236**LLVM_BUILD_TESTS**:BOOL 237 Build LLVM unit tests. Defaults to OFF. Targets for building each unit test 238 are generated in any case. You can build a specific unit test using the 239 targets defined under *unittests*, such as ADTTests, IRTests, SupportTests, 240 etc. (Search for ``add_llvm_unittest`` in the subdirectories of *unittests* 241 for a complete list of unit tests.) It is possible to build all unit tests 242 with the target *UnitTests*. 243 244**LLVM_INCLUDE_TESTS**:BOOL 245 Generate build targets for the LLVM unit tests. Defaults to ON. You can use 246 this option to disable the generation of build targets for the LLVM unit 247 tests. 248 249**LLVM_APPEND_VC_REV**:BOOL 250 Append version control revision info (svn revision number or Git revision id) 251 to LLVM version string (stored in the PACKAGE_VERSION macro). For this to work 252 cmake must be invoked before the build. Defaults to OFF. 253 254**LLVM_ENABLE_THREADS**:BOOL 255 Build with threads support, if available. Defaults to ON. 256 257**LLVM_ENABLE_CXX1Y**:BOOL 258 Build in C++1y mode, if available. Defaults to OFF. 259 260**LLVM_ENABLE_ASSERTIONS**:BOOL 261 Enables code assertions. Defaults to ON if and only if ``CMAKE_BUILD_TYPE`` 262 is *Debug*. 263 264**LLVM_ENABLE_EH**:BOOL 265 Build LLVM with exception-handling support. This is necessary if you wish to 266 link against LLVM libraries and make use of C++ exceptions in your own code 267 that need to propagate through LLVM code. Defaults to OFF. 268 269**LLVM_ENABLE_EXPENSIVE_CHECKS**:BOOL 270 Enable additional time/memory expensive checking. Defaults to OFF. 271 272**LLVM_ENABLE_PIC**:BOOL 273 Add the ``-fPIC`` flag to the compiler command-line, if the compiler supports 274 this flag. Some systems, like Windows, do not need this flag. Defaults to ON. 275 276**LLVM_ENABLE_RTTI**:BOOL 277 Build LLVM with run-time type information. Defaults to OFF. 278 279**LLVM_ENABLE_WARNINGS**:BOOL 280 Enable all compiler warnings. Defaults to ON. 281 282**LLVM_ENABLE_PEDANTIC**:BOOL 283 Enable pedantic mode. This disables compiler-specific extensions, if 284 possible. Defaults to ON. 285 286**LLVM_ENABLE_WERROR**:BOOL 287 Stop and fail the build, if a compiler warning is triggered. Defaults to OFF. 288 289**LLVM_ABI_BREAKING_CHECKS**:STRING 290 Used to decide if LLVM should be built with ABI breaking checks or 291 not. Allowed values are `WITH_ASSERTS` (default), `FORCE_ON` and 292 `FORCE_OFF`. `WITH_ASSERTS` turns on ABI breaking checks in an 293 assertion enabled build. `FORCE_ON` (`FORCE_OFF`) turns them on 294 (off) irrespective of whether normal (`NDEBUG`-based) assertions are 295 enabled or not. A version of LLVM built with ABI breaking checks 296 is not ABI compatible with a version built without it. 297 298**LLVM_BUILD_32_BITS**:BOOL 299 Build 32-bit executables and libraries on 64-bit systems. This option is 300 available only on some 64-bit Unix systems. Defaults to OFF. 301 302**LLVM_TARGET_ARCH**:STRING 303 LLVM target to use for native code generation. This is required for JIT 304 generation. It defaults to "host", meaning that it shall pick the architecture 305 of the machine where LLVM is being built. If you are cross-compiling, set it 306 to the target architecture name. 307 308**LLVM_TABLEGEN**:STRING 309 Full path to a native TableGen executable (usually named ``llvm-tblgen``). This is 310 intended for cross-compiling: if the user sets this variable, no native 311 TableGen will be created. 312 313**LLVM_LIT_ARGS**:STRING 314 Arguments given to lit. ``make check`` and ``make clang-test`` are affected. 315 By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on 316 others. 317 318**LLVM_LIT_TOOLS_DIR**:PATH 319 The path to GnuWin32 tools for tests. Valid on Windows host. Defaults to 320 the empty string, in which case lit will look for tools needed for tests 321 (e.g. ``grep``, ``sort``, etc.) in your %PATH%. If GnuWin32 is not in your 322 %PATH%, then you can set this variable to the GnuWin32 directory so that 323 lit can find tools needed for tests in that directory. 324 325**LLVM_ENABLE_FFI**:BOOL 326 Indicates whether the LLVM Interpreter will be linked with the Foreign Function 327 Interface library (libffi) in order to enable calling external functions. 328 If the library or its headers are installed in a custom 329 location, you can also set the variables FFI_INCLUDE_DIR and 330 FFI_LIBRARY_DIR to the directories where ffi.h and libffi.so can be found, 331 respectively. Defaults to OFF. 332 333**LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR**:PATH 334 These variables specify the path to the source directory for the external 335 LLVM projects Clang, lld, and Polly, respectively, relative to the top-level 336 source directory. If the in-tree subdirectory for an external project 337 exists (e.g., llvm/tools/clang for Clang), then the corresponding variable 338 will not be used. If the variable for an external project does not point 339 to a valid path, then that project will not be built. 340 341**LLVM_ENABLE_PROJECTS**:STRING 342 Semicolon-separated list of projects to build, or *all* for building all 343 (clang, libcxx, libcxxabi, lldb, compiler-rt, lld, polly) projects. 344 This flag assumes that projects are checked out side-by-side and not nested, 345 i.e. clang needs to be in parallel of llvm instead of nested in `llvm/tools`. 346 This feature allows to have one build for only LLVM and another for clang+llvm 347 using the same source checkout. 348 349**LLVM_EXTERNAL_PROJECTS**:STRING 350 Semicolon-separated list of additional external projects to build as part of 351 llvm. For each project LLVM_EXTERNAL_<NAME>_SOURCE_DIR have to be specified 352 with the path for the source code of the project. Example: 353 ``-DLLVM_EXTERNAL_PROJECTS="Foo;Bar" 354 -DLLVM_EXTERNAL_FOO_SOURCE_DIR=/src/foo 355 -DLLVM_EXTERNAL_BAR_SOURCE_DIR=/src/bar``. 356 357**LLVM_USE_OPROFILE**:BOOL 358 Enable building OProfile JIT support. Defaults to OFF. 359 360**LLVM_PROFDATA_FILE**:PATH 361 Path to a profdata file to pass into clang's -fprofile-instr-use flag. This 362 can only be specified if you're building with clang. 363 364**LLVM_USE_INTEL_JITEVENTS**:BOOL 365 Enable building support for Intel JIT Events API. Defaults to OFF. 366 367**LLVM_ENABLE_ZLIB**:BOOL 368 Enable building with zlib to support compression/uncompression in LLVM tools. 369 Defaults to ON. 370 371**LLVM_ENABLE_DIA_SDK**:BOOL 372 Enable building with MSVC DIA SDK for PDB debugging support. Available 373 only with MSVC. Defaults to ON. 374 375**LLVM_USE_SANITIZER**:STRING 376 Define the sanitizer used to build LLVM binaries and tests. Possible values 377 are ``Address``, ``Memory``, ``MemoryWithOrigins``, ``Undefined``, ``Thread``, 378 and ``Address;Undefined``. Defaults to empty string. 379 380**LLVM_ENABLE_LTO**:STRING 381 Add ``-flto`` or ``-flto=`` flags to the compile and link command 382 lines, enabling link-time optimization. Possible values are ``Off``, 383 ``On``, ``Thin`` and ``Full``. Defaults to OFF. 384 385**LLVM_PARALLEL_COMPILE_JOBS**:STRING 386 Define the maximum number of concurrent compilation jobs. 387 388**LLVM_PARALLEL_LINK_JOBS**:STRING 389 Define the maximum number of concurrent link jobs. 390 391**LLVM_BUILD_DOCS**:BOOL 392 Adds all *enabled* documentation targets (i.e. Doxgyen and Sphinx targets) as 393 dependencies of the default build targets. This results in all of the (enabled) 394 documentation targets being as part of a normal build. If the ``install`` 395 target is run then this also enables all built documentation targets to be 396 installed. Defaults to OFF. To enable a particular documentation target, see 397 see LLVM_ENABLE_SPHINX and LLVM_ENABLE_DOXYGEN. 398 399**LLVM_ENABLE_DOXYGEN**:BOOL 400 Enables the generation of browsable HTML documentation using doxygen. 401 Defaults to OFF. 402 403**LLVM_ENABLE_DOXYGEN_QT_HELP**:BOOL 404 Enables the generation of a Qt Compressed Help file. Defaults to OFF. 405 This affects the make target ``doxygen-llvm``. When enabled, apart from 406 the normal HTML output generated by doxygen, this will produce a QCH file 407 named ``org.llvm.qch``. You can then load this file into Qt Creator. 408 This option is only useful in combination with ``-DLLVM_ENABLE_DOXYGEN=ON``; 409 otherwise this has no effect. 410 411**LLVM_DOXYGEN_QCH_FILENAME**:STRING 412 The filename of the Qt Compressed Help file that will be generated when 413 ``-DLLVM_ENABLE_DOXYGEN=ON`` and 414 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON`` are given. Defaults to 415 ``org.llvm.qch``. 416 This option is only useful in combination with 417 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; 418 otherwise it has no effect. 419 420**LLVM_DOXYGEN_QHP_NAMESPACE**:STRING 421 Namespace under which the intermediate Qt Help Project file lives. See `Qt 422 Help Project`_ 423 for more information. Defaults to "org.llvm". This option is only useful in 424 combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise 425 it has no effect. 426 427**LLVM_DOXYGEN_QHP_CUST_FILTER_NAME**:STRING 428 See `Qt Help Project`_ for 429 more information. Defaults to the CMake variable ``${PACKAGE_STRING}`` which 430 is a combination of the package name and version string. This filter can then 431 be used in Qt Creator to select only documentation from LLVM when browsing 432 through all the help files that you might have loaded. This option is only 433 useful in combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; 434 otherwise it has no effect. 435 436.. _Qt Help Project: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters 437 438**LLVM_DOXYGEN_QHELPGENERATOR_PATH**:STRING 439 The path to the ``qhelpgenerator`` executable. Defaults to whatever CMake's 440 ``find_program()`` can find. This option is only useful in combination with 441 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise it has no 442 effect. 443 444**LLVM_DOXYGEN_SVG**:BOOL 445 Uses .svg files instead of .png files for graphs in the Doxygen output. 446 Defaults to OFF. 447 448**LLVM_INSTALL_DOXYGEN_HTML_DIR**:STRING 449 The path to install Doxygen-generated HTML documentation to. This path can 450 either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to 451 `share/doc/llvm/doxygen-html`. 452 453**LLVM_ENABLE_SPHINX**:BOOL 454 If specified, CMake will search for the ``sphinx-build`` executable and will make 455 the ``SPHINX_OUTPUT_HTML`` and ``SPHINX_OUTPUT_MAN`` CMake options available. 456 Defaults to OFF. 457 458**SPHINX_EXECUTABLE**:STRING 459 The path to the ``sphinx-build`` executable detected by CMake. 460 461**SPHINX_OUTPUT_HTML**:BOOL 462 If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) then the targets for 463 building the documentation as html are added (but not built by default unless 464 ``LLVM_BUILD_DOCS`` is enabled). There is a target for each project in the 465 source tree that uses sphinx (e.g. ``docs-llvm-html``, ``docs-clang-html`` 466 and ``docs-lld-html``). Defaults to ON. 467 468**SPHINX_OUTPUT_MAN**:BOOL 469 If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) the targets for building 470 the man pages are added (but not built by default unless ``LLVM_BUILD_DOCS`` 471 is enabled). Currently the only target added is ``docs-llvm-man``. Defaults 472 to ON. 473 474**SPHINX_WARNINGS_AS_ERRORS**:BOOL 475 If enabled then sphinx documentation warnings will be treated as 476 errors. Defaults to ON. 477 478**LLVM_INSTALL_SPHINX_HTML_DIR**:STRING 479 The path to install Sphinx-generated HTML documentation to. This path can 480 either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to 481 `share/doc/llvm/html`. 482 483**LLVM_INSTALL_OCAMLDOC_HTML_DIR**:STRING 484 The path to install OCamldoc-generated HTML documentation to. This path can 485 either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to 486 `share/doc/llvm/ocaml-html`. 487 488**LLVM_CREATE_XCODE_TOOLCHAIN**:BOOL 489 OS X Only: If enabled CMake will generate a target named 490 'install-xcode-toolchain'. This target will create a directory at 491 $CMAKE_INSTALL_PREFIX/Toolchains containing an xctoolchain directory which can 492 be used to override the default system tools. 493 494**LLVM_BUILD_LLVM_DYLIB**:BOOL 495 If enabled, the target for building the libLLVM shared library is added. 496 This library contains all of LLVM's components in a single shared library. 497 Defaults to OFF. This cannot be used in conjunction with BUILD_SHARED_LIBS. 498 Tools will only be linked to the libLLVM shared library if LLVM_LINK_LLVM_DYLIB 499 is also ON. 500 The components in the library can be customised by setting LLVM_DYLIB_COMPONENTS 501 to a list of the desired components. 502 503**LLVM_LINK_LLVM_DYLIB**:BOOL 504 If enabled, tools will be linked with the libLLVM shared library. Defaults 505 to OFF. Setting LLVM_LINK_LLVM_DYLIB to ON also sets LLVM_BUILD_LLVM_DYLIB 506 to ON. 507 508**BUILD_SHARED_LIBS**:BOOL 509 Flag indicating if each LLVM component (e.g. Support) is built as a shared 510 library (ON) or as a static library (OFF). Its default value is OFF. On 511 Windows, shared libraries may be used when building with MinGW, including 512 mingw-w64, but not when building with the Microsoft toolchain. 513 514 .. note:: BUILD_SHARED_LIBS is only recommended for use by LLVM developers. 515 If you want to build LLVM as a shared library, you should use the 516 ``LLVM_BUILD_LLVM_DYLIB`` option. 517 518**LLVM_OPTIMIZED_TABLEGEN**:BOOL 519 If enabled and building a debug or asserts build the CMake build system will 520 generate a Release build tree to build a fully optimized tablegen for use 521 during the build. Enabling this option can significantly speed up build times 522 especially when building LLVM in Debug configurations. 523 524CMake Caches 525============ 526 527Recently LLVM and Clang have been adding some more complicated build system 528features. Utilizing these new features often involves a complicated chain of 529CMake variables passed on the command line. Clang provides a collection of CMake 530cache scripts to make these features more approachable. 531 532CMake cache files are utilized using CMake's -C flag: 533 534.. code-block:: console 535 536 $ cmake -C <path to cache file> <path to sources> 537 538CMake cache scripts are processed in an isolated scope, only cached variables 539remain set when the main configuration runs. CMake cached variables do not reset 540variables that are already set unless the FORCE option is specified. 541 542A few notes about CMake Caches: 543 544- Order of command line arguments is important 545 546 - -D arguments specified before -C are set before the cache is processed and 547 can be read inside the cache file 548 - -D arguments specified after -C are set after the cache is processed and 549 are unset inside the cache file 550 551- All -D arguments will override cache file settings 552- CMAKE_TOOLCHAIN_FILE is evaluated after both the cache file and the command 553 line arguments 554- It is recommended that all -D options should be specified *before* -C 555 556For more information about some of the advanced build configurations supported 557via Cache files see :doc:`AdvancedBuilds`. 558 559Executing the test suite 560======================== 561 562Testing is performed when the *check-all* target is built. For instance, if you are 563using Makefiles, execute this command in the root of your build directory: 564 565.. code-block:: console 566 567 $ make check-all 568 569On Visual Studio, you may run tests by building the project "check-all". 570For more information about testing, see the :doc:`TestingGuide`. 571 572Cross compiling 573=============== 574 575See `this wiki page <http://www.vtk.org/Wiki/CMake_Cross_Compiling>`_ for 576generic instructions on how to cross-compile with CMake. It goes into detailed 577explanations and may seem daunting, but it is not. On the wiki page there are 578several examples including toolchain files. Go directly to `this section 579<http://www.vtk.org/Wiki/CMake_Cross_Compiling#Information_how_to_set_up_various_cross_compiling_toolchains>`_ 580for a quick solution. 581 582Also see the `LLVM-specific variables`_ section for variables used when 583cross-compiling. 584 585Embedding LLVM in your project 586============================== 587 588From LLVM 3.5 onwards both the CMake and autoconf/Makefile build systems export 589LLVM libraries as importable CMake targets. This means that clients of LLVM can 590now reliably use CMake to develop their own LLVM-based projects against an 591installed version of LLVM regardless of how it was built. 592 593Here is a simple example of a CMakeLists.txt file that imports the LLVM libraries 594and uses them to build a simple application ``simple-tool``. 595 596.. code-block:: cmake 597 598 cmake_minimum_required(VERSION 3.4.3) 599 project(SimpleProject) 600 601 find_package(LLVM REQUIRED CONFIG) 602 603 message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") 604 message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") 605 606 # Set your project compile flags. 607 # E.g. if using the C++ header files 608 # you will need to enable C++11 support 609 # for your compiler. 610 611 include_directories(${LLVM_INCLUDE_DIRS}) 612 add_definitions(${LLVM_DEFINITIONS}) 613 614 # Now build our tools 615 add_executable(simple-tool tool.cpp) 616 617 # Find the libraries that correspond to the LLVM components 618 # that we wish to use 619 llvm_map_components_to_libnames(llvm_libs support core irreader) 620 621 # Link against LLVM libraries 622 target_link_libraries(simple-tool ${llvm_libs}) 623 624The ``find_package(...)`` directive when used in CONFIG mode (as in the above 625example) will look for the ``LLVMConfig.cmake`` file in various locations (see 626cmake manual for details). It creates a ``LLVM_DIR`` cache entry to save the 627directory where ``LLVMConfig.cmake`` is found or allows the user to specify the 628directory (e.g. by passing ``-DLLVM_DIR=/usr/lib/cmake/llvm`` to 629the ``cmake`` command or by setting it directly in ``ccmake`` or ``cmake-gui``). 630 631This file is available in two different locations. 632 633* ``<INSTALL_PREFIX>/lib/cmake/llvm/LLVMConfig.cmake`` where 634 ``<INSTALL_PREFIX>`` is the install prefix of an installed version of LLVM. 635 On Linux typically this is ``/usr/lib/cmake/llvm/LLVMConfig.cmake``. 636 637* ``<LLVM_BUILD_ROOT>/lib/cmake/llvm/LLVMConfig.cmake`` where 638 ``<LLVM_BUILD_ROOT>`` is the root of the LLVM build tree. **Note: this is only 639 available when building LLVM with CMake.** 640 641If LLVM is installed in your operating system's normal installation prefix (e.g. 642on Linux this is usually ``/usr/``) ``find_package(LLVM ...)`` will 643automatically find LLVM if it is installed correctly. If LLVM is not installed 644or you wish to build directly against the LLVM build tree you can use 645``LLVM_DIR`` as previously mentioned. 646 647The ``LLVMConfig.cmake`` file sets various useful variables. Notable variables 648include 649 650``LLVM_CMAKE_DIR`` 651 The path to the LLVM CMake directory (i.e. the directory containing 652 LLVMConfig.cmake). 653 654``LLVM_DEFINITIONS`` 655 A list of preprocessor defines that should be used when building against LLVM. 656 657``LLVM_ENABLE_ASSERTIONS`` 658 This is set to ON if LLVM was built with assertions, otherwise OFF. 659 660``LLVM_ENABLE_EH`` 661 This is set to ON if LLVM was built with exception handling (EH) enabled, 662 otherwise OFF. 663 664``LLVM_ENABLE_RTTI`` 665 This is set to ON if LLVM was built with run time type information (RTTI), 666 otherwise OFF. 667 668``LLVM_INCLUDE_DIRS`` 669 A list of include paths to directories containing LLVM header files. 670 671``LLVM_PACKAGE_VERSION`` 672 The LLVM version. This string can be used with CMake conditionals, e.g., ``if 673 (${LLVM_PACKAGE_VERSION} VERSION_LESS "3.5")``. 674 675``LLVM_TOOLS_BINARY_DIR`` 676 The path to the directory containing the LLVM tools (e.g. ``llvm-as``). 677 678Notice that in the above example we link ``simple-tool`` against several LLVM 679libraries. The list of libraries is determined by using the 680``llvm_map_components_to_libnames()`` CMake function. For a list of available 681components look at the output of running ``llvm-config --components``. 682 683Note that for LLVM < 3.5 ``llvm_map_components_to_libraries()`` was 684used instead of ``llvm_map_components_to_libnames()``. This is now deprecated 685and will be removed in a future version of LLVM. 686 687.. _cmake-out-of-source-pass: 688 689Developing LLVM passes out of source 690------------------------------------ 691 692It is possible to develop LLVM passes out of LLVM's source tree (i.e. against an 693installed or built LLVM). An example of a project layout is provided below. 694 695.. code-block:: none 696 697 <project dir>/ 698 | 699 CMakeLists.txt 700 <pass name>/ 701 | 702 CMakeLists.txt 703 Pass.cpp 704 ... 705 706Contents of ``<project dir>/CMakeLists.txt``: 707 708.. code-block:: cmake 709 710 find_package(LLVM REQUIRED CONFIG) 711 712 add_definitions(${LLVM_DEFINITIONS}) 713 include_directories(${LLVM_INCLUDE_DIRS}) 714 715 add_subdirectory(<pass name>) 716 717Contents of ``<project dir>/<pass name>/CMakeLists.txt``: 718 719.. code-block:: cmake 720 721 add_library(LLVMPassname MODULE Pass.cpp) 722 723Note if you intend for this pass to be merged into the LLVM source tree at some 724point in the future it might make more sense to use LLVM's internal 725``add_llvm_loadable_module`` function instead by... 726 727 728Adding the following to ``<project dir>/CMakeLists.txt`` (after 729``find_package(LLVM ...)``) 730 731.. code-block:: cmake 732 733 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") 734 include(AddLLVM) 735 736And then changing ``<project dir>/<pass name>/CMakeLists.txt`` to 737 738.. code-block:: cmake 739 740 add_llvm_loadable_module(LLVMPassname 741 Pass.cpp 742 ) 743 744When you are done developing your pass, you may wish to integrate it 745into the LLVM source tree. You can achieve it in two easy steps: 746 747#. Copying ``<pass name>`` folder into ``<LLVM root>/lib/Transform`` directory. 748 749#. Adding ``add_subdirectory(<pass name>)`` line into 750 ``<LLVM root>/lib/Transform/CMakeLists.txt``. 751 752Compiler/Platform-specific topics 753================================= 754 755Notes for specific compilers and/or platforms. 756 757Microsoft Visual C++ 758-------------------- 759 760**LLVM_COMPILER_JOBS**:STRING 761 Specifies the maximum number of parallel compiler jobs to use per project 762 when building with msbuild or Visual Studio. Only supported for the Visual 763 Studio 2010 CMake generator. 0 means use all processors. Default is 0. 764