xref: /llvm-project-15.0.7/llvm/docs/CMake.rst (revision 643dfd97)
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.13.4 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.  You may
69   also wish to control which targets LLVM enables, or which LLVM
70   components are built; see the `Frequently Used LLVM-related
71   variables`_ below.
72
73#. After CMake has finished running, proceed to use IDE project files, or start
74   the build from the build directory:
75
76   .. code-block:: console
77
78     $ cmake --build .
79
80   The ``--build`` option tells ``cmake`` to invoke the underlying build
81   tool (``make``, ``ninja``, ``xcodebuild``, ``msbuild``, etc.)
82
83   The underlying build tool can be invoked directly, of course, but
84   the ``--build`` option is portable.
85
86#. After LLVM has finished building, install it from the build directory:
87
88   .. code-block:: console
89
90     $ cmake --build . --target install
91
92   The ``--target`` option with ``install`` parameter in addition to
93   the ``--build`` option tells ``cmake`` to build the ``install`` target.
94
95   It is possible to set a different install prefix at installation time
96   by invoking the ``cmake_install.cmake`` script generated in the
97   build directory:
98
99   .. code-block:: console
100
101     $ cmake -DCMAKE_INSTALL_PREFIX=/tmp/llvm -P cmake_install.cmake
102
103.. _Basic CMake usage:
104.. _Usage:
105
106Basic CMake usage
107=================
108
109This section explains basic aspects of CMake
110which you may need in your day-to-day usage.
111
112CMake comes with extensive documentation, in the form of html files, and as
113online help accessible via the ``cmake`` executable itself. Execute ``cmake
114--help`` for further help options.
115
116CMake allows you to specify a build tool (e.g., GNU make, Visual Studio,
117or Xcode). If not specified on the command line, CMake tries to guess which
118build tool to use, based on your environment. Once it has identified your
119build tool, CMake uses the corresponding *Generator* to create files for your
120build tool (e.g., Makefiles or Visual Studio or Xcode project files). You can
121explicitly specify the generator with the command line option ``-G "Name of the
122generator"``. To see a list of the available generators on your system, execute
123
124.. code-block:: console
125
126  $ cmake --help
127
128This will list the generator names at the end of the help text.
129
130Generators' names are case-sensitive, and may contain spaces. For this reason,
131you should enter them exactly as they are listed in the ``cmake --help``
132output, in quotes. For example, to generate project files specifically for
133Visual Studio 12, you can execute:
134
135.. code-block:: console
136
137  $ cmake -G "Visual Studio 12" path/to/llvm/source/root
138
139For a given development platform there can be more than one adequate
140generator. If you use Visual Studio, "NMake Makefiles" is a generator you can use
141for building with NMake. By default, CMake chooses the most specific generator
142supported by your development environment. If you want an alternative generator,
143you must tell this to CMake with the ``-G`` option.
144
145.. todo::
146
147  Explain variables and cache. Move explanation here from #options section.
148
149.. _Options and variables:
150
151Options and variables
152=====================
153
154Variables customize how the build will be generated. Options are boolean
155variables, with possible values ON/OFF. Options and variables are defined on the
156CMake command line like this:
157
158.. code-block:: console
159
160  $ cmake -DVARIABLE=value path/to/llvm/source
161
162You can set a variable after the initial CMake invocation to change its
163value. You can also undefine a variable:
164
165.. code-block:: console
166
167  $ cmake -UVARIABLE path/to/llvm/source
168
169Variables are stored in the CMake cache. This is a file named ``CMakeCache.txt``
170stored at the root of your build directory that is generated by ``cmake``.
171Editing it yourself is not recommended.
172
173Variables are listed in the CMake cache and later in this document with
174the variable name and type separated by a colon. You can also specify the
175variable and type on the CMake command line:
176
177.. code-block:: console
178
179  $ cmake -DVARIABLE:TYPE=value path/to/llvm/source
180
181Frequently-used CMake variables
182-------------------------------
183
184Here are some of the CMake variables that are used often, along with a
185brief explanation. For full documentation, consult the CMake manual,
186or execute ``cmake --help-variable VARIABLE_NAME``.  See `Frequently
187Used LLVM-related Variables`_ below for information about commonly
188used variables that control features of LLVM and enabled subprojects.
189
190.. _cmake_build_type:
191
192**CMAKE_BUILD_TYPE**:STRING
193  This configures the optimization level for ``make`` or ``ninja`` builds.
194  The default ``CMAKE_BUILD_TYPE`` is set to ``Debug`` but you should
195  carefully read the list below to figure out what configuration matches
196  your use case the best.
197
198  Possible values:
199
200  =========================== ============= ========== ========== ==========================
201  Build Type                  Optimizations Debug Info Assertions Best suited for
202  =========================== ============= ========== ========== ==========================
203  **Release**                 For Speed     No         No         Users of LLVM and Clang
204  **Debug**                   None          Yes        Yes        Developers of LLVM
205  **RelWithDebInfo**          For Speed     Yes        No         Users that also need Debug
206  **MinSizeRel**              For Size      No         No         When disk space matters
207  =========================== ============= ========== ========== ==========================
208
209  * Optimizations make LLVM/Clang run faster, but can be an impediment for
210    step-by-step debugging.
211  * Builds with debug information can use a lot of RAM and disk space and is
212    usually slower to run. You can improve RAM usage by using ``lld``, see
213    the :ref:`LLVM_USE_LINKER <llvm_use_linker>` option.
214  * Assertions are internal checks to help you find bugs. They typically slow
215    down LLVM and Clang when enabled, but can be useful during development.
216    You can manually set :ref:`LLVM_ENABLE_ASSERTIONS <llvm_enable_assertions>`
217    to override the default from `CMAKE_BUILD_TYPE`.
218
219  If you are using an IDE such as Visual Studio or Xcode, you should use
220  the IDE settings to set the build type.
221
222**CMAKE_INSTALL_PREFIX**:PATH
223  Path where LLVM will be installed when the "install" target is built.
224
225**CMAKE_{C,CXX}_FLAGS**:STRING
226  Extra flags to use when compiling C and C++ source files respectively.
227
228**CMAKE_{C,CXX}_COMPILER**:STRING
229  Specify the C and C++ compilers to use. If you have multiple
230  compilers installed, CMake might not default to the one you wish to
231  use.
232
233.. _Frequently Used LLVM-related variables:
234
235Frequently Used LLVM-related variables
236--------------------------------------
237
238The default configuration may not match your requirements. Here are
239LLVM variables that are frequently used to control that. The full
240description is in `LLVM-related variables`_ below.
241
242**LLVM_ENABLE_PROJECTS**:STRING
243  Control which projects are enabled. For example you may want to work on clang
244  or lldb by specifying ``-DLLVM_ENABLE_PROJECTS="clang;lldb"``.
245
246**LLVM_ENABLE_RUNTIMES**:STRING
247  Control which runtimes are enabled. For example you may want to work on
248  libc++ or libc++abi by specifying ``-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"``.
249
250**LLVM_LIBDIR_SUFFIX**:STRING
251  Extra suffix to append to the directory where libraries are to be
252  installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
253  to install libraries to ``/usr/lib64``.
254
255**LLVM_PARALLEL_{COMPILE,LINK}_JOBS**:STRING
256  Building the llvm toolchain can use a lot of resources, particularly
257  linking. These options, when you use the Ninja generator, allow you
258  to restrict the parallelism. For example, to avoid OOMs or going
259  into swap, permit only one link job per 15GB of RAM available on a
260  32GB machine, specify ``-G Ninja -DLLVM_PARALLEL_LINK_JOBS=2``.
261
262**LLVM_TARGETS_TO_BUILD**:STRING
263  Control which targets are enabled. For example you may only need to enable
264  your native target with, for example, ``-DLLVM_TARGETS_TO_BUILD=X86``.
265
266.. _llvm_use_linker:
267
268**LLVM_USE_LINKER**:STRING
269  Override the system's default linker. For instance use ``lld`` with
270  ``-DLLVM_USE_LINKER=lld``.
271
272Rarely-used CMake variables
273---------------------------
274
275Here are some of the CMake variables that are rarely used, along with a brief
276explanation and LLVM-related notes.  For full documentation, consult the CMake
277manual, or execute ``cmake --help-variable VARIABLE_NAME``.
278
279**CMAKE_CXX_STANDARD**:STRING
280  Sets the C++ standard to conform to when building LLVM.  Possible values are
281  14, 17, 20.  LLVM Requires C++ 14 or higher.  This defaults to 14.
282
283**CMAKE_INSTALL_BINDIR**:PATH
284  The path to install executables, relative to the *CMAKE_INSTALL_PREFIX*.
285  Defaults to "bin".
286
287**CMAKE_INSTALL_INCLUDEDIR**:PATH
288  The path to install header files, relative to the *CMAKE_INSTALL_PREFIX*.
289  Defaults to "include".
290
291**CMAKE_INSTALL_DOCDIR**:PATH
292  The path to install documentation, relative to the *CMAKE_INSTALL_PREFIX*.
293  Defaults to "share/doc".
294
295**CMAKE_INSTALL_MANDIR**:PATH
296  The path to install manpage files, relative to the *CMAKE_INSTALL_PREFIX*.
297  Defaults to "share/man".
298
299.. _LLVM-related variables:
300
301LLVM-related variables
302-----------------------
303
304These variables provide fine control over the build of LLVM and
305enabled sub-projects. Nearly all of these variable names begin with
306``LLVM_``.
307
308**BUILD_SHARED_LIBS**:BOOL
309  Flag indicating if each LLVM component (e.g. Support) is built as a shared
310  library (ON) or as a static library (OFF). Its default value is OFF. On
311  Windows, shared libraries may be used when building with MinGW, including
312  mingw-w64, but not when building with the Microsoft toolchain.
313
314  .. note:: BUILD_SHARED_LIBS is only recommended for use by LLVM developers.
315            If you want to build LLVM as a shared library, you should use the
316            ``LLVM_BUILD_LLVM_DYLIB`` option.
317
318**LLVM_ABI_BREAKING_CHECKS**:STRING
319  Used to decide if LLVM should be built with ABI breaking checks or
320  not.  Allowed values are `WITH_ASSERTS` (default), `FORCE_ON` and
321  `FORCE_OFF`.  `WITH_ASSERTS` turns on ABI breaking checks in an
322  assertion enabled build.  `FORCE_ON` (`FORCE_OFF`) turns them on
323  (off) irrespective of whether normal (`NDEBUG`-based) assertions are
324  enabled or not.  A version of LLVM built with ABI breaking checks
325  is not ABI compatible with a version built without it.
326
327**LLVM_UNREACHABLE_OPTIMIZE**:BOOL
328  This flag controls the behavior of `llvm_unreachable()` in release build
329  (when assertions are disabled in general). When ON (default) then
330  `llvm_unreachable()` is considered "undefined behavior" and optimized as
331  such. When OFF it is instead replaced with a guaranteed "trap".
332
333**LLVM_APPEND_VC_REV**:BOOL
334  Embed version control revision info (Git revision id).
335  The version info is provided by the ``LLVM_REVISION`` macro in
336  ``llvm/include/llvm/Support/VCSRevision.h``. Developers using git who don't
337  need revision info can disable this option to avoid re-linking most binaries
338  after a branch switch. Defaults to ON.
339
340**LLVM_BUILD_32_BITS**:BOOL
341  Build 32-bit executables and libraries on 64-bit systems. This option is
342  available only on some 64-bit Unix systems. Defaults to OFF.
343
344**LLVM_BUILD_BENCHMARKS**:BOOL
345  Adds benchmarks to the list of default targets. Defaults to OFF.
346
347**LLVM_BUILD_DOCS**:BOOL
348  Adds all *enabled* documentation targets (i.e. Doxgyen and Sphinx targets) as
349  dependencies of the default build targets.  This results in all of the (enabled)
350  documentation targets being as part of a normal build.  If the ``install``
351  target is run then this also enables all built documentation targets to be
352  installed. Defaults to OFF.  To enable a particular documentation target, see
353  see LLVM_ENABLE_SPHINX and LLVM_ENABLE_DOXYGEN.
354
355**LLVM_BUILD_EXAMPLES**:BOOL
356  Build LLVM examples. Defaults to OFF. Targets for building each example are
357  generated in any case. See documentation for *LLVM_BUILD_TOOLS* above for more
358  details.
359
360**LLVM_BUILD_INSTRUMENTED_COVERAGE**:BOOL
361  If enabled, `source-based code coverage
362  <https://clang.llvm.org/docs/SourceBasedCodeCoverage.html>`_ instrumentation
363  is enabled while building llvm. If CMake can locate the code coverage
364  scripts and the llvm-cov and llvm-profdata tools that pair to your compiler,
365  the build will also generate the `generate-coverage-report` target to generate
366  the code coverage report for LLVM, and the `clear-profile-data` utility target
367  to delete captured profile data. See documentation for
368  *LLVM_CODE_COVERAGE_TARGETS* and *LLVM_COVERAGE_SOURCE_DIRS* for more
369  information on configuring code coverage reports.
370
371**LLVM_CODE_COVERAGE_TARGETS**:STRING
372  If set to a semicolon separated list of targets, those targets will be used
373  to drive the code coverage reports. If unset, the target list will be
374  constructed using the LLVM build's CMake export list.
375
376**LLVM_COVERAGE_SOURCE_DIRS**:STRING
377  If set to a semicolon separated list of directories, the coverage reports
378  will limit code coverage summaries to just the listed directories. If unset,
379  coverage reports will include all sources identified by the tooling.
380
381**LLVM_BUILD_LLVM_DYLIB**:BOOL
382  If enabled, the target for building the libLLVM shared library is added.
383  This library contains all of LLVM's components in a single shared library.
384  Defaults to OFF. This cannot be used in conjunction with BUILD_SHARED_LIBS.
385  Tools will only be linked to the libLLVM shared library if LLVM_LINK_LLVM_DYLIB
386  is also ON.
387  The components in the library can be customised by setting LLVM_DYLIB_COMPONENTS
388  to a list of the desired components.
389  This option is not available on Windows.
390
391**LLVM_BUILD_TESTS**:BOOL
392  Include LLVM unit tests in the 'all' build target. Defaults to OFF. Targets
393  for building each unit test are generated in any case. You can build a
394  specific unit test using the targets defined under *unittests*, such as
395  ADTTests, IRTests, SupportTests, etc. (Search for ``add_llvm_unittest`` in
396  the subdirectories of *unittests* for a complete list of unit tests.) It is
397  possible to build all unit tests with the target *UnitTests*.
398
399**LLVM_BUILD_TOOLS**:BOOL
400  Build LLVM tools. Defaults to ON. Targets for building each tool are generated
401  in any case. You can build a tool separately by invoking its target. For
402  example, you can build *llvm-as* with a Makefile-based system by executing *make
403  llvm-as* at the root of your build directory.
404
405**LLVM_CCACHE_BUILD**:BOOL
406  If enabled and the ``ccache`` program is available, then LLVM will be
407  built using ``ccache`` to speed up rebuilds of LLVM and its components.
408  Defaults to OFF.  The size and location of the cache maintained
409  by ``ccache`` can be adjusted via the LLVM_CCACHE_MAXSIZE and LLVM_CCACHE_DIR
410  options, which are passed to the CCACHE_MAXSIZE and CCACHE_DIR environment
411  variables, respectively.
412
413**LLVM_CREATE_XCODE_TOOLCHAIN**:BOOL
414  macOS Only: If enabled CMake will generate a target named
415  'install-xcode-toolchain'. This target will create a directory at
416  $CMAKE_INSTALL_PREFIX/Toolchains containing an xctoolchain directory which can
417  be used to override the default system tools.
418
419**LLVM_DEFAULT_TARGET_TRIPLE**:STRING
420  LLVM target to use for code generation when no target is explicitly specified.
421  It defaults to "host", meaning that it shall pick the architecture
422  of the machine where LLVM is being built. If you are building a cross-compiler,
423  set it to the target triple of your desired architecture.
424
425**LLVM_DOXYGEN_QCH_FILENAME**:STRING
426  The filename of the Qt Compressed Help file that will be generated when
427  ``-DLLVM_ENABLE_DOXYGEN=ON`` and
428  ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON`` are given. Defaults to
429  ``org.llvm.qch``.
430  This option is only useful in combination with
431  ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
432  otherwise it has no effect.
433
434**LLVM_DOXYGEN_QHELPGENERATOR_PATH**:STRING
435  The path to the ``qhelpgenerator`` executable. Defaults to whatever CMake's
436  ``find_program()`` can find. This option is only useful in combination with
437  ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise it has no
438  effect.
439
440**LLVM_DOXYGEN_QHP_CUST_FILTER_NAME**:STRING
441  See `Qt Help Project`_ for
442  more information. Defaults to the CMake variable ``${PACKAGE_STRING}`` which
443  is a combination of the package name and version string. This filter can then
444  be used in Qt Creator to select only documentation from LLVM when browsing
445  through all the help files that you might have loaded. This option is only
446  useful in combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
447  otherwise it has no effect.
448
449.. _Qt Help Project: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters
450
451**LLVM_DOXYGEN_QHP_NAMESPACE**:STRING
452  Namespace under which the intermediate Qt Help Project file lives. See `Qt
453  Help Project`_
454  for more information. Defaults to "org.llvm". This option is only useful in
455  combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise
456  it has no effect.
457
458**LLVM_DOXYGEN_SVG**:BOOL
459  Uses .svg files instead of .png files for graphs in the Doxygen output.
460  Defaults to OFF.
461
462.. _llvm_enable_assertions:
463
464**LLVM_ENABLE_ASSERTIONS**:BOOL
465  Enables code assertions. Defaults to ON if and only if ``CMAKE_BUILD_TYPE``
466  is *Debug*.
467
468**LLVM_ENABLE_BINDINGS**:BOOL
469  If disabled, do not try to build the OCaml and go bindings.
470
471**LLVM_ENABLE_DIA_SDK**:BOOL
472  Enable building with MSVC DIA SDK for PDB debugging support. Available
473  only with MSVC. Defaults to ON.
474
475**LLVM_ENABLE_DOXYGEN**:BOOL
476  Enables the generation of browsable HTML documentation using doxygen.
477  Defaults to OFF.
478
479**LLVM_ENABLE_DOXYGEN_QT_HELP**:BOOL
480  Enables the generation of a Qt Compressed Help file. Defaults to OFF.
481  This affects the make target ``doxygen-llvm``. When enabled, apart from
482  the normal HTML output generated by doxygen, this will produce a QCH file
483  named ``org.llvm.qch``. You can then load this file into Qt Creator.
484  This option is only useful in combination with ``-DLLVM_ENABLE_DOXYGEN=ON``;
485  otherwise this has no effect.
486
487**LLVM_ENABLE_EH**:BOOL
488  Build LLVM with exception-handling support. This is necessary if you wish to
489  link against LLVM libraries and make use of C++ exceptions in your own code
490  that need to propagate through LLVM code. Defaults to OFF.
491
492**LLVM_ENABLE_EXPENSIVE_CHECKS**:BOOL
493  Enable additional time/memory expensive checking. Defaults to OFF.
494
495**LLVM_ENABLE_FFI**:BOOL
496  Indicates whether the LLVM Interpreter will be linked with the Foreign Function
497  Interface library (libffi) in order to enable calling external functions.
498  If the library or its headers are installed in a custom
499  location, you can also set the variables FFI_INCLUDE_DIR and
500  FFI_LIBRARY_DIR to the directories where ffi.h and libffi.so can be found,
501  respectively. Defaults to OFF.
502
503**LLVM_ENABLE_IDE**:BOOL
504  Tell the build system that an IDE is being used. This in turn disables the
505  creation of certain convenience build system targets, such as the various
506  ``install-*`` and ``check-*`` targets, since IDEs don't always deal well with
507  a large number of targets. This is usually autodetected, but it can be
508  configured manually to explicitly control the generation of those targets.
509
510**LLVM_ENABLE_LIBCXX**:BOOL
511  If the host compiler and linker supports the stdlib flag, -stdlib=libc++ is
512  passed to invocations of both so that the project is built using libc++
513  instead of stdlibc++. Defaults to OFF.
514
515**LLVM_ENABLE_LIBPFM**:BOOL
516  Enable building with libpfm to support hardware counter measurements in LLVM
517  tools.
518  Defaults to ON.
519
520**LLVM_ENABLE_LLD**:BOOL
521  This option is equivalent to `-DLLVM_USE_LINKER=lld`, except during a 2-stage
522  build where a dependency is added from the first stage to the second ensuring
523  that lld is built before stage2 begins.
524
525**LLVM_ENABLE_LTO**:STRING
526  Add ``-flto`` or ``-flto=`` flags to the compile and link command
527  lines, enabling link-time optimization. Possible values are ``Off``,
528  ``On``, ``Thin`` and ``Full``. Defaults to OFF.
529
530**LLVM_ENABLE_MODULES**:BOOL
531  Compile with `Clang Header Modules
532  <https://clang.llvm.org/docs/Modules.html>`_.
533
534**LLVM_ENABLE_PEDANTIC**:BOOL
535  Enable pedantic mode. This disables compiler-specific extensions, if
536  possible. Defaults to ON.
537
538**LLVM_ENABLE_PIC**:BOOL
539  Add the ``-fPIC`` flag to the compiler command-line, if the compiler supports
540  this flag. Some systems, like Windows, do not need this flag. Defaults to ON.
541
542**LLVM_ENABLE_PROJECTS**:STRING
543  Semicolon-separated list of projects to build, or *all* for building all
544  (clang, lldb, lld, polly, etc) projects. This flag assumes that projects
545  are checked out side-by-side and not nested, i.e. clang needs to be in
546  parallel of llvm instead of nested in `llvm/tools`. This feature allows
547  to have one build for only LLVM and another for clang+llvm using the same
548  source checkout.
549  The full list is:
550  ``clang;clang-tools-extra;cross-project-tests;libc;libclc;lld;lldb;openmp;polly;pstl``
551
552**LLVM_ENABLE_RUNTIMES**:STRING
553  Build libc++, libc++abi, libunwind or compiler-rt using the just-built compiler.
554  This is the correct way to build runtimes when putting together a toolchain.
555  It will build the builtins separately from the other runtimes to preserve
556  correct dependency ordering. If you want to build the runtimes using a system
557  compiler, see the `libc++ documentation <https://libcxx.llvm.org/BuildingLibcxx.html>`_.
558  Note: the list should not have duplicates with `LLVM_ENABLE_PROJECTS`.
559  The full list is:
560  ``compiler-rt;libc;libcxx;libcxxabi;libunwind;openmp``
561  To enable all of them, use:
562  ``LLVM_ENABLE_RUNTIMES=all``
563
564
565**LLVM_ENABLE_RTTI**:BOOL
566  Build LLVM with run-time type information. Defaults to OFF.
567
568**LLVM_ENABLE_SPHINX**:BOOL
569  If specified, CMake will search for the ``sphinx-build`` executable and will make
570  the ``SPHINX_OUTPUT_HTML`` and ``SPHINX_OUTPUT_MAN`` CMake options available.
571  Defaults to OFF.
572
573**LLVM_ENABLE_THREADS**:BOOL
574  Build with threads support, if available. Defaults to ON.
575
576**LLVM_ENABLE_UNWIND_TABLES**:BOOL
577  Enable unwind tables in the binary.  Disabling unwind tables can reduce the
578  size of the libraries.  Defaults to ON.
579
580**LLVM_ENABLE_WARNINGS**:BOOL
581  Enable all compiler warnings. Defaults to ON.
582
583**LLVM_ENABLE_WERROR**:BOOL
584  Stop and fail the build, if a compiler warning is triggered. Defaults to OFF.
585
586**LLVM_ENABLE_Z3_SOLVER**:BOOL
587  If enabled, the Z3 constraint solver is activated for the Clang static analyzer.
588  A recent version of the z3 library needs to be available on the system.
589
590**LLVM_ENABLE_ZLIB**:BOOL
591  Enable building with zlib to support compression/uncompression in LLVM tools.
592  Defaults to ON.
593
594**LLVM_EXPERIMENTAL_TARGETS_TO_BUILD**:STRING
595  Semicolon-separated list of experimental targets to build and linked into
596  llvm. This will build the experimental target without needing it to add to the
597  list of all the targets available in the LLVM's main CMakeLists.txt.
598
599**LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR**:PATH
600  These variables specify the path to the source directory for the external
601  LLVM projects Clang, lld, and Polly, respectively, relative to the top-level
602  source directory.  If the in-tree subdirectory for an external project
603  exists (e.g., llvm/tools/clang for Clang), then the corresponding variable
604  will not be used.  If the variable for an external project does not point
605  to a valid path, then that project will not be built.
606
607**LLVM_EXTERNAL_PROJECTS**:STRING
608  Semicolon-separated list of additional external projects to build as part of
609  llvm. For each project LLVM_EXTERNAL_<NAME>_SOURCE_DIR have to be specified
610  with the path for the source code of the project. Example:
611  ``-DLLVM_EXTERNAL_PROJECTS="Foo;Bar"
612  -DLLVM_EXTERNAL_FOO_SOURCE_DIR=/src/foo
613  -DLLVM_EXTERNAL_BAR_SOURCE_DIR=/src/bar``.
614
615**LLVM_EXTERNALIZE_DEBUGINFO**:BOOL
616  Generate dSYM files and strip executables and libraries (Darwin Only).
617  Defaults to OFF.
618
619**LLVM_FORCE_USE_OLD_TOOLCHAIN**:BOOL
620  If enabled, the compiler and standard library versions won't be checked. LLVM
621  may not compile at all, or might fail at runtime due to known bugs in these
622  toolchains.
623
624**LLVM_INCLUDE_BENCHMARKS**:BOOL
625  Generate build targets for the LLVM benchmarks. Defaults to ON.
626
627**LLVM_INCLUDE_EXAMPLES**:BOOL
628  Generate build targets for the LLVM examples. Defaults to ON. You can use this
629  option to disable the generation of build targets for the LLVM examples.
630
631**LLVM_INCLUDE_TESTS**:BOOL
632  Generate build targets for the LLVM unit tests. Defaults to ON. You can use
633  this option to disable the generation of build targets for the LLVM unit
634  tests.
635
636**LLVM_INCLUDE_TOOLS**:BOOL
637  Generate build targets for the LLVM tools. Defaults to ON. You can use this
638  option to disable the generation of build targets for the LLVM tools.
639
640**LLVM_INSTALL_BINUTILS_SYMLINKS**:BOOL
641  Install symlinks from the binutils tool names to the corresponding LLVM tools.
642  For example, ar will be symlinked to llvm-ar.
643
644**LLVM_INSTALL_CCTOOLS_SYMLINKS**:BOOL
645  Install symliks from the cctools tool names to the corresponding LLVM tools.
646  For example, lipo will be symlinked to llvm-lipo.
647
648**LLVM_INSTALL_OCAMLDOC_HTML_DIR**:STRING
649  The path to install OCamldoc-generated HTML documentation to. This path can
650  either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to
651  ``${CMAKE_INSTALL_DOCDIR}/llvm/ocaml-html``.
652
653**LLVM_INSTALL_SPHINX_HTML_DIR**:STRING
654  The path to install Sphinx-generated HTML documentation to. This path can
655  either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to
656  ``${CMAKE_INSTALL_DOCDIR}/llvm/html``.
657
658**LLVM_INSTALL_UTILS**:BOOL
659  If enabled, utility binaries like ``FileCheck`` and ``not`` will be installed
660  to CMAKE_INSTALL_PREFIX.
661
662**LLVM_INTEGRATED_CRT_ALLOC**:PATH
663  On Windows, allows embedding a different C runtime allocator into the LLVM
664  tools and libraries. Using a lock-free allocator such as the ones listed below
665  greatly decreases ThinLTO link time by about an order of magnitude. It also
666  midly improves Clang build times, by about 5-10%. At the moment, rpmalloc,
667  snmalloc and mimalloc are supported. Use the path to `git clone` to select
668  the respective allocator, for example:
669
670  .. code-block:: console
671
672    $ D:\git> git clone https://github.com/mjansson/rpmalloc
673    $ D:\llvm-project> cmake ... -DLLVM_INTEGRATED_CRT_ALLOC=D:\git\rpmalloc
674
675  This flag needs to be used along with the static CRT, ie. if building the
676  Release target, add -DLLVM_USE_CRT_RELEASE=MT.
677
678**LLVM_INSTALL_DOXYGEN_HTML_DIR**:STRING
679  The path to install Doxygen-generated HTML documentation to. This path can
680  either be absolute or relative to the *CMAKE_INSTALL_PREFIX*. Defaults to
681  ``${CMAKE_INSTALL_DOCDIR}/llvm/doxygen-html``.
682
683**LLVM_LINK_LLVM_DYLIB**:BOOL
684  If enabled, tools will be linked with the libLLVM shared library. Defaults
685  to OFF. Setting LLVM_LINK_LLVM_DYLIB to ON also sets LLVM_BUILD_LLVM_DYLIB
686  to ON.
687  This option is not available on Windows.
688
689**LLVM_LIT_ARGS**:STRING
690  Arguments given to lit.  ``make check`` and ``make clang-test`` are affected.
691  By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
692  others.
693
694**LLVM_LIT_TOOLS_DIR**:PATH
695  The path to GnuWin32 tools for tests. Valid on Windows host.  Defaults to
696  the empty string, in which case lit will look for tools needed for tests
697  (e.g. ``grep``, ``sort``, etc.) in your %PATH%. If GnuWin32 is not in your
698  %PATH%, then you can set this variable to the GnuWin32 directory so that
699  lit can find tools needed for tests in that directory.
700
701**LLVM_OPTIMIZED_TABLEGEN**:BOOL
702  If enabled and building a debug or asserts build the CMake build system will
703  generate a Release build tree to build a fully optimized tablegen for use
704  during the build. Enabling this option can significantly speed up build times
705  especially when building LLVM in Debug configurations.
706
707**LLVM_PARALLEL_COMPILE_JOBS**:STRING
708  Define the maximum number of concurrent compilation jobs.
709
710**LLVM_PARALLEL_LINK_JOBS**:STRING
711  Define the maximum number of concurrent link jobs.
712
713**LLVM_PROFDATA_FILE**:PATH
714  Path to a profdata file to pass into clang's -fprofile-instr-use flag. This
715  can only be specified if you're building with clang.
716
717**LLVM_REVERSE_ITERATION**:BOOL
718  If enabled, all supported unordered llvm containers would be iterated in
719  reverse order. This is useful for uncovering non-determinism caused by
720  iteration of unordered containers.
721
722**LLVM_STATIC_LINK_CXX_STDLIB**:BOOL
723  Statically link to the C++ standard library if possible. This uses the flag
724  "-static-libstdc++", but a Clang host compiler will statically link to libc++
725  if used in conjunction with the **LLVM_ENABLE_LIBCXX** flag. Defaults to OFF.
726
727**LLVM_TABLEGEN**:STRING
728  Full path to a native TableGen executable (usually named ``llvm-tblgen``). This is
729  intended for cross-compiling: if the user sets this variable, no native
730  TableGen will be created.
731
732**LLVM_TARGET_ARCH**:STRING
733  LLVM target to use for native code generation. This is required for JIT
734  generation. It defaults to "host", meaning that it shall pick the architecture
735  of the machine where LLVM is being built. If you are cross-compiling, set it
736  to the target architecture name.
737
738**LLVM_TARGETS_TO_BUILD**:STRING
739  Semicolon-separated list of targets to build, or *all* for building all
740  targets. Case-sensitive. Defaults to *all*. Example:
741  ``-DLLVM_TARGETS_TO_BUILD="X86;PowerPC"``.
742
743**LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN**:BOOL
744  If enabled, the compiler version check will only warn when using a toolchain
745  which is about to be deprecated, instead of emitting an error.
746
747**LLVM_UBSAN_FLAGS**:STRING
748  Defines the set of compile flags used to enable UBSan. Only used if
749  ``LLVM_USE_SANITIZER`` contains ``Undefined``. This can be used to override
750  the default set of UBSan flags.
751
752**LLVM_USE_CRT_{target}**:STRING
753  On Windows, tells which version of the C runtime library (CRT) should be used.
754  For example, -DLLVM_USE_CRT_RELEASE=MT would statically link the CRT into the
755  LLVM tools and library.
756
757**LLVM_USE_INTEL_JITEVENTS**:BOOL
758  Enable building support for Intel JIT Events API. Defaults to OFF.
759
760**LLVM_USE_LINKER**:STRING
761  Add ``-fuse-ld={name}`` to the link invocation. The possible value depend on
762  your compiler, for clang the value can be an absolute path to your custom
763  linker, otherwise clang will prefix the name with ``ld.`` and apply its usual
764  search. For example to link LLVM with the Gold linker, cmake can be invoked
765  with ``-DLLVM_USE_LINKER=gold``.
766
767**LLVM_USE_OPROFILE**:BOOL
768  Enable building OProfile JIT support. Defaults to OFF.
769
770**LLVM_USE_PERF**:BOOL
771  Enable building support for Perf (linux profiling tool) JIT support. Defaults to OFF.
772
773**LLVM_USE_RELATIVE_PATHS_IN_FILES**:BOOL
774  Rewrite absolute source paths in sources and debug info to relative ones. The
775  source prefix can be adjusted via the LLVM_SOURCE_PREFIX variable.
776
777**LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO**:BOOL
778  Rewrite absolute source paths in debug info to relative ones. The source prefix
779  can be adjusted via the LLVM_SOURCE_PREFIX variable.
780
781**LLVM_USE_SANITIZER**:STRING
782  Define the sanitizer used to build LLVM binaries and tests. Possible values
783  are ``Address``, ``Memory``, ``MemoryWithOrigins``, ``Undefined``, ``Thread``,
784  ``DataFlow``, and ``Address;Undefined``. Defaults to empty string.
785
786**LLVM_USE_SPLIT_DWARF**:BOOL
787  If enabled CMake will pass ``-gsplit-dwarf`` to the compiler. This option
788  reduces link-time memory usage by reducing the amount of debug information that
789  the linker needs to resolve. It is recommended for platforms using the ELF object
790  format, like Linux systems when linker memory usage is too high.
791
792**SPHINX_EXECUTABLE**:STRING
793  The path to the ``sphinx-build`` executable detected by CMake.
794  For installation instructions, see
795  https://www.sphinx-doc.org/en/master/usage/installation.html
796
797**SPHINX_OUTPUT_HTML**:BOOL
798  If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) then the targets for
799  building the documentation as html are added (but not built by default unless
800  ``LLVM_BUILD_DOCS`` is enabled). There is a target for each project in the
801  source tree that uses sphinx (e.g.  ``docs-llvm-html``, ``docs-clang-html``
802  and ``docs-lld-html``). Defaults to ON.
803
804**SPHINX_OUTPUT_MAN**:BOOL
805  If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) the targets for building
806  the man pages are added (but not built by default unless ``LLVM_BUILD_DOCS``
807  is enabled). Currently the only target added is ``docs-llvm-man``. Defaults
808  to ON.
809
810**SPHINX_WARNINGS_AS_ERRORS**:BOOL
811  If enabled then sphinx documentation warnings will be treated as
812  errors. Defaults to ON.
813
814Advanced variables
815~~~~~~~~~~~~~~~~~~
816
817These are niche, and changing them from their defaults is more likely to cause
818things to go wrong.  They are also unstable across LLVM versions.
819
820**LLVM_TOOLS_INSTALL_DIR**:STRING
821  The path to install the main LLVM tools, relative to the *CMAKE_INSTALL_PREFIX*.
822  Defaults to *CMAKE_INSTALL_BINDIR*.
823
824**LLVM_UTILS_INSTALL_DIR**:STRING
825  The path to install auxiliary LLVM utilities, relative to the *CMAKE_INSTALL_PREFIX*.
826  Only matters if *LLVM_INSTALL_UTILS* is enabled.
827  Defaults to *LLVM_TOOLS_INSTALL_DIR*.
828
829**LLVM_EXAMPLES_INSTALL_DIR**:STRING
830  The path for examples of using LLVM, relative to the *CMAKE_INSTALL_PREFIX*.
831  Only matters if *LLVM_BUILD_EXAMPLES* is enabled.
832  Defaults to "examples".
833
834CMake Caches
835============
836
837Recently LLVM and Clang have been adding some more complicated build system
838features. Utilizing these new features often involves a complicated chain of
839CMake variables passed on the command line. Clang provides a collection of CMake
840cache scripts to make these features more approachable.
841
842CMake cache files are utilized using CMake's -C flag:
843
844.. code-block:: console
845
846  $ cmake -C <path to cache file> <path to sources>
847
848CMake cache scripts are processed in an isolated scope, only cached variables
849remain set when the main configuration runs. CMake cached variables do not reset
850variables that are already set unless the FORCE option is specified.
851
852A few notes about CMake Caches:
853
854- Order of command line arguments is important
855
856  - -D arguments specified before -C are set before the cache is processed and
857    can be read inside the cache file
858  - -D arguments specified after -C are set after the cache is processed and
859    are unset inside the cache file
860
861- All -D arguments will override cache file settings
862- CMAKE_TOOLCHAIN_FILE is evaluated after both the cache file and the command
863  line arguments
864- It is recommended that all -D options should be specified *before* -C
865
866For more information about some of the advanced build configurations supported
867via Cache files see :doc:`AdvancedBuilds`.
868
869Executing the Tests
870===================
871
872Testing is performed when the *check-all* target is built. For instance, if you are
873using Makefiles, execute this command in the root of your build directory:
874
875.. code-block:: console
876
877  $ make check-all
878
879On Visual Studio, you may run tests by building the project "check-all".
880For more information about testing, see the :doc:`TestingGuide`.
881
882Cross compiling
883===============
884
885See `this wiki page <https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling>`_ for
886generic instructions on how to cross-compile with CMake. It goes into detailed
887explanations and may seem daunting, but it is not. On the wiki page there are
888several examples including toolchain files. Go directly to the
889``Information how to set up various cross compiling toolchains`` section
890for a quick solution.
891
892Also see the `LLVM-related variables`_ section for variables used when
893cross-compiling.
894
895Embedding LLVM in your project
896==============================
897
898From LLVM 3.5 onwards the CMake build system exports LLVM libraries as
899importable CMake targets. This means that clients of LLVM can now reliably use
900CMake to develop their own LLVM-based projects against an installed version of
901LLVM regardless of how it was built.
902
903Here is a simple example of a CMakeLists.txt file that imports the LLVM libraries
904and uses them to build a simple application ``simple-tool``.
905
906.. code-block:: cmake
907
908  cmake_minimum_required(VERSION 3.13.4)
909  project(SimpleProject)
910
911  find_package(LLVM REQUIRED CONFIG)
912
913  message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
914  message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
915
916  # Set your project compile flags.
917  # E.g. if using the C++ header files
918  # you will need to enable C++11 support
919  # for your compiler.
920
921  include_directories(${LLVM_INCLUDE_DIRS})
922  separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
923  add_definitions(${LLVM_DEFINITIONS_LIST})
924
925  # Now build our tools
926  add_executable(simple-tool tool.cpp)
927
928  # Find the libraries that correspond to the LLVM components
929  # that we wish to use
930  llvm_map_components_to_libnames(llvm_libs support core irreader)
931
932  # Link against LLVM libraries
933  target_link_libraries(simple-tool ${llvm_libs})
934
935The ``find_package(...)`` directive when used in CONFIG mode (as in the above
936example) will look for the ``LLVMConfig.cmake`` file in various locations (see
937cmake manual for details).  It creates a ``LLVM_DIR`` cache entry to save the
938directory where ``LLVMConfig.cmake`` is found or allows the user to specify the
939directory (e.g. by passing ``-DLLVM_DIR=/usr/lib/cmake/llvm`` to
940the ``cmake`` command or by setting it directly in ``ccmake`` or ``cmake-gui``).
941
942This file is available in two different locations.
943
944* ``<INSTALL_PREFIX>/lib/cmake/llvm/LLVMConfig.cmake`` where
945  ``<INSTALL_PREFIX>`` is the install prefix of an installed version of LLVM.
946  On Linux typically this is ``/usr/lib/cmake/llvm/LLVMConfig.cmake``.
947
948* ``<LLVM_BUILD_ROOT>/lib/cmake/llvm/LLVMConfig.cmake`` where
949  ``<LLVM_BUILD_ROOT>`` is the root of the LLVM build tree. **Note: this is only
950  available when building LLVM with CMake.**
951
952If LLVM is installed in your operating system's normal installation prefix (e.g.
953on Linux this is usually ``/usr/``) ``find_package(LLVM ...)`` will
954automatically find LLVM if it is installed correctly. If LLVM is not installed
955or you wish to build directly against the LLVM build tree you can use
956``LLVM_DIR`` as previously mentioned.
957
958The ``LLVMConfig.cmake`` file sets various useful variables. Notable variables
959include
960
961``LLVM_CMAKE_DIR``
962  The path to the LLVM CMake directory (i.e. the directory containing
963  LLVMConfig.cmake).
964
965``LLVM_DEFINITIONS``
966  A list of preprocessor defines that should be used when building against LLVM.
967
968``LLVM_ENABLE_ASSERTIONS``
969  This is set to ON if LLVM was built with assertions, otherwise OFF.
970
971``LLVM_ENABLE_EH``
972  This is set to ON if LLVM was built with exception handling (EH) enabled,
973  otherwise OFF.
974
975``LLVM_ENABLE_RTTI``
976  This is set to ON if LLVM was built with run time type information (RTTI),
977  otherwise OFF.
978
979``LLVM_INCLUDE_DIRS``
980  A list of include paths to directories containing LLVM header files.
981
982``LLVM_PACKAGE_VERSION``
983  The LLVM version. This string can be used with CMake conditionals, e.g., ``if
984  (${LLVM_PACKAGE_VERSION} VERSION_LESS "3.5")``.
985
986``LLVM_TOOLS_BINARY_DIR``
987  The path to the directory containing the LLVM tools (e.g. ``llvm-as``).
988
989Notice that in the above example we link ``simple-tool`` against several LLVM
990libraries. The list of libraries is determined by using the
991``llvm_map_components_to_libnames()`` CMake function. For a list of available
992components look at the output of running ``llvm-config --components``.
993
994Note that for LLVM < 3.5 ``llvm_map_components_to_libraries()`` was
995used instead of ``llvm_map_components_to_libnames()``. This is now deprecated
996and will be removed in a future version of LLVM.
997
998.. _cmake-out-of-source-pass:
999
1000Developing LLVM passes out of source
1001------------------------------------
1002
1003It is possible to develop LLVM passes out of LLVM's source tree (i.e. against an
1004installed or built LLVM). An example of a project layout is provided below.
1005
1006.. code-block:: none
1007
1008  <project dir>/
1009      |
1010      CMakeLists.txt
1011      <pass name>/
1012          |
1013          CMakeLists.txt
1014          Pass.cpp
1015          ...
1016
1017Contents of ``<project dir>/CMakeLists.txt``:
1018
1019.. code-block:: cmake
1020
1021  find_package(LLVM REQUIRED CONFIG)
1022
1023  separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
1024  add_definitions(${LLVM_DEFINITIONS_LIST})
1025  include_directories(${LLVM_INCLUDE_DIRS})
1026
1027  add_subdirectory(<pass name>)
1028
1029Contents of ``<project dir>/<pass name>/CMakeLists.txt``:
1030
1031.. code-block:: cmake
1032
1033  add_library(LLVMPassname MODULE Pass.cpp)
1034
1035Note if you intend for this pass to be merged into the LLVM source tree at some
1036point in the future it might make more sense to use LLVM's internal
1037``add_llvm_library`` function with the MODULE argument instead by...
1038
1039
1040Adding the following to ``<project dir>/CMakeLists.txt`` (after
1041``find_package(LLVM ...)``)
1042
1043.. code-block:: cmake
1044
1045  list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
1046  include(AddLLVM)
1047
1048And then changing ``<project dir>/<pass name>/CMakeLists.txt`` to
1049
1050.. code-block:: cmake
1051
1052  add_llvm_library(LLVMPassname MODULE
1053    Pass.cpp
1054    )
1055
1056When you are done developing your pass, you may wish to integrate it
1057into the LLVM source tree. You can achieve it in two easy steps:
1058
1059#. Copying ``<pass name>`` folder into ``<LLVM root>/lib/Transform`` directory.
1060
1061#. Adding ``add_subdirectory(<pass name>)`` line into
1062   ``<LLVM root>/lib/Transform/CMakeLists.txt``.
1063
1064Compiler/Platform-specific topics
1065=================================
1066
1067Notes for specific compilers and/or platforms.
1068
1069Windows
1070-------
1071
1072**LLVM_COMPILER_JOBS**:STRING
1073  Specifies the maximum number of parallel compiler jobs to use per project
1074  when building with msbuild or Visual Studio. Only supported for the Visual
1075  Studio 2010 CMake generator. 0 means use all processors. Default is 0.
1076
1077**CMAKE_MT**:STRING
1078  When compiling with clang-cl, recent CMake versions will default to selecting
1079  `llvm-mt` as the Manifest Tool instead of Microsoft's `mt.exe`. This will
1080  often cause errors like:
1081
1082  .. code-block:: console
1083
1084    -- Check for working C compiler: [...]clang-cl.exe - broken
1085    [...]
1086        MT: command [...] failed (exit code 0x1) with the following output:
1087        llvm-mt: error: no libxml2
1088        ninja: build stopped: subcommand failed.
1089
1090  To work around this error, set `CMAKE_MT=mt`.
1091