[clang] Handle __declspec() attributes in using
[llvm-project.git] / llvm / docs / GettingStarted.rst
blobf2158a479d4f8d2e6e8089361ce304b62fbfc17e
1 ====================================
2 Getting Started with the LLVM System
3 ====================================
5 .. contents::
6    :local:
8 Overview
9 ========
11 Welcome to the LLVM project!
13 The LLVM project has multiple components. The core of the project is
14 itself called "LLVM". This contains all of the tools, libraries, and header
15 files needed to process intermediate representations and converts it into
16 object files.  Tools include an assembler, disassembler, bitcode analyzer, and
17 bitcode optimizer.  It also contains basic regression tests.
19 C-like languages use the `Clang <https://clang.llvm.org/>`_ front end.  This
20 component compiles C, C++, Objective C, and Objective C++ code into LLVM bitcode
21 -- and from there into object files, using LLVM.
23 Other components include:
24 the `libc++ C++ standard library <https://libcxx.llvm.org>`_,
25 the `LLD linker <https://lld.llvm.org>`_, and more.
27 Getting the Source Code and Building LLVM
28 =========================================
30 The LLVM Getting Started documentation may be out of date.  The `Clang
31 Getting Started <https://clang.llvm.org/get_started.html>`_ page might have more
32 accurate information.
34 This is an example workflow and configuration to get and build the LLVM source:
36 #. Checkout LLVM (including related subprojects like Clang):
38    * ``git clone https://github.com/llvm/llvm-project.git``
39    * Or, on windows, ``git clone --config core.autocrlf=false
40      https://github.com/llvm/llvm-project.git``
41    * To save storage and speed-up the checkout time, you may want to do a
42      `shallow clone <https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---depthltdepthgt>`_.
43      For example, to get the latest revision of the LLVM project, use
44      ``git clone --depth 1 https://github.com/llvm/llvm-project.git``
46 #. Configure and build LLVM and Clang:
48    * ``cd llvm-project``
49    * ``mkdir build``
50    * ``cd build``
51    * ``cmake -G <generator> -DCMAKE_BUILD_TYPE=<type> [options] ../llvm``
53      Some common build system generators are:
55      * ``Ninja`` --- for generating `Ninja <https://ninja-build.org>`_
56        build files. Most llvm developers use Ninja.
57      * ``Unix Makefiles`` --- for generating make-compatible parallel makefiles.
58      * ``Visual Studio`` --- for generating Visual Studio projects and
59        solutions.
60      * ``Xcode`` --- for generating Xcode projects.
62      Some Common options:
64      * ``-DLLVM_ENABLE_PROJECTS='...'`` --- semicolon-separated list of the LLVM
65        subprojects you'd like to additionally build. Can include any of: clang,
66        clang-tools-extra, lldb, compiler-rt, lld, polly, or cross-project-tests.
68        For example, to build LLVM, Clang, libcxx, and libcxxabi, use
69        ``-DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"``.
71      * ``-DCMAKE_INSTALL_PREFIX=directory`` --- Specify for *directory* the full
72        pathname of where you want the LLVM tools and libraries to be installed
73        (default ``/usr/local``).
75      * ``-DCMAKE_BUILD_TYPE=type`` --- Controls optimization level and debug information
76        of the build. The default value is ``Debug`` which fits people who want
77        to work on LLVM or its libraries. ``Release`` is a better fit for most
78        users of LLVM and Clang. For more detailed information see
79        :ref:`CMAKE_BUILD_TYPE <cmake_build_type>`.
81      * ``-DLLVM_ENABLE_ASSERTIONS=On`` --- Compile with assertion checks enabled
82        (default is Yes for Debug builds, No for all other build types).
84    * ``cmake --build . [--target <target>]`` or the build system specified
85      above directly.
87      * The default target (i.e. ``cmake --build .`` or ``make``) will build all of
88        LLVM.
90      * The ``check-all`` target (i.e. ``ninja check-all``) will run the
91        regression tests to ensure everything is in working order.
93      * CMake will generate build targets for each tool and library, and most
94        LLVM sub-projects generate their own ``check-<project>`` target.
96      * Running a serial build will be **slow**.  To improve speed, try running a
97        parallel build. That's done by default in Ninja; for ``make``, use the
98        option ``-j NN``, where ``NN`` is the number of parallel jobs, e.g. the
99        number of available CPUs.
101    * For more information see `CMake <CMake.html>`__
103    * If you get an "internal compiler error (ICE)" or test failures, see
104      `below`_.
106 Consult the `Getting Started with LLVM`_ section for detailed information on
107 configuring and compiling LLVM.  Go to `Directory Layout`_ to learn about the
108 layout of the source code tree.
110 Stand-alone Builds
111 ------------------
113 Stand-alone builds allow you to build a sub-project against a pre-built
114 version of the clang or llvm libraries that is already present on your
115 system.
117 You can use the source code from a standard checkout of the llvm-project
118 (as described above) to do stand-alone builds, but you may also build
119 from a :ref:`sparse checkout<workflow-multicheckout-nocommit>` or from the
120 tarballs available on the `releases <https://github.com/llvm/llvm-project/releases/>`_
121 page.
123 For stand-alone builds, you must have an llvm install that is configured
124 properly to be consumable by stand-alone builds of the other projects.
125 This could be a distro provided LLVM install, or you can build it yourself,
126 like this:
128 .. code-block:: console
130   cmake -G Ninja -S path/to/llvm-project/llvm -B $builddir \
131         -DLLVM_INSTALL_UTILS=ON \
132         -DCMAKE_INSTALL_PREFIX=/path/to/llvm/install/prefix \
133         < other options >
135   ninja -C $builddir install
137 Once llvm is installed, to configure a project for a stand-alone build, invoke CMake like this:
139 .. code-block:: console
141   cmake -G Ninja -S path/to/llvm-project/$subproj \
142         -B $buildir_subproj \
143         -DLLVM_EXTERNAL_LIT=/path/to/lit \
144         -DLLVM_ROOT=/path/to/llvm/install/prefix
146 Notice that:
148 * The stand-alone build needs to happen in a folder that is not the
149   original folder where LLVMN was built
150   (`$builddir!=$builddir_subproj`).
151 * ``LLVM_ROOT`` should point to the prefix of your llvm installation,
152   so for example, if llvm is installed into ``/usr/bin`` and
153   ``/usr/lib64``, then you should pass ``-DLLVM_ROOT=/usr/``.
154 * Both the ``LLVM_ROOT`` and ``LLVM_EXTERNAL_LIT`` options are
155   required to do stand-alone builds for all sub-projects.  Additional
156   required options for each sub-project can be found in the table
157   below.
159 The ``check-$subproj`` and ``install`` build targets are supported for the
160 sub-projects listed in the table below.
162 ============ ======================== ======================
163 Sub-Project  Required Sub-Directories Required CMake Options
164 ============ ======================== ======================
165 llvm         llvm, cmake, third-party LLVM_INSTALL_UTILS=ON
166 clang        clang, cmake             CLANG_INCLUDE_TESTS=ON (Required for check-clang only)
167 lld          lld, cmake
168 ============ ======================== ======================
170 Example for building stand-alone `clang`:
172 .. code-block:: console
174    #!/bin/sh
176    build_llvm=`pwd`/build-llvm
177    build_clang=`pwd`/build-clang
178    installprefix=`pwd`/install
179    llvm=`pwd`/llvm-project
180    mkdir -p $build_llvm
181    mkdir -p $installprefix
183    cmake -G Ninja -S $llvm/llvm -B $build_llvm \
184          -DLLVM_INSTALL_UTILS=ON \
185          -DCMAKE_INSTALL_PREFIX=$installprefix \
186          -DCMAKE_BUILD_TYPE=Release
188    ninja -C $build_llvm install
190    cmake -G Ninja -S $llvm/clang -B $build_clang \
191          -DLLVM_EXTERNAL_LIT=$build_llvm/utils/lit \
192          -DLLVM_ROOT=$installprefix
194    ninja -C $build_clang
196 Requirements
197 ============
199 Before you begin to use the LLVM system, review the requirements given below.
200 This may save you some trouble by knowing ahead of time what hardware and
201 software you will need.
203 Hardware
204 --------
206 LLVM is known to work on the following host platforms:
208 ================== ===================== =============
209 OS                 Arch                  Compilers
210 ================== ===================== =============
211 Linux              x86\ :sup:`1`         GCC, Clang
212 Linux              amd64                 GCC, Clang
213 Linux              ARM                   GCC, Clang
214 Linux              Mips                  GCC, Clang
215 Linux              PowerPC               GCC, Clang
216 Linux              SystemZ               GCC, Clang
217 Solaris            V9 (Ultrasparc)       GCC
218 DragonFlyBSD       amd64                 GCC, Clang
219 FreeBSD            x86\ :sup:`1`         GCC, Clang
220 FreeBSD            amd64                 GCC, Clang
221 NetBSD             x86\ :sup:`1`         GCC, Clang
222 NetBSD             amd64                 GCC, Clang
223 OpenBSD            x86\ :sup:`1`         GCC, Clang
224 OpenBSD            amd64                 GCC, Clang
225 macOS\ :sup:`2`    PowerPC               GCC
226 macOS              x86                   GCC, Clang
227 Cygwin/Win32       x86\ :sup:`1, 3`      GCC
228 Windows            x86\ :sup:`1`         Visual Studio
229 Windows x64        x86-64                Visual Studio
230 ================== ===================== =============
232 .. note::
234   #. Code generation supported for Pentium processors and up
235   #. Code generation supported for 32-bit ABI only
236   #. To use LLVM modules on Win32-based system, you may configure LLVM
237      with ``-DBUILD_SHARED_LIBS=On``.
239 Note that Debug builds require a lot of time and disk space.  An LLVM-only build
240 will need about 1-3 GB of space.  A full build of LLVM and Clang will need around
241 15-20 GB of disk space.  The exact space requirements will vary by system.  (It
242 is so large because of all the debugging information and the fact that the
243 libraries are statically linked into multiple tools).
245 If you are space-constrained, you can build only selected tools or only
246 selected targets.  The Release build requires considerably less space.
248 The LLVM suite *may* compile on other platforms, but it is not guaranteed to do
249 so.  If compilation is successful, the LLVM utilities should be able to
250 assemble, disassemble, analyze, and optimize LLVM bitcode.  Code generation
251 should work as well, although the generated native code may not work on your
252 platform.
254 Software
255 --------
257 Compiling LLVM requires that you have several software packages installed. The
258 table below lists those required packages. The Package column is the usual name
259 for the software package that LLVM depends on. The Version column provides
260 "known to work" versions of the package. The Notes column describes how LLVM
261 uses the package and provides other details.
263 =========================================================== ============ ==========================================
264 Package                                                     Version      Notes
265 =========================================================== ============ ==========================================
266 `CMake <http://cmake.org/>`__                               >=3.13.4     Makefile/workspace generator
267 `GCC <http://gcc.gnu.org/>`_                                >=7.1.0      C/C++ compiler\ :sup:`1`
268 `python <http://www.python.org/>`_                          >=3.6        Automated test suite\ :sup:`2`
269 `zlib <http://zlib.net>`_                                   >=1.2.3.4    Compression library\ :sup:`3`
270 `GNU Make <http://savannah.gnu.org/projects/make>`_         3.79, 3.79.1 Makefile/build processor\ :sup:`4`
271 =========================================================== ============ ==========================================
273 .. note::
275    #. Only the C and C++ languages are needed so there's no need to build the
276       other languages for LLVM's purposes. See `below` for specific version
277       info.
278    #. Only needed if you want to run the automated test suite in the
279       ``llvm/test`` directory.
280    #. Optional, adds compression / uncompression capabilities to selected LLVM
281       tools.
282    #. Optional, you can use any other build tool supported by CMake.
284 Additionally, your compilation host is expected to have the usual plethora of
285 Unix utilities. Specifically:
287 * **ar** --- archive library builder
288 * **bzip2** --- bzip2 command for distribution generation
289 * **bunzip2** --- bunzip2 command for distribution checking
290 * **chmod** --- change permissions on a file
291 * **cat** --- output concatenation utility
292 * **cp** --- copy files
293 * **date** --- print the current date/time
294 * **echo** --- print to standard output
295 * **egrep** --- extended regular expression search utility
296 * **find** --- find files/dirs in a file system
297 * **grep** --- regular expression search utility
298 * **gzip** --- gzip command for distribution generation
299 * **gunzip** --- gunzip command for distribution checking
300 * **install** --- install directories/files
301 * **mkdir** --- create a directory
302 * **mv** --- move (rename) files
303 * **ranlib** --- symbol table builder for archive libraries
304 * **rm** --- remove (delete) files and directories
305 * **sed** --- stream editor for transforming output
306 * **sh** --- Bourne shell for make build scripts
307 * **tar** --- tape archive for distribution generation
308 * **test** --- test things in file system
309 * **unzip** --- unzip command for distribution checking
310 * **zip** --- zip command for distribution generation
312 .. _below:
313 .. _check here:
315 Host C++ Toolchain, both Compiler and Standard Library
316 ------------------------------------------------------
318 LLVM is very demanding of the host C++ compiler, and as such tends to expose
319 bugs in the compiler. We also attempt to follow improvements and developments in
320 the C++ language and library reasonably closely. As such, we require a modern
321 host C++ toolchain, both compiler and standard library, in order to build LLVM.
323 LLVM is written using the subset of C++ documented in :doc:`coding
324 standards<CodingStandards>`. To enforce this language version, we check the most
325 popular host toolchains for specific minimum versions in our build systems:
327 * Clang 5.0
328 * Apple Clang 10.0
329 * GCC 7.1
330 * Visual Studio 2019 16.7
332 Anything older than these toolchains *may* work, but will require forcing the
333 build system with a special option and is not really a supported host platform.
334 Also note that older versions of these compilers have often crashed or
335 miscompiled LLVM.
337 For less widely used host toolchains such as ICC or xlC, be aware that a very
338 recent version may be required to support all of the C++ features used in LLVM.
340 We track certain versions of software that are *known* to fail when used as
341 part of the host toolchain. These even include linkers at times.
343 **GNU ld 2.16.X**. Some 2.16.X versions of the ld linker will produce very long
344 warning messages complaining that some "``.gnu.linkonce.t.*``" symbol was
345 defined in a discarded section. You can safely ignore these messages as they are
346 erroneous and the linkage is correct.  These messages disappear using ld 2.17.
348 **GNU binutils 2.17**: Binutils 2.17 contains `a bug
349 <http://sourceware.org/bugzilla/show_bug.cgi?id=3111>`__ which causes huge link
350 times (minutes instead of seconds) when building LLVM.  We recommend upgrading
351 to a newer version (2.17.50.0.4 or later).
353 **GNU Binutils 2.19.1 Gold**: This version of Gold contained `a bug
354 <http://sourceware.org/bugzilla/show_bug.cgi?id=9836>`__ which causes
355 intermittent failures when building LLVM with position independent code.  The
356 symptom is an error about cyclic dependencies.  We recommend upgrading to a
357 newer version of Gold.
359 Getting a Modern Host C++ Toolchain
360 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
362 This section mostly applies to Linux and older BSDs. On macOS, you should
363 have a sufficiently modern Xcode, or you will likely need to upgrade until you
364 do. Windows does not have a "system compiler", so you must install either Visual
365 Studio 2019 (or later), or a recent version of mingw64. FreeBSD 10.0 and newer
366 have a modern Clang as the system compiler.
368 However, some Linux distributions and some other or older BSDs sometimes have
369 extremely old versions of GCC. These steps attempt to help you upgrade you
370 compiler even on such a system. However, if at all possible, we encourage you
371 to use a recent version of a distribution with a modern system compiler that
372 meets these requirements. Note that it is tempting to install a prior
373 version of Clang and libc++ to be the host compiler, however libc++ was not
374 well tested or set up to build on Linux until relatively recently. As
375 a consequence, this guide suggests just using libstdc++ and a modern GCC as the
376 initial host in a bootstrap, and then using Clang (and potentially libc++).
378 The first step is to get a recent GCC toolchain installed. The most common
379 distribution on which users have struggled with the version requirements is
380 Ubuntu Precise, 12.04 LTS. For this distribution, one easy option is to install
381 the `toolchain testing PPA`_ and use it to install a modern GCC. There is
382 a really nice discussions of this on the `ask ubuntu stack exchange`_ and a
383 `github gist`_ with updated commands. However, not all users can use PPAs and
384 there are many other distributions, so it may be necessary (or just useful, if
385 you're here you *are* doing compiler development after all) to build and install
386 GCC from source. It is also quite easy to do these days.
388 .. _toolchain testing PPA:
389   https://launchpad.net/~ubuntu-toolchain-r/+archive/test
390 .. _ask ubuntu stack exchange:
391   https://askubuntu.com/questions/466651/how-do-i-use-the-latest-gcc-on-ubuntu/581497#58149
392 .. _github gist:
393   https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91
395 Easy steps for installing GCC 7.1.0:
397 .. code-block:: console
399   % gcc_version=7.1.0
400   % wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.bz2
401   % wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.bz2.sig
402   % wget https://ftp.gnu.org/gnu/gnu-keyring.gpg
403   % signature_invalid=`gpg --verify --no-default-keyring --keyring ./gnu-keyring.gpg gcc-${gcc_version}.tar.bz2.sig`
404   % if [ $signature_invalid ]; then echo "Invalid signature" ; exit 1 ; fi
405   % tar -xvjf gcc-${gcc_version}.tar.bz2
406   % cd gcc-${gcc_version}
407   % ./contrib/download_prerequisites
408   % cd ..
409   % mkdir gcc-${gcc_version}-build
410   % cd gcc-${gcc_version}-build
411   % $PWD/../gcc-${gcc_version}/configure --prefix=$HOME/toolchains --enable-languages=c,c++
412   % make -j$(nproc)
413   % make install
415 For more details, check out the excellent `GCC wiki entry`_, where I got most
416 of this information from.
418 .. _GCC wiki entry:
419   https://gcc.gnu.org/wiki/InstallingGCC
421 Once you have a GCC toolchain, configure your build of LLVM to use the new
422 toolchain for your host compiler and C++ standard library. Because the new
423 version of libstdc++ is not on the system library search path, you need to pass
424 extra linker flags so that it can be found at link time (``-L``) and at runtime
425 (``-rpath``). If you are using CMake, this invocation should produce working
426 binaries:
428 .. code-block:: console
430   % mkdir build
431   % cd build
432   % CC=$HOME/toolchains/bin/gcc CXX=$HOME/toolchains/bin/g++ \
433     cmake .. -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$HOME/toolchains/lib64 -L$HOME/toolchains/lib64"
435 If you fail to set rpath, most LLVM binaries will fail on startup with a message
436 from the loader similar to ``libstdc++.so.6: version `GLIBCXX_3.4.20' not
437 found``. This means you need to tweak the -rpath linker flag.
439 This method will add an absolute path to the rpath of all executables. That's
440 fine for local development. If you want to distribute the binaries you build
441 so that they can run on older systems, copy ``libstdc++.so.6`` into the
442 ``lib/`` directory.  All of LLVM's shipping binaries have an rpath pointing at
443 ``$ORIGIN/../lib``, so they will find ``libstdc++.so.6`` there.  Non-distributed
444 binaries don't have an rpath set and won't find ``libstdc++.so.6``. Pass
445 ``-DLLVM_LOCAL_RPATH="$HOME/toolchains/lib64"`` to cmake to add an absolute
446 path to ``libstdc++.so.6`` as above. Since these binaries are not distributed,
447 having an absolute local path is fine for them.
449 When you build Clang, you will need to give *it* access to modern C++
450 standard library in order to use it as your new host in part of a bootstrap.
451 There are two easy ways to do this, either build (and install) libc++ along
452 with Clang and then use it with the ``-stdlib=libc++`` compile and link flag,
453 or install Clang into the same prefix (``$HOME/toolchains`` above) as GCC.
454 Clang will look within its own prefix for libstdc++ and use it if found. You
455 can also add an explicit prefix for Clang to look in for a GCC toolchain with
456 the ``--gcc-toolchain=/opt/my/gcc/prefix`` flag, passing it to both compile and
457 link commands when using your just-built-Clang to bootstrap.
459 .. _Getting Started with LLVM:
461 Getting Started with LLVM
462 =========================
464 The remainder of this guide is meant to get you up and running with LLVM and to
465 give you some basic information about the LLVM environment.
467 The later sections of this guide describe the `general layout`_ of the LLVM
468 source tree, a `simple example`_ using the LLVM tool chain, and `links`_ to find
469 more information about LLVM or to get help via e-mail.
471 Terminology and Notation
472 ------------------------
474 Throughout this manual, the following names are used to denote paths specific to
475 the local system and working environment.  *These are not environment variables
476 you need to set but just strings used in the rest of this document below*.  In
477 any of the examples below, simply replace each of these names with the
478 appropriate pathname on your local system.  All these paths are absolute:
480 ``SRC_ROOT``
482   This is the top level directory of the LLVM source tree.
484 ``OBJ_ROOT``
486   This is the top level directory of the LLVM object tree (i.e. the tree where
487   object files and compiled programs will be placed.  It can be the same as
488   SRC_ROOT).
490 Unpacking the LLVM Archives
491 ---------------------------
493 If you have the LLVM distribution, you will need to unpack it before you can
494 begin to compile it.  LLVM is distributed as a number of different
495 subprojects. Each one has its own download which is a TAR archive that is
496 compressed with the gzip program.
498 The files are as follows, with *x.y* marking the version number:
500 ``llvm-x.y.tar.gz``
502   Source release for the LLVM libraries and tools.
504 ``cfe-x.y.tar.gz``
506   Source release for the Clang frontend.
508 .. _checkout:
510 Checkout LLVM from Git
511 ----------------------
513 You can also checkout the source code for LLVM from Git.
515 .. note::
517   Passing ``--config core.autocrlf=false`` should not be required in
518   the future after we adjust the .gitattribute settings correctly, but
519   is required for Windows users at the time of this writing.
521 Simply run:
523 .. code-block:: console
525   % git clone https://github.com/llvm/llvm-project.git
527 or on Windows,
529 .. code-block:: console
531   % git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git
533 This will create an '``llvm-project``' directory in the current directory and
534 fully populate it with all of the source code, test directories, and local
535 copies of documentation files for LLVM and all the related subprojects. Note
536 that unlike the tarballs, which contain each subproject in a separate file, the
537 git repository contains all of the projects together.
539 If you want to get a specific release (as opposed to the most recent revision),
540 you can check out a tag after cloning the repository. E.g., `git checkout
541 llvmorg-6.0.1` inside the ``llvm-project`` directory created by the above
542 command.  Use `git tag -l` to list all of them.
544 Sending patches
545 ^^^^^^^^^^^^^^^
547 See :ref:`Contributing <submit_patch>`.
549 Bisecting commits
550 ^^^^^^^^^^^^^^^^^
552 See `Bisecting LLVM code <GitBisecting.html>`_ for how to use ``git bisect``
553 on LLVM.
555 Reverting a change
556 ^^^^^^^^^^^^^^^^^^
558 When reverting changes using git, the default message will say "This reverts
559 commit XYZ". Leave this at the end of the commit message, but add some details
560 before it as to why the commit is being reverted. A brief explanation and/or
561 links to bots that demonstrate the problem are sufficient.
563 Local LLVM Configuration
564 ------------------------
566 Once checked out repository, the LLVM suite source code must be configured
567 before being built. This process uses CMake.  Unlinke the normal ``configure``
568 script, CMake generates the build files in whatever format you request as well
569 as various ``*.inc`` files, and ``llvm/include/Config/config.h``.
571 Variables are passed to ``cmake`` on the command line using the format
572 ``-D<variable name>=<value>``. The following variables are some common options
573 used by people developing LLVM.
575 +-------------------------+----------------------------------------------------+
576 | Variable                | Purpose                                            |
577 +=========================+====================================================+
578 | CMAKE_C_COMPILER        | Tells ``cmake`` which C compiler to use. By        |
579 |                         | default, this will be /usr/bin/cc.                 |
580 +-------------------------+----------------------------------------------------+
581 | CMAKE_CXX_COMPILER      | Tells ``cmake`` which C++ compiler to use. By      |
582 |                         | default, this will be /usr/bin/c++.                |
583 +-------------------------+----------------------------------------------------+
584 | CMAKE_BUILD_TYPE        | Tells ``cmake`` what type of build you are trying  |
585 |                         | to generate files for. Valid options are Debug,    |
586 |                         | Release, RelWithDebInfo, and MinSizeRel. Default   |
587 |                         | is Debug.                                          |
588 +-------------------------+----------------------------------------------------+
589 | CMAKE_INSTALL_PREFIX    | Specifies the install directory to target when     |
590 |                         | running the install action of the build files.     |
591 +-------------------------+----------------------------------------------------+
592 | Python3_EXECUTABLE      | Forces CMake to use a specific Python version by   |
593 |                         | passing a path to a Python interpreter. By default |
594 |                         | the Python version of the interpreter in your PATH |
595 |                         | is used.                                           |
596 +-------------------------+----------------------------------------------------+
597 | LLVM_TARGETS_TO_BUILD   | A semicolon delimited list controlling which       |
598 |                         | targets will be built and linked into llvm.        |
599 |                         | The default list is defined as                     |
600 |                         | ``LLVM_ALL_TARGETS``, and can be set to include    |
601 |                         | out-of-tree targets. The default value includes:   |
602 |                         | ``AArch64, AMDGPU, ARM, AVR, BPF, Hexagon, Lanai,  |
603 |                         | Mips, MSP430, NVPTX, PowerPC, RISCV, Sparc,        |
604 |                         | SystemZ, WebAssembly, X86, XCore``.                |
605 |                         |                                                    |
606 +-------------------------+----------------------------------------------------+
607 | LLVM_ENABLE_DOXYGEN     | Build doxygen-based documentation from the source  |
608 |                         | code This is disabled by default because it is     |
609 |                         | slow and generates a lot of output.                |
610 +-------------------------+----------------------------------------------------+
611 | LLVM_ENABLE_PROJECTS    | A semicolon-delimited list selecting which of the  |
612 |                         | other LLVM subprojects to additionally build. (Only|
613 |                         | effective when using a side-by-side project layout |
614 |                         | e.g. via git). The default list is empty. Can      |
615 |                         | include: clang, clang-tools-extra,                 |
616 |                         | cross-project-tests, flang, libc, libclc, lld,     |
617 |                         | lldb, mlir, openmp, polly, or pstl.                |
618 +-------------------------+----------------------------------------------------+
619 | LLVM_ENABLE_RUNTIMES    | A semicolon-delimited list selecting which of the  |
620 |                         | runtimes to build. (Only effective when using the  |
621 |                         | full monorepo layout). The default list is empty.  |
622 |                         | Can include: compiler-rt, libc, libcxx, libcxxabi, |
623 |                         | libunwind, or openmp.                              |
624 +-------------------------+----------------------------------------------------+
625 | LLVM_ENABLE_SPHINX      | Build sphinx-based documentation from the source   |
626 |                         | code. This is disabled by default because it is    |
627 |                         | slow and generates a lot of output. Sphinx version |
628 |                         | 1.5 or later recommended.                          |
629 +-------------------------+----------------------------------------------------+
630 | LLVM_BUILD_LLVM_DYLIB   | Generate libLLVM.so. This library contains a       |
631 |                         | default set of LLVM components that can be         |
632 |                         | overridden with ``LLVM_DYLIB_COMPONENTS``. The     |
633 |                         | default contains most of LLVM and is defined in    |
634 |                         | ``tools/llvm-shlib/CMakelists.txt``. This option is|
635 |                         | not available on Windows.                          |
636 +-------------------------+----------------------------------------------------+
637 | LLVM_OPTIMIZED_TABLEGEN | Builds a release tablegen that gets used during    |
638 |                         | the LLVM build. This can dramatically speed up     |
639 |                         | debug builds.                                      |
640 +-------------------------+----------------------------------------------------+
642 To configure LLVM, follow these steps:
644 #. Change directory into the object root directory:
646    .. code-block:: console
648      % cd OBJ_ROOT
650 #. Run the ``cmake``:
652    .. code-block:: console
654      % cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=<type> -DCMAKE_INSTALL_PREFIX=/install/path
655        [other options] SRC_ROOT
657 Compiling the LLVM Suite Source Code
658 ------------------------------------
660 Unlike with autotools, with CMake your build type is defined at configuration.
661 If you want to change your build type, you can re-run cmake with the following
662 invocation:
664    .. code-block:: console
666      % cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=<type> -DCMAKE_BUILD_TYPE=type SRC_ROOT
668 Between runs, CMake preserves the values set for all options. CMake has the
669 following build types defined:
671 Debug
673   These builds are the default. The build system will compile the tools and
674   libraries unoptimized, with debugging information, and asserts enabled.
676 Release
678   For these builds, the build system will compile the tools and libraries
679   with optimizations enabled and not generate debug info. CMakes default
680   optimization level is -O3. This can be configured by setting the
681   ``CMAKE_CXX_FLAGS_RELEASE`` variable on the CMake command line.
683 RelWithDebInfo
685   These builds are useful when debugging. They generate optimized binaries with
686   debug information. CMakes default optimization level is -O2. This can be
687   configured by setting the ``CMAKE_CXX_FLAGS_RELWITHDEBINFO`` variable on the
688   CMake command line.
690 Once you have LLVM configured, you can build it by entering the *OBJ_ROOT*
691 directory and issuing the following command:
693 .. code-block:: console
695   % make
697 If the build fails, please `check here`_ to see if you are using a version of
698 GCC that is known not to compile LLVM.
700 If you have multiple processors in your machine, you may wish to use some of the
701 parallel build options provided by GNU Make.  For example, you could use the
702 command:
704 .. code-block:: console
706   % make -j2
708 There are several special targets which are useful when working with the LLVM
709 source code:
711 ``make clean``
713   Removes all files generated by the build.  This includes object files,
714   generated C/C++ files, libraries, and executables.
716 ``make install``
718   Installs LLVM header files, libraries, tools, and documentation in a hierarchy
719   under ``$PREFIX``, specified with ``CMAKE_INSTALL_PREFIX``, which
720   defaults to ``/usr/local``.
722 ``make docs-llvm-html``
724   If configured with ``-DLLVM_ENABLE_SPHINX=On``, this will generate a directory
725   at ``OBJ_ROOT/docs/html`` which contains the HTML formatted documentation.
727 Cross-Compiling LLVM
728 --------------------
730 It is possible to cross-compile LLVM itself. That is, you can create LLVM
731 executables and libraries to be hosted on a platform different from the platform
732 where they are built (a Canadian Cross build). To generate build files for
733 cross-compiling CMake provides a variable ``CMAKE_TOOLCHAIN_FILE`` which can
734 define compiler flags and variables used during the CMake test operations.
736 The result of such a build is executables that are not runnable on the build
737 host but can be executed on the target. As an example the following CMake
738 invocation can generate build files targeting iOS. This will work on macOS
739 with the latest Xcode:
741 .. code-block:: console
743   % cmake -G "Ninja" -DCMAKE_OSX_ARCHITECTURES="armv7;armv7s;arm64"
744     -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake
745     -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off
746     -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off [options]
747     <PATH_TO_LLVM>
749 Note: There are some additional flags that need to be passed when building for
750 iOS due to limitations in the iOS SDK.
752 Check :doc:`HowToCrossCompileLLVM` and `Clang docs on how to cross-compile in general
753 <https://clang.llvm.org/docs/CrossCompilation.html>`_ for more information
754 about cross-compiling.
756 The Location of LLVM Object Files
757 ---------------------------------
759 The LLVM build system is capable of sharing a single LLVM source tree among
760 several LLVM builds.  Hence, it is possible to build LLVM for several different
761 platforms or configurations using the same source tree.
763 * Change directory to where the LLVM object files should live:
765   .. code-block:: console
767     % cd OBJ_ROOT
769 * Run ``cmake``:
771   .. code-block:: console
773     % cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release SRC_ROOT
775 The LLVM build will create a structure underneath *OBJ_ROOT* that matches the
776 LLVM source tree. At each level where source files are present in the source
777 tree there will be a corresponding ``CMakeFiles`` directory in the *OBJ_ROOT*.
778 Underneath that directory there is another directory with a name ending in
779 ``.dir`` under which you'll find object files for each source.
781 For example:
783   .. code-block:: console
785     % cd llvm_build_dir
786     % find lib/Support/ -name APFloat*
787     lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o
789 Optional Configuration Items
790 ----------------------------
792 If you're running on a Linux system that supports the `binfmt_misc
793 <http://en.wikipedia.org/wiki/binfmt_misc>`_
794 module, and you have root access on the system, you can set your system up to
795 execute LLVM bitcode files directly. To do this, use commands like this (the
796 first command may not be required if you are already using the module):
798 .. code-block:: console
800   % mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
801   % echo ':llvm:M::BC::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
802   % chmod u+x hello.bc   (if needed)
803   % ./hello.bc
805 This allows you to execute LLVM bitcode files directly.  On Debian, you can also
806 use this command instead of the 'echo' command above:
808 .. code-block:: console
810   % sudo update-binfmts --install llvm /path/to/lli --magic 'BC'
812 .. _Program Layout:
813 .. _general layout:
815 Directory Layout
816 ================
818 One useful source of information about the LLVM source base is the LLVM `doxygen
819 <http://www.doxygen.org/>`_ documentation available at
820 `<https://llvm.org/doxygen/>`_.  The following is a brief introduction to code
821 layout:
823 ``llvm/cmake``
824 --------------
825 Generates system build files.
827 ``llvm/cmake/modules``
828   Build configuration for llvm user defined options. Checks compiler version and
829   linker flags.
831 ``llvm/cmake/platforms``
832   Toolchain configuration for Android NDK, iOS systems and non-Windows hosts to
833   target MSVC.
835 ``llvm/examples``
836 -----------------
838 - Some simple examples showing how to use LLVM as a compiler for a custom
839   language - including lowering, optimization, and code generation.
841 - Kaleidoscope Tutorial: Kaleidoscope language tutorial run through the
842   implementation of a nice little compiler for a non-trivial language
843   including a hand-written lexer, parser, AST, as well as code generation
844   support using LLVM- both static (ahead of time) and various approaches to
845   Just In Time (JIT) compilation.
846   `Kaleidoscope Tutorial for complete beginner
847   <https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html>`_.
849 - BuildingAJIT: Examples of the `BuildingAJIT tutorial
850   <https://llvm.org/docs/tutorial/BuildingAJIT1.html>`_ that shows how LLVM’s
851   ORC JIT APIs interact with other parts of LLVM. It also, teaches how to
852   recombine them to build a custom JIT that is suited to your use-case.
854 ``llvm/include``
855 ----------------
857 Public header files exported from the LLVM library. The three main subdirectories:
859 ``llvm/include/llvm``
861   All LLVM-specific header files, and  subdirectories for different portions of
862   LLVM: ``Analysis``, ``CodeGen``, ``Target``, ``Transforms``, etc...
864 ``llvm/include/llvm/Support``
866   Generic support libraries provided with LLVM but not necessarily specific to
867   LLVM. For example, some C++ STL utilities and a Command Line option processing
868   library store header files here.
870 ``llvm/include/llvm/Config``
872   Header files configured by ``cmake``.  They wrap "standard" UNIX and
873   C header files.  Source code can include these header files which
874   automatically take care of the conditional #includes that ``cmake``
875   generates.
877 ``llvm/lib``
878 ------------
880 Most source files are here. By putting code in libraries, LLVM makes it easy to
881 share code among the `tools`_.
883 ``llvm/lib/IR/``
885   Core LLVM source files that implement core classes like Instruction and
886   BasicBlock.
888 ``llvm/lib/AsmParser/``
890   Source code for the LLVM assembly language parser library.
892 ``llvm/lib/Bitcode/``
894   Code for reading and writing bitcode.
896 ``llvm/lib/Analysis/``
898   A variety of program analyses, such as Call Graphs, Induction Variables,
899   Natural Loop Identification, etc.
901 ``llvm/lib/Transforms/``
903   IR-to-IR program transformations, such as Aggressive Dead Code Elimination,
904   Sparse Conditional Constant Propagation, Inlining, Loop Invariant Code Motion,
905   Dead Global Elimination, and many others.
907 ``llvm/lib/Target/``
909   Files describing target architectures for code generation.  For example,
910   ``llvm/lib/Target/X86`` holds the X86 machine description.
912 ``llvm/lib/CodeGen/``
914   The major parts of the code generator: Instruction Selector, Instruction
915   Scheduling, and Register Allocation.
917 ``llvm/lib/MC/``
919   The libraries represent and process code at machine code level. Handles
920   assembly and object-file emission.
922 ``llvm/lib/ExecutionEngine/``
924   Libraries for directly executing bitcode at runtime in interpreted and
925   JIT-compiled scenarios.
927 ``llvm/lib/Support/``
929   Source code that corresponding to the header files in ``llvm/include/ADT/``
930   and ``llvm/include/Support/``.
932 ``llvm/bindings``
933 ----------------------
935 Contains bindings for the LLVM compiler infrastructure to allow
936 programs written in languages other than C or C++ to take advantage of the LLVM
937 infrastructure.
938 LLVM project provides language bindings for OCaml and Python.
940 ``llvm/projects``
941 -----------------
943 Projects not strictly part of LLVM but shipped with LLVM. This is also the
944 directory for creating your own LLVM-based projects which leverage the LLVM
945 build system.
947 ``llvm/test``
948 -------------
950 Feature and regression tests and other sanity checks on LLVM infrastructure. These
951 are intended to run quickly and cover a lot of territory without being exhaustive.
953 ``test-suite``
954 --------------
956 A comprehensive correctness, performance, and benchmarking test suite
957 for LLVM.  This comes in a ``separate git repository
958 <https://github.com/llvm/llvm-test-suite>``, because it contains a
959 large amount of third-party code under a variety of licenses. For
960 details see the :doc:`Testing Guide <TestingGuide>` document.
962 .. _tools:
964 ``llvm/tools``
965 --------------
967 Executables built out of the libraries
968 above, which form the main part of the user interface.  You can always get help
969 for a tool by typing ``tool_name -help``.  The following is a brief introduction
970 to the most important tools.  More detailed information is in
971 the `Command Guide <CommandGuide/index.html>`_.
973 ``bugpoint``
975   ``bugpoint`` is used to debug optimization passes or code generation backends
976   by narrowing down the given test case to the minimum number of passes and/or
977   instructions that still cause a problem, whether it is a crash or
978   miscompilation. See `<HowToSubmitABug.html>`_ for more information on using
979   ``bugpoint``.
981 ``llvm-ar``
983   The archiver produces an archive containing the given LLVM bitcode files,
984   optionally with an index for faster lookup.
986 ``llvm-as``
988   The assembler transforms the human readable LLVM assembly to LLVM bitcode.
990 ``llvm-dis``
992   The disassembler transforms the LLVM bitcode to human readable LLVM assembly.
994 ``llvm-link``
996   ``llvm-link``, not surprisingly, links multiple LLVM modules into a single
997   program.
999 ``lli``
1001   ``lli`` is the LLVM interpreter, which can directly execute LLVM bitcode
1002   (although very slowly...). For architectures that support it (currently x86,
1003   Sparc, and PowerPC), by default, ``lli`` will function as a Just-In-Time
1004   compiler (if the functionality was compiled in), and will execute the code
1005   *much* faster than the interpreter.
1007 ``llc``
1009   ``llc`` is the LLVM backend compiler, which translates LLVM bitcode to a
1010   native code assembly file.
1012 ``opt``
1014   ``opt`` reads LLVM bitcode, applies a series of LLVM to LLVM transformations
1015   (which are specified on the command line), and outputs the resultant
1016   bitcode.   '``opt -help``'  is a good way to get a list of the
1017   program transformations available in LLVM.
1019   ``opt`` can also  run a specific analysis on an input LLVM bitcode
1020   file and print  the results.  Primarily useful for debugging
1021   analyses, or familiarizing yourself with what an analysis does.
1023 ``llvm/utils``
1024 --------------
1026 Utilities for working with LLVM source code; some are part of the build process
1027 because they are code generators for parts of the infrastructure.
1030 ``codegen-diff``
1032   ``codegen-diff`` finds differences between code that LLC
1033   generates and code that LLI generates. This is useful if you are
1034   debugging one of them, assuming that the other generates correct output. For
1035   the full user manual, run ```perldoc codegen-diff'``.
1037 ``emacs/``
1039    Emacs and XEmacs syntax highlighting  for LLVM   assembly files and TableGen
1040    description files.  See the ``README`` for information on using them.
1042 ``getsrcs.sh``
1044   Finds and outputs all non-generated source files,
1045   useful if one wishes to do a lot of development across directories
1046   and does not want to find each file. One way to use it is to run,
1047   for example: ``xemacs `utils/getsources.sh``` from the top of the LLVM source
1048   tree.
1050 ``llvmgrep``
1052   Performs an ``egrep -H -n`` on each source file in LLVM and
1053   passes to it a regular expression provided on ``llvmgrep``'s command
1054   line. This is an efficient way of searching the source base for a
1055   particular regular expression.
1057 ``TableGen/``
1059   Contains the tool used to generate register
1060   descriptions, instruction set descriptions, and even assemblers from common
1061   TableGen description files.
1063 ``vim/``
1065   vim syntax-highlighting for LLVM assembly files
1066   and TableGen description files. See the    ``README`` for how to use them.
1068 .. _simple example:
1070 An Example Using the LLVM Tool Chain
1071 ====================================
1073 This section gives an example of using LLVM with the Clang front end.
1075 Example with clang
1076 ------------------
1078 #. First, create a simple C file, name it 'hello.c':
1080    .. code-block:: c
1082      #include <stdio.h>
1084      int main() {
1085        printf("hello world\n");
1086        return 0;
1087      }
1089 #. Next, compile the C file into a native executable:
1091    .. code-block:: console
1093      % clang hello.c -o hello
1095    .. note::
1097      Clang works just like GCC by default.  The standard -S and -c arguments
1098      work as usual (producing a native .s or .o file, respectively).
1100 #. Next, compile the C file into an LLVM bitcode file:
1102    .. code-block:: console
1104      % clang -O3 -emit-llvm hello.c -c -o hello.bc
1106    The -emit-llvm option can be used with the -S or -c options to emit an LLVM
1107    ``.ll`` or ``.bc`` file (respectively) for the code.  This allows you to use
1108    the `standard LLVM tools <CommandGuide/index.html>`_ on the bitcode file.
1110 #. Run the program in both forms. To run the program, use:
1112    .. code-block:: console
1114       % ./hello
1116    and
1118    .. code-block:: console
1120      % lli hello.bc
1122    The second examples shows how to invoke the LLVM JIT, :doc:`lli
1123    <CommandGuide/lli>`.
1125 #. Use the ``llvm-dis`` utility to take a look at the LLVM assembly code:
1127    .. code-block:: console
1129      % llvm-dis < hello.bc | less
1131 #. Compile the program to native assembly using the LLC code generator:
1133    .. code-block:: console
1135      % llc hello.bc -o hello.s
1137 #. Assemble the native assembly language file into a program:
1139    .. code-block:: console
1141      % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native   # On Solaris
1143      % gcc hello.s -o hello.native                              # On others
1145 #. Execute the native code program:
1147    .. code-block:: console
1149      % ./hello.native
1151    Note that using clang to compile directly to native code (i.e. when the
1152    ``-emit-llvm`` option is not present) does steps 6/7/8 for you.
1154 Common Problems
1155 ===============
1157 If you are having problems building or using LLVM, or if you have any other
1158 general questions about LLVM, please consult the `Frequently Asked
1159 Questions <FAQ.html>`_ page.
1161 If you are having problems with limited memory and build time, please try
1162 building with ninja instead of make. Please consider configuring the
1163 following options with cmake:
1165  * -G Ninja
1166    Setting this option will allow you to build with ninja instead of make.
1167    Building with ninja significantly improves your build time, especially with
1168    incremental builds, and improves your memory usage.
1170  * -DLLVM_USE_LINKER
1171    Setting this option to lld will significantly reduce linking time for LLVM
1172    executables on ELF-based platforms, such as Linux. If you are building LLVM
1173    for the first time and lld is not available to you as a binary package, then
1174    you may want to use the gold linker as a faster alternative to GNU ld.
1176  * -DCMAKE_BUILD_TYPE
1177    Controls optimization level and debug information of the build.  This setting
1178    can affect RAM and disk usage, see :ref:`CMAKE_BUILD_TYPE <cmake_build_type>`
1179    for more information.
1181  * -DLLVM_ENABLE_ASSERTIONS
1182    This option defaults to ON for Debug builds and defaults to OFF for Release
1183    builds. As mentioned in the previous option, using the Release build type and
1184    enabling assertions may be a good alternative to using the Debug build type.
1186  * -DLLVM_PARALLEL_LINK_JOBS
1187    Set this equal to number of jobs you wish to run simultaneously. This is
1188    similar to the -j option used with make, but only for link jobs. This option
1189    can only be used with ninja. You may wish to use a very low number of jobs,
1190    as this will greatly reduce the amount of memory used during the build
1191    process. If you have limited memory, you may wish to set this to 1.
1193  * -DLLVM_TARGETS_TO_BUILD
1194    Set this equal to the target you wish to build. You may wish to set this to
1195    X86; however, you will find a full list of targets within the
1196    llvm-project/llvm/lib/Target directory.
1198  * -DLLVM_OPTIMIZED_TABLEGEN
1199    Set this to ON to generate a fully optimized tablegen during your build. This
1200    will significantly improve your build time. This is only useful if you are
1201    using the Debug build type.
1203  * -DLLVM_ENABLE_PROJECTS
1204    Set this equal to the projects you wish to compile (e.g. clang, lld, etc.) If
1205    compiling more than one project, separate the items with a semicolon. Should
1206    you run into issues with the semicolon, try surrounding it with single quotes.
1208  * -DLLVM_ENABLE_RUNTIMES
1209    Set this equal to the runtimes you wish to compile (e.g. libcxx, libcxxabi, etc.)
1210    If compiling more than one runtime, separate the items with a semicolon. Should
1211    you run into issues with the semicolon, try surrounding it with single quotes.
1213  * -DCLANG_ENABLE_STATIC_ANALYZER
1214    Set this option to OFF if you do not require the clang static analyzer. This
1215    should improve your build time slightly.
1217  * -DLLVM_USE_SPLIT_DWARF
1218    Consider setting this to ON if you require a debug build, as this will ease
1219    memory pressure on the linker. This will make linking much faster, as the
1220    binaries will not contain any of the debug information; however, this will
1221    generate the debug information in the form of a DWARF object file (with the
1222    extension .dwo). This only applies to host platforms using ELF, such as Linux.
1224 .. _links:
1226 Links
1227 =====
1229 This document is just an **introduction** on how to use LLVM to do some simple
1230 things... there are many more interesting and complicated things that you can do
1231 that aren't documented here (but we'll gladly accept a patch if you want to
1232 write something up!).  For more information about LLVM, check out:
1234 * `LLVM Homepage <https://llvm.org/>`_
1235 * `LLVM Doxygen Tree <https://llvm.org/doxygen/>`_
1236 * `Starting a Project that Uses LLVM <https://llvm.org/docs/Projects.html>`_