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