blob: 7f667e72946fca2fa1a3206efb6cf73230b66d39 [file] [log] [blame]
Bill Wendlingfab09c62012-07-06 05:51:50 +00001========================
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
Vedant Kumar951f8572015-08-25 00:09:47 +000013(GNU make, Visual Studio, etc.) for building LLVM.
Bill Wendlingfab09c62012-07-06 05:51:50 +000014
15If you are really anxious about getting a functional LLVM build, go to the
Vedant Kumar951f8572015-08-25 00:09:47 +000016`Quick start`_ section. If you are a CMake novice, start with `Basic CMake usage`_
17and then go back to the `Quick start`_ section once you know what you are doing. The
Bill Wendlingfab09c62012-07-06 05:51:50 +000018`Options and variables`_ section is a reference for customizing your build. If
19you already have experience with CMake, this is the recommended starting point.
20
21.. _Quick start:
22
23Quick start
24===========
25
26We use here the command-line, non-interactive CMake interface.
27
28#. `Download <http://www.cmake.org/cmake/resources/software.html>`_ and install
Eric Christopher2aa83ff2016-01-04 23:22:43 +000029 CMake. Version 2.8.8 is the minimum required, but if you're using the Ninja
30 backend, CMake v3.2 or newer is required to `get interactive output
31 <http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20141117/244797.html>`_
32 when running :doc:`Lit <CommandGuide/lit>`.
Bill Wendlingfab09c62012-07-06 05:51:50 +000033
34#. Open a shell. Your development tools must be reachable from this shell
35 through the PATH environment variable.
36
Vedant Kumar951f8572015-08-25 00:09:47 +000037#. Create a build directory. Building LLVM in the source
38 directory is not supported. cd to this directory:
Bill Wendlingfab09c62012-07-06 05:51:50 +000039
Dmitri Gribenko99e8b432012-12-12 14:23:14 +000040 .. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +000041
42 $ mkdir mybuilddir
43 $ cd mybuilddir
44
Vedant Kumar951f8572015-08-25 00:09:47 +000045#. Execute this command in the shell replacing `path/to/llvm/source/root` with
Bill Wendlingfab09c62012-07-06 05:51:50 +000046 the path to the root of your LLVM source tree:
47
Dmitri Gribenko99e8b432012-12-12 14:23:14 +000048 .. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +000049
50 $ cmake path/to/llvm/source/root
51
Vedant Kumar951f8572015-08-25 00:09:47 +000052 CMake will detect your development environment, perform a series of tests, and
Bill Wendlingfab09c62012-07-06 05:51:50 +000053 generate the files required for building LLVM. CMake will use default values
54 for all build parameters. See the `Options and variables`_ section for
Vedant Kumar951f8572015-08-25 00:09:47 +000055 a list of build parameters that you can modify.
Bill Wendlingfab09c62012-07-06 05:51:50 +000056
57 This can fail if CMake can't detect your toolset, or if it thinks that the
Vedant Kumar951f8572015-08-25 00:09:47 +000058 environment is not sane enough. In this case, make sure that the toolset that
59 you intend to use is the only one reachable from the shell, and that the shell
60 itself is the correct one for your development environment. CMake will refuse
Bill Wendlingfab09c62012-07-06 05:51:50 +000061 to build MinGW makefiles if you have a POSIX shell reachable through the PATH
62 environment variable, for instance. You can force CMake to use a given build
Vedant Kumar951f8572015-08-25 00:09:47 +000063 tool; for instructions, see the `Usage`_ section, below.
Bill Wendlingfab09c62012-07-06 05:51:50 +000064
Vedant Kumar951f8572015-08-25 00:09:47 +000065#. After CMake has finished running, proceed to use IDE project files, or start
Tom Stellard3236c722015-02-13 16:15:32 +000066 the build from the build directory:
67
68 .. code-block:: console
69
70 $ cmake --build .
71
72 The ``--build`` option tells ``cmake`` to invoke the underlying build
Vedant Kumar951f8572015-08-25 00:09:47 +000073 tool (``make``, ``ninja``, ``xcodebuild``, ``msbuild``, etc.)
Tom Stellard3236c722015-02-13 16:15:32 +000074
Vedant Kumar951f8572015-08-25 00:09:47 +000075 The underlying build tool can be invoked directly, of course, but
Tom Stellard3236c722015-02-13 16:15:32 +000076 the ``--build`` option is portable.
77
78#. After LLVM has finished building, install it from the build directory:
79
80 .. code-block:: console
81
82 $ cmake --build . --target install
83
84 The ``--target`` option with ``install`` parameter in addition to
85 the ``--build`` option tells ``cmake`` to build the ``install`` target.
86
87 It is possible to set a different install prefix at installation time
88 by invoking the ``cmake_install.cmake`` script generated in the
89 build directory:
90
91 .. code-block:: console
92
93 $ cmake -DCMAKE_INSTALL_PREFIX=/tmp/llvm -P cmake_install.cmake
94
Bill Wendlingfab09c62012-07-06 05:51:50 +000095.. _Basic CMake usage:
96.. _Usage:
97
98Basic CMake usage
99=================
100
Vedant Kumar951f8572015-08-25 00:09:47 +0000101This section explains basic aspects of CMake
102which you may need in your day-to-day usage.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000103
Vedant Kumar951f8572015-08-25 00:09:47 +0000104CMake comes with extensive documentation, in the form of html files, and as
105online help accessible via the ``cmake`` executable itself. Execute ``cmake
106--help`` for further help options.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000107
Vedant Kumar951f8572015-08-25 00:09:47 +0000108CMake allows you to specify a build tool (e.g., GNU make, Visual Studio,
109or Xcode). If not specified on the command line, CMake tries to guess which
110build tool to use, based on your environment. Once it has identified your
111build tool, CMake uses the corresponding *Generator* to create files for your
112build tool (e.g., Makefiles or Visual Studio or Xcode project files). You can
Bill Wendlingfab09c62012-07-06 05:51:50 +0000113explicitly specify the generator with the command line option ``-G "Name of the
Vedant Kumar951f8572015-08-25 00:09:47 +0000114generator"``. To see a list of the available generators on your system, execute
Bill Wendlingfab09c62012-07-06 05:51:50 +0000115
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000116.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000117
118 $ cmake --help
119
Vedant Kumar951f8572015-08-25 00:09:47 +0000120This will list the generator names at the end of the help text.
121
122Generators' names are case-sensitive, and may contain spaces. For this reason,
123you should enter them exactly as they are listed in the ``cmake --help``
124output, in quotes. For example, to generate project files specifically for
125Visual Studio 12, you can execute:
Bill Wendlingfab09c62012-07-06 05:51:50 +0000126
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000127.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000128
Vedant Kumar951f8572015-08-25 00:09:47 +0000129 $ cmake -G "Visual Studio 12" path/to/llvm/source/root
Bill Wendlingfab09c62012-07-06 05:51:50 +0000130
131For a given development platform there can be more than one adequate
Vedant Kumar951f8572015-08-25 00:09:47 +0000132generator. If you use Visual Studio, "NMake Makefiles" is a generator you can use
133for building with NMake. By default, CMake chooses the most specific generator
Bill Wendlingfab09c62012-07-06 05:51:50 +0000134supported by your development environment. If you want an alternative generator,
135you must tell this to CMake with the ``-G`` option.
136
137.. todo::
138
139 Explain variables and cache. Move explanation here from #options section.
140
141.. _Options and variables:
142
143Options and variables
144=====================
145
146Variables customize how the build will be generated. Options are boolean
147variables, with possible values ON/OFF. Options and variables are defined on the
148CMake command line like this:
149
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000150.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000151
152 $ cmake -DVARIABLE=value path/to/llvm/source
153
Vedant Kumar951f8572015-08-25 00:09:47 +0000154You can set a variable after the initial CMake invocation to change its
Bill Wendlingfab09c62012-07-06 05:51:50 +0000155value. You can also undefine a variable:
156
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000157.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000158
159 $ cmake -UVARIABLE path/to/llvm/source
160
Vedant Kumar951f8572015-08-25 00:09:47 +0000161Variables are stored in the CMake cache. This is a file named ``CMakeCache.txt``
162stored at the root of your build directory that is generated by ``cmake``.
163Editing it yourself is not recommended.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000164
Vedant Kumar951f8572015-08-25 00:09:47 +0000165Variables are listed in the CMake cache and later in this document with
166the variable name and type separated by a colon. You can also specify the
167variable and type on the CMake command line:
Bill Wendlingfab09c62012-07-06 05:51:50 +0000168
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000169.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000170
171 $ cmake -DVARIABLE:TYPE=value path/to/llvm/source
172
173Frequently-used CMake variables
174-------------------------------
175
Sanjay Patel8cf3bb42014-05-28 20:07:37 +0000176Here are some of the CMake variables that are used often, along with a
Vedant Kumar951f8572015-08-25 00:09:47 +0000177brief explanation and LLVM-specific notes. For full documentation, consult the
178CMake manual, or execute ``cmake --help-variable VARIABLE_NAME``.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000179
180**CMAKE_BUILD_TYPE**:STRING
Vedant Kumar951f8572015-08-25 00:09:47 +0000181 Sets the build type for ``make``-based generators. Possible values are
182 Release, Debug, RelWithDebInfo and MinSizeRel. If you are using an IDE such as
183 Visual Studio, you should use the IDE settings to set the build type.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000184
185**CMAKE_INSTALL_PREFIX**:PATH
186 Path where LLVM will be installed if "make install" is invoked or the
Vedant Kumar951f8572015-08-25 00:09:47 +0000187 "install" target is built.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000188
189**LLVM_LIBDIR_SUFFIX**:STRING
190 Extra suffix to append to the directory where libraries are to be
191 installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
192 to install libraries to ``/usr/lib64``.
193
194**CMAKE_C_FLAGS**:STRING
195 Extra flags to use when compiling C source files.
196
197**CMAKE_CXX_FLAGS**:STRING
198 Extra flags to use when compiling C++ source files.
199
Bill Wendlingfab09c62012-07-06 05:51:50 +0000200.. _LLVM-specific variables:
201
202LLVM-specific variables
203-----------------------
204
205**LLVM_TARGETS_TO_BUILD**:STRING
206 Semicolon-separated list of targets to build, or *all* for building all
Tim Northover865f4bc2013-04-15 11:53:05 +0000207 targets. Case-sensitive. Defaults to *all*. Example:
208 ``-DLLVM_TARGETS_TO_BUILD="X86;PowerPC"``.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000209
210**LLVM_BUILD_TOOLS**:BOOL
211 Build LLVM tools. Defaults to ON. Targets for building each tool are generated
Vedant Kumar951f8572015-08-25 00:09:47 +0000212 in any case. You can build a tool separately by invoking its target. For
213 example, you can build *llvm-as* with a Makefile-based system by executing *make
214 llvm-as* at the root of your build directory.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000215
216**LLVM_INCLUDE_TOOLS**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000217 Generate build targets for the LLVM tools. Defaults to ON. You can use this
218 option to disable the generation of build targets for the LLVM tools.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000219
220**LLVM_BUILD_EXAMPLES**:BOOL
221 Build LLVM examples. Defaults to OFF. Targets for building each example are
222 generated in any case. See documentation for *LLVM_BUILD_TOOLS* above for more
223 details.
224
225**LLVM_INCLUDE_EXAMPLES**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000226 Generate build targets for the LLVM examples. Defaults to ON. You can use this
227 option to disable the generation of build targets for the LLVM examples.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000228
229**LLVM_BUILD_TESTS**:BOOL
230 Build LLVM unit tests. Defaults to OFF. Targets for building each unit test
Vedant Kumar951f8572015-08-25 00:09:47 +0000231 are generated in any case. You can build a specific unit test using the
232 targets defined under *unittests*, such as ADTTests, IRTests, SupportTests,
233 etc. (Search for ``add_llvm_unittest`` in the subdirectories of *unittests*
234 for a complete list of unit tests.) It is possible to build all unit tests
235 with the target *UnitTests*.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000236
237**LLVM_INCLUDE_TESTS**:BOOL
238 Generate build targets for the LLVM unit tests. Defaults to ON. You can use
Vedant Kumar951f8572015-08-25 00:09:47 +0000239 this option to disable the generation of build targets for the LLVM unit
Bill Wendlingfab09c62012-07-06 05:51:50 +0000240 tests.
241
242**LLVM_APPEND_VC_REV**:BOOL
Thomas Schwingeb1322d52013-03-28 18:06:20 +0000243 Append version control revision info (svn revision number or Git revision id)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000244 to LLVM version string (stored in the PACKAGE_VERSION macro). For this to work
245 cmake must be invoked before the build. Defaults to OFF.
246
247**LLVM_ENABLE_THREADS**:BOOL
248 Build with threads support, if available. Defaults to ON.
249
Alp Toker56ae58c2014-05-03 15:10:04 +0000250**LLVM_ENABLE_CXX1Y**:BOOL
251 Build in C++1y mode, if available. Defaults to OFF.
Arnaud A. de Grandmaisonb697b532013-11-26 10:33:53 +0000252
Bill Wendlingfab09c62012-07-06 05:51:50 +0000253**LLVM_ENABLE_ASSERTIONS**:BOOL
Mehdi Amini87661fb2015-02-10 02:04:29 +0000254 Enables code assertions. Defaults to ON if and only if ``CMAKE_BUILD_TYPE``
255 is *Debug*.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000256
Dan Liewa5bdc842014-07-22 15:41:18 +0000257**LLVM_ENABLE_EH**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000258 Build LLVM with exception-handling support. This is necessary if you wish to
Dan Liewa5bdc842014-07-22 15:41:18 +0000259 link against LLVM libraries and make use of C++ exceptions in your own code
260 that need to propagate through LLVM code. Defaults to OFF.
261
Bill Wendlingfab09c62012-07-06 05:51:50 +0000262**LLVM_ENABLE_PIC**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000263 Add the ``-fPIC`` flag to the compiler command-line, if the compiler supports
Bill Wendlingfab09c62012-07-06 05:51:50 +0000264 this flag. Some systems, like Windows, do not need this flag. Defaults to ON.
265
Dan Liewa5bdc842014-07-22 15:41:18 +0000266**LLVM_ENABLE_RTTI**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000267 Build LLVM with run-time type information. Defaults to OFF.
Dan Liewa5bdc842014-07-22 15:41:18 +0000268
Bill Wendlingfab09c62012-07-06 05:51:50 +0000269**LLVM_ENABLE_WARNINGS**:BOOL
270 Enable all compiler warnings. Defaults to ON.
271
272**LLVM_ENABLE_PEDANTIC**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000273 Enable pedantic mode. This disables compiler-specific extensions, if
Bill Wendlingfab09c62012-07-06 05:51:50 +0000274 possible. Defaults to ON.
275
276**LLVM_ENABLE_WERROR**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000277 Stop and fail the build, if a compiler warning is triggered. Defaults to OFF.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000278
Sanjoy Das8ce64992015-03-26 19:25:01 +0000279**LLVM_ABI_BREAKING_CHECKS**:STRING
280 Used to decide if LLVM should be built with ABI breaking checks or
281 not. Allowed values are `WITH_ASSERTS` (default), `FORCE_ON` and
282 `FORCE_OFF`. `WITH_ASSERTS` turns on ABI breaking checks in an
283 assertion enabled build. `FORCE_ON` (`FORCE_OFF`) turns them on
Vedant Kumar951f8572015-08-25 00:09:47 +0000284 (off) irrespective of whether normal (`NDEBUG`-based) assertions are
Sanjoy Das8ce64992015-03-26 19:25:01 +0000285 enabled or not. A version of LLVM built with ABI breaking checks
286 is not ABI compatible with a version built without it.
287
Bill Wendlingfab09c62012-07-06 05:51:50 +0000288**LLVM_BUILD_32_BITS**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000289 Build 32-bit executables and libraries on 64-bit systems. This option is
290 available only on some 64-bit Unix systems. Defaults to OFF.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000291
292**LLVM_TARGET_ARCH**:STRING
293 LLVM target to use for native code generation. This is required for JIT
294 generation. It defaults to "host", meaning that it shall pick the architecture
295 of the machine where LLVM is being built. If you are cross-compiling, set it
296 to the target architecture name.
297
298**LLVM_TABLEGEN**:STRING
Vedant Kumar951f8572015-08-25 00:09:47 +0000299 Full path to a native TableGen executable (usually named ``llvm-tblgen``). This is
Bill Wendlingfab09c62012-07-06 05:51:50 +0000300 intended for cross-compiling: if the user sets this variable, no native
301 TableGen will be created.
302
303**LLVM_LIT_ARGS**:STRING
304 Arguments given to lit. ``make check`` and ``make clang-test`` are affected.
305 By default, ``'-sv --no-progress-bar'`` on Visual C++ and Xcode, ``'-sv'`` on
306 others.
307
308**LLVM_LIT_TOOLS_DIR**:PATH
Vedant Kumar951f8572015-08-25 00:09:47 +0000309 The path to GnuWin32 tools for tests. Valid on Windows host. Defaults to
310 the empty string, in which case lit will look for tools needed for tests
311 (e.g. ``grep``, ``sort``, etc.) in your %PATH%. If GnuWin32 is not in your
312 %PATH%, then you can set this variable to the GnuWin32 directory so that
313 lit can find tools needed for tests in that directory.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000314
315**LLVM_ENABLE_FFI**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000316 Indicates whether the LLVM Interpreter will be linked with the Foreign Function
317 Interface library (libffi) in order to enable calling external functions.
318 If the library or its headers are installed in a custom
319 location, you can also set the variables FFI_INCLUDE_DIR and
320 FFI_LIBRARY_DIR to the directories where ffi.h and libffi.so can be found,
321 respectively. Defaults to OFF.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000322
323**LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR**:PATH
Vedant Kumar951f8572015-08-25 00:09:47 +0000324 These variables specify the path to the source directory for the external
325 LLVM projects Clang, lld, and Polly, respectively, relative to the top-level
326 source directory. If the in-tree subdirectory for an external project
327 exists (e.g., llvm/tools/clang for Clang), then the corresponding variable
328 will not be used. If the variable for an external project does not point
329 to a valid path, then that project will not be built.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000330
331**LLVM_USE_OPROFILE**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000332 Enable building OProfile JIT support. Defaults to OFF.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000333
Chris Bieneman1c892802015-10-13 05:35:12 +0000334**LLVM_PROFDATA_FILE**:PATH
335 Path to a profdata file to pass into clang's -fprofile-instr-use flag. This
336 can only be specified if you're building with clang.
337
Bill Wendlingfab09c62012-07-06 05:51:50 +0000338**LLVM_USE_INTEL_JITEVENTS**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000339 Enable building support for Intel JIT Events API. Defaults to OFF.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000340
Alexey Samsonov2fb337e2013-04-23 08:28:39 +0000341**LLVM_ENABLE_ZLIB**:BOOL
Vedant Kumar951f8572015-08-25 00:09:47 +0000342 Enable building with zlib to support compression/uncompression in LLVM tools.
Alexey Samsonov2fb337e2013-04-23 08:28:39 +0000343 Defaults to ON.
344
Alexey Samsonovd7f6a612013-07-09 10:56:13 +0000345**LLVM_USE_SANITIZER**:STRING
346 Define the sanitizer used to build LLVM binaries and tests. Possible values
Justin Bogner05e11e32015-06-22 18:55:46 +0000347 are ``Address``, ``Memory``, ``MemoryWithOrigins``, ``Undefined``, ``Thread``,
348 and ``Address;Undefined``. Defaults to empty string.
Alexey Samsonovd7f6a612013-07-09 10:56:13 +0000349
Justin Bognere12385b2016-02-04 07:28:30 +0000350**LLVM_ENABLE_LTO**:BOOL
351 Add the ``-flto`` flag to the compile and link command lines,
352 enabling link-time optimization. Defaults to OFF.
353
Evgeniy Stepanovf1c3817382014-11-19 10:30:02 +0000354**LLVM_PARALLEL_COMPILE_JOBS**:STRING
355 Define the maximum number of concurrent compilation jobs.
356
357**LLVM_PARALLEL_LINK_JOBS**:STRING
358 Define the maximum number of concurrent link jobs.
359
Dan Liew98f3f002014-04-29 16:13:27 +0000360**LLVM_BUILD_DOCS**:BOOL
361 Enables all enabled documentation targets (i.e. Doxgyen and Sphinx targets) to
362 be built as part of the normal build. If the ``install`` target is run then
363 this also enables all built documentation targets to be installed. Defaults to
364 OFF.
365
Michael Gottesman700a9912014-03-07 19:19:28 +0000366**LLVM_ENABLE_DOXYGEN**:BOOL
367 Enables the generation of browsable HTML documentation using doxygen.
368 Defaults to OFF.
369
370**LLVM_ENABLE_DOXYGEN_QT_HELP**:BOOL
371 Enables the generation of a Qt Compressed Help file. Defaults to OFF.
372 This affects the make target ``doxygen-llvm``. When enabled, apart from
373 the normal HTML output generated by doxygen, this will produce a QCH file
374 named ``org.llvm.qch``. You can then load this file into Qt Creator.
375 This option is only useful in combination with ``-DLLVM_ENABLE_DOXYGEN=ON``;
376 otherwise this has no effect.
377
378**LLVM_DOXYGEN_QCH_FILENAME**:STRING
Mehdi Amini87661fb2015-02-10 02:04:29 +0000379 The filename of the Qt Compressed Help file that will be generated when
380 ``-DLLVM_ENABLE_DOXYGEN=ON`` and
Michael Gottesman700a9912014-03-07 19:19:28 +0000381 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON`` are given. Defaults to
382 ``org.llvm.qch``.
383 This option is only useful in combination with
384 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
Vedant Kumar951f8572015-08-25 00:09:47 +0000385 otherwise it has no effect.
Michael Gottesman700a9912014-03-07 19:19:28 +0000386
387**LLVM_DOXYGEN_QHP_NAMESPACE**:STRING
388 Namespace under which the intermediate Qt Help Project file lives. See `Qt
Sean Silvad02bf3e2014-04-07 22:29:53 +0000389 Help Project`_
Michael Gottesman700a9912014-03-07 19:19:28 +0000390 for more information. Defaults to "org.llvm". This option is only useful in
391 combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise
Vedant Kumar951f8572015-08-25 00:09:47 +0000392 it has no effect.
Mehdi Amini87661fb2015-02-10 02:04:29 +0000393
Michael Gottesman700a9912014-03-07 19:19:28 +0000394**LLVM_DOXYGEN_QHP_CUST_FILTER_NAME**:STRING
Sean Silvad02bf3e2014-04-07 22:29:53 +0000395 See `Qt Help Project`_ for
Michael Gottesman700a9912014-03-07 19:19:28 +0000396 more information. Defaults to the CMake variable ``${PACKAGE_STRING}`` which
397 is a combination of the package name and version string. This filter can then
398 be used in Qt Creator to select only documentation from LLVM when browsing
399 through all the help files that you might have loaded. This option is only
400 useful in combination with ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``;
Vedant Kumar951f8572015-08-25 00:09:47 +0000401 otherwise it has no effect.
Michael Gottesman700a9912014-03-07 19:19:28 +0000402
Sean Silvad02bf3e2014-04-07 22:29:53 +0000403.. _Qt Help Project: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters
404
Michael Gottesman700a9912014-03-07 19:19:28 +0000405**LLVM_DOXYGEN_QHELPGENERATOR_PATH**:STRING
406 The path to the ``qhelpgenerator`` executable. Defaults to whatever CMake's
407 ``find_program()`` can find. This option is only useful in combination with
Vedant Kumar951f8572015-08-25 00:09:47 +0000408 ``-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON``; otherwise it has no
Michael Gottesman700a9912014-03-07 19:19:28 +0000409 effect.
410
Hans Wennborg76b2a3e2015-08-17 23:24:17 +0000411**LLVM_DOXYGEN_SVG**:BOOL
412 Uses .svg files instead of .png files for graphs in the Doxygen output.
413 Defaults to OFF.
414
Dan Liew98f3f002014-04-29 16:13:27 +0000415**LLVM_ENABLE_SPHINX**:BOOL
416 If enabled CMake will search for the ``sphinx-build`` executable and will make
417 the ``SPHINX_OUTPUT_HTML`` and ``SPHINX_OUTPUT_MAN`` CMake options available.
418 Defaults to OFF.
419
420**SPHINX_EXECUTABLE**:STRING
421 The path to the ``sphinx-build`` executable detected by CMake.
422
423**SPHINX_OUTPUT_HTML**:BOOL
424 If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) then the targets for
425 building the documentation as html are added (but not built by default unless
426 ``LLVM_BUILD_DOCS`` is enabled). There is a target for each project in the
427 source tree that uses sphinx (e.g. ``docs-llvm-html``, ``docs-clang-html``
428 and ``docs-lld-html``). Defaults to ON.
429
430**SPHINX_OUTPUT_MAN**:BOOL
431 If enabled (and ``LLVM_ENABLE_SPHINX`` is enabled) the targets for building
432 the man pages are added (but not built by default unless ``LLVM_BUILD_DOCS``
433 is enabled). Currently the only target added is ``docs-llvm-man``. Defaults
434 to ON.
435
Dan Liewc2867ba2014-08-14 11:57:13 +0000436**SPHINX_WARNINGS_AS_ERRORS**:BOOL
437 If enabled then sphinx documentation warnings will be treated as
438 errors. Defaults to ON.
439
Chris Bieneman01dda1a2015-10-15 20:12:08 +0000440**LLVM_CREATE_XCODE_TOOLCHAIN**:BOOL
441 OS X Only: If enabled CMake will generate a target named
442 'install-xcode-toolchain'. This target will create a directory at
443 $CMAKE_INSTALL_PREFIX/Toolchains containing an xctoolchain directory which can
444 be used to override the default system tools.
445
Andrew Wilkins47695172016-01-15 03:33:35 +0000446**LLVM_BUILD_LLVM_DYLIB**:BOOL
447 If enabled, the target for building the libLLVM shared library is added.
Andrew Wilkins2a3810e2016-01-19 05:43:21 +0000448 This library contains all of LLVM's components in a single shared library.
Andrew Wilkins47695172016-01-15 03:33:35 +0000449 Defaults to OFF. This cannot be used in conjunction with BUILD_SHARED_LIBS.
Andrew Wilkins2a3810e2016-01-19 05:43:21 +0000450 Tools will only be linked to the libLLVM shared library if LLVM_LINK_LLVM_DYLIB
451 is also ON.
452 The components in the library can be customised by setting LLVM_DYLIB_COMPONENTS
453 to a list of the desired components.
Andrew Wilkins47695172016-01-15 03:33:35 +0000454
455**LLVM_LINK_LLVM_DYLIB**:BOOL
456 If enabled, tools will be linked with the libLLVM shared library. Defaults
457 to OFF. Setting LLVM_LINK_LLVM_DYLIB to ON also sets LLVM_BUILD_LLVM_DYLIB
458 to ON.
459
460**BUILD_SHARED_LIBS**:BOOL
Andrew Wilkins2a3810e2016-01-19 05:43:21 +0000461 Flag indicating if each LLVM component (e.g. Support) is built as a shared
462 library (ON) or as a static library (OFF). Its default value is OFF. On
463 Windows, shared libraries may be used when building with MinGW, including
464 mingw-w64, but not when building with the Microsoft toolchain.
Andrew Wilkins47695172016-01-15 03:33:35 +0000465
466 .. note:: BUILD_SHARED_LIBS is only recommended for use by LLVM developers.
467 If you want to build LLVM as a shared library, you should use the
468 ``LLVM_BUILD_LLVM_DYLIB`` option.
469
Bill Wendlingfab09c62012-07-06 05:51:50 +0000470Executing the test suite
471========================
472
Vedant Kumar951f8572015-08-25 00:09:47 +0000473Testing is performed when the *check-all* target is built. For instance, if you are
474using Makefiles, execute this command in the root of your build directory:
Bill Wendlingfab09c62012-07-06 05:51:50 +0000475
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000476.. code-block:: console
Bill Wendlingfab09c62012-07-06 05:51:50 +0000477
Vedant Kumar951f8572015-08-25 00:09:47 +0000478 $ make check-all
Bill Wendlingfab09c62012-07-06 05:51:50 +0000479
Vedant Kumar951f8572015-08-25 00:09:47 +0000480On Visual Studio, you may run tests by building the project "check-all".
481For more information about testing, see the :doc:`TestingGuide`.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000482
483Cross compiling
484===============
485
486See `this wiki page <http://www.vtk.org/Wiki/CMake_Cross_Compiling>`_ for
487generic instructions on how to cross-compile with CMake. It goes into detailed
488explanations and may seem daunting, but it is not. On the wiki page there are
489several examples including toolchain files. Go directly to `this section
490<http://www.vtk.org/Wiki/CMake_Cross_Compiling#Information_how_to_set_up_various_cross_compiling_toolchains>`_
491for a quick solution.
492
493Also see the `LLVM-specific variables`_ section for variables used when
494cross-compiling.
495
496Embedding LLVM in your project
497==============================
498
Dan Liew97456612014-07-28 13:36:37 +0000499From LLVM 3.5 onwards both the CMake and autoconf/Makefile build systems export
500LLVM libraries as importable CMake targets. This means that clients of LLVM can
Vedant Kumar951f8572015-08-25 00:09:47 +0000501now reliably use CMake to develop their own LLVM-based projects against an
Dan Liew97456612014-07-28 13:36:37 +0000502installed version of LLVM regardless of how it was built.
503
Vedant Kumar951f8572015-08-25 00:09:47 +0000504Here is a simple example of a CMakeLists.txt file that imports the LLVM libraries
Dan Liew97456612014-07-28 13:36:37 +0000505and uses them to build a simple application ``simple-tool``.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000506
507.. code-block:: cmake
508
Dan Liew97456612014-07-28 13:36:37 +0000509 cmake_minimum_required(VERSION 2.8.8)
510 project(SimpleProject)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000511
Dan Liew97456612014-07-28 13:36:37 +0000512 find_package(LLVM REQUIRED CONFIG)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000513
Dan Liew97456612014-07-28 13:36:37 +0000514 message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
515 message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
Bill Wendlingfab09c62012-07-06 05:51:50 +0000516
Dan Liew97456612014-07-28 13:36:37 +0000517 # Set your project compile flags.
518 # E.g. if using the C++ header files
519 # you will need to enable C++11 support
520 # for your compiler.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000521
Dan Liew97456612014-07-28 13:36:37 +0000522 include_directories(${LLVM_INCLUDE_DIRS})
523 add_definitions(${LLVM_DEFINITIONS})
Bill Wendlingfab09c62012-07-06 05:51:50 +0000524
Dan Liew97456612014-07-28 13:36:37 +0000525 # Now build our tools
Renato Golin1703a682015-02-10 14:15:58 +0000526 add_executable(simple-tool tool.cpp)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000527
Dan Liew97456612014-07-28 13:36:37 +0000528 # Find the libraries that correspond to the LLVM components
529 # that we wish to use
530 llvm_map_components_to_libnames(llvm_libs support core irreader)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000531
Dan Liew97456612014-07-28 13:36:37 +0000532 # Link against LLVM libraries
533 target_link_libraries(simple-tool ${llvm_libs})
Bill Wendlingfab09c62012-07-06 05:51:50 +0000534
Dan Liew97456612014-07-28 13:36:37 +0000535The ``find_package(...)`` directive when used in CONFIG mode (as in the above
536example) will look for the ``LLVMConfig.cmake`` file in various locations (see
537cmake manual for details). It creates a ``LLVM_DIR`` cache entry to save the
538directory where ``LLVMConfig.cmake`` is found or allows the user to specify the
Niels Ole Salscheiderfc814132016-02-04 20:08:19 +0000539directory (e.g. by passing ``-DLLVM_DIR=/usr/lib/cmake/llvm`` to
Dan Liew97456612014-07-28 13:36:37 +0000540the ``cmake`` command or by setting it directly in ``ccmake`` or ``cmake-gui``).
Bill Wendlingfab09c62012-07-06 05:51:50 +0000541
Dan Liew97456612014-07-28 13:36:37 +0000542This file is available in two different locations.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000543
Niels Ole Salscheiderfc814132016-02-04 20:08:19 +0000544* ``<INSTALL_PREFIX>/lib/cmake/llvm/LLVMConfig.cmake`` where
Dan Liew97456612014-07-28 13:36:37 +0000545 ``<INSTALL_PREFIX>`` is the install prefix of an installed version of LLVM.
Niels Ole Salscheiderfc814132016-02-04 20:08:19 +0000546 On Linux typically this is ``/usr/lib/cmake/llvm/LLVMConfig.cmake``.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000547
Niels Ole Salscheiderfc814132016-02-04 20:08:19 +0000548* ``<LLVM_BUILD_ROOT>/lib/cmake/llvm/LLVMConfig.cmake`` where
Vedant Kumar951f8572015-08-25 00:09:47 +0000549 ``<LLVM_BUILD_ROOT>`` is the root of the LLVM build tree. **Note: this is only
550 available when building LLVM with CMake.**
Bill Wendlingfab09c62012-07-06 05:51:50 +0000551
Dan Liew97456612014-07-28 13:36:37 +0000552If LLVM is installed in your operating system's normal installation prefix (e.g.
553on Linux this is usually ``/usr/``) ``find_package(LLVM ...)`` will
554automatically find LLVM if it is installed correctly. If LLVM is not installed
555or you wish to build directly against the LLVM build tree you can use
556``LLVM_DIR`` as previously mentioned.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000557
Dan Liew97456612014-07-28 13:36:37 +0000558The ``LLVMConfig.cmake`` file sets various useful variables. Notable variables
559include
560
561``LLVM_CMAKE_DIR``
562 The path to the LLVM CMake directory (i.e. the directory containing
563 LLVMConfig.cmake).
564
565``LLVM_DEFINITIONS``
566 A list of preprocessor defines that should be used when building against LLVM.
567
568``LLVM_ENABLE_ASSERTIONS``
569 This is set to ON if LLVM was built with assertions, otherwise OFF.
570
571``LLVM_ENABLE_EH``
572 This is set to ON if LLVM was built with exception handling (EH) enabled,
573 otherwise OFF.
574
575``LLVM_ENABLE_RTTI``
576 This is set to ON if LLVM was built with run time type information (RTTI),
577 otherwise OFF.
578
579``LLVM_INCLUDE_DIRS``
580 A list of include paths to directories containing LLVM header files.
581
582``LLVM_PACKAGE_VERSION``
Vedant Kumar951f8572015-08-25 00:09:47 +0000583 The LLVM version. This string can be used with CMake conditionals, e.g., ``if
Dan Liew97456612014-07-28 13:36:37 +0000584 (${LLVM_PACKAGE_VERSION} VERSION_LESS "3.5")``.
585
586``LLVM_TOOLS_BINARY_DIR``
587 The path to the directory containing the LLVM tools (e.g. ``llvm-as``).
588
589Notice that in the above example we link ``simple-tool`` against several LLVM
590libraries. The list of libraries is determined by using the
591``llvm_map_components_to_libnames()`` CMake function. For a list of available
592components look at the output of running ``llvm-config --components``.
593
594Note that for LLVM < 3.5 ``llvm_map_components_to_libraries()`` was
595used instead of ``llvm_map_components_to_libnames()``. This is now deprecated
596and will be removed in a future version of LLVM.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000597
Dmitri Gribenko11ffe2c2012-12-12 17:02:44 +0000598.. _cmake-out-of-source-pass:
599
Dan Liew97456612014-07-28 13:36:37 +0000600Developing LLVM passes out of source
601------------------------------------
Bill Wendlingfab09c62012-07-06 05:51:50 +0000602
Dan Liew97456612014-07-28 13:36:37 +0000603It is possible to develop LLVM passes out of LLVM's source tree (i.e. against an
604installed or built LLVM). An example of a project layout is provided below.
Bill Wendlingfab09c62012-07-06 05:51:50 +0000605
Dmitri Gribenko99e8b432012-12-12 14:23:14 +0000606.. code-block:: none
Bill Wendlingfab09c62012-07-06 05:51:50 +0000607
608 <project dir>/
609 |
610 CMakeLists.txt
611 <pass name>/
612 |
613 CMakeLists.txt
614 Pass.cpp
615 ...
616
617Contents of ``<project dir>/CMakeLists.txt``:
618
619.. code-block:: cmake
620
Dan Liew97456612014-07-28 13:36:37 +0000621 find_package(LLVM REQUIRED CONFIG)
Bill Wendlingfab09c62012-07-06 05:51:50 +0000622
623 add_definitions(${LLVM_DEFINITIONS})
624 include_directories(${LLVM_INCLUDE_DIRS})
Bill Wendlingfab09c62012-07-06 05:51:50 +0000625
626 add_subdirectory(<pass name>)
627
628Contents of ``<project dir>/<pass name>/CMakeLists.txt``:
629
630.. code-block:: cmake
631
Dan Liew97456612014-07-28 13:36:37 +0000632 add_library(LLVMPassname MODULE Pass.cpp)
633
634Note if you intend for this pass to be merged into the LLVM source tree at some
635point in the future it might make more sense to use LLVM's internal
Vedant Kumar951f8572015-08-25 00:09:47 +0000636``add_llvm_loadable_module`` function instead by...
Dan Liew97456612014-07-28 13:36:37 +0000637
638
639Adding the following to ``<project dir>/CMakeLists.txt`` (after
640``find_package(LLVM ...)``)
641
642.. code-block:: cmake
643
644 list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
645 include(AddLLVM)
646
647And then changing ``<project dir>/<pass name>/CMakeLists.txt`` to
648
649.. code-block:: cmake
650
Bill Wendlingfab09c62012-07-06 05:51:50 +0000651 add_llvm_loadable_module(LLVMPassname
652 Pass.cpp
653 )
654
655When you are done developing your pass, you may wish to integrate it
Vedant Kumar951f8572015-08-25 00:09:47 +0000656into the LLVM source tree. You can achieve it in two easy steps:
Bill Wendlingfab09c62012-07-06 05:51:50 +0000657
658#. Copying ``<pass name>`` folder into ``<LLVM root>/lib/Transform`` directory.
659
660#. Adding ``add_subdirectory(<pass name>)`` line into
661 ``<LLVM root>/lib/Transform/CMakeLists.txt``.
662
Alp Tokercf218752014-06-30 18:57:16 +0000663Compiler/Platform-specific topics
Bill Wendlingfab09c62012-07-06 05:51:50 +0000664=================================
665
666Notes for specific compilers and/or platforms.
667
668Microsoft Visual C++
669--------------------
670
671**LLVM_COMPILER_JOBS**:STRING
Vedant Kumar951f8572015-08-25 00:09:47 +0000672 Specifies the maximum number of parallel compiler jobs to use per project
Ahmed Bougachacf07cef2013-07-23 17:44:01 +0000673 when building with msbuild or Visual Studio. Only supported for the Visual
674 Studio 2010 CMake generator. 0 means use all processors. Default is 0.