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