1==================================== 2Getting Started with the LLVM System 3==================================== 4 5.. contents:: 6 :local: 7 8Overview 9======== 10 11Welcome to LLVM! In order to get started, you first need to know some basic 12information. 13 14First, LLVM comes in three pieces. The first piece is the LLVM suite. This 15contains all of the tools, libraries, and header files needed to use LLVM. It 16contains an assembler, disassembler, bitcode analyzer and bitcode optimizer. It 17also contains basic regression tests that can be used to test the LLVM tools and 18the Clang front end. 19 20The second piece is the `Clang <http://clang.llvm.org/>`_ front end. This 21component compiles C, C++, Objective C, and Objective C++ code into LLVM 22bitcode. Once compiled into LLVM bitcode, a program can be manipulated with the 23LLVM tools from the LLVM suite. 24 25There is a third, optional piece called Test Suite. It is a suite of programs 26with a testing harness that can be used to further test LLVM's functionality 27and performance. 28 29Getting Started Quickly (A Summary) 30=================================== 31 32The LLVM Getting Started documentation may be out of date. So, the `Clang 33Getting Started <http://clang.llvm.org/get_started.html>`_ page might also be a 34good place to start. 35 36Here's the short story for getting up and running quickly with LLVM: 37 38#. Read the documentation. 39#. Read the documentation. 40#. Remember that you were warned twice about reading the documentation. 41 42 * In particular, the *relative paths specified are important*. 43 44#. Checkout LLVM: 45 46 * ``cd where-you-want-llvm-to-live`` 47 * ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm`` 48 49#. Checkout Clang: 50 51 * ``cd where-you-want-llvm-to-live`` 52 * ``cd llvm/tools`` 53 * ``svn co http://llvm.org/svn/llvm-project/cfe/trunk clang`` 54 55#. Checkout Compiler-RT (required to build the sanitizers) **[Optional]**: 56 57 * ``cd where-you-want-llvm-to-live`` 58 * ``cd llvm/projects`` 59 * ``svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt`` 60 61#. Checkout Libomp (required for OpenMP support) **[Optional]**: 62 63 * ``cd where-you-want-llvm-to-live`` 64 * ``cd llvm/projects`` 65 * ``svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp`` 66 67#. Checkout libcxx and libcxxabi **[Optional]**: 68 69 * ``cd where-you-want-llvm-to-live`` 70 * ``cd llvm/projects`` 71 * ``svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx`` 72 * ``svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi`` 73 74#. Get the Test Suite Source Code **[Optional]** 75 76 * ``cd where-you-want-llvm-to-live`` 77 * ``cd llvm/projects`` 78 * ``svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite`` 79 80#. Configure and build LLVM and Clang: 81 82 *Warning:* Make sure you've checked out *all of* the source code 83 before trying to configure with cmake. cmake does not pickup newly 84 added source directories in incremental builds. 85 86 The build uses `CMake <CMake.html>`_. 87 Although the build is known to work with CMake >= 2.8.8, we recommend CMake 88 >= v3.2, especially if you're generating Ninja build files. 89 90 * ``cd where you want to build llvm`` 91 * ``mkdir build`` 92 * ``cd build`` 93 * ``cmake -G <generator> [options] <path to llvm sources>`` 94 95 Some common generators are: 96 97 * ``Unix Makefiles`` --- for generating make-compatible parallel makefiles. 98 * ``Ninja`` --- for generating `Ninja <http://martine.github.io/ninja/>` 99 build files. Most llvm developers use Ninja. 100 * ``Visual Studio`` --- for generating Visual Studio projects and 101 solutions. 102 * ``Xcode`` --- for generating Xcode projects. 103 104 Some Common options: 105 106 * ``-DCMAKE_INSTALL_PREFIX=directory`` --- Specify for *directory* the full 107 pathname of where you want the LLVM tools and libraries to be installed 108 (default ``/usr/local``). 109 110 * ``-DCMAKE_BUILD_TYPE=type`` --- Valid options for *type* are Debug, 111 Release, RelWithDebInfo, and MinSizeRel. Default is Debug. 112 113 * ``-DLLVM_ENABLE_ASSERTIONS=On`` --- Compile with assertion checks enabled 114 (default is Yes for Debug builds, No for all other build types). 115 116 * Run your build tool of choice! 117 118 * The default target (i.e. ``make``) will build all of LLVM 119 120 * The ``check-all`` target (i.e. ``make check-all``) will run the 121 regression tests to ensure everything is in working order. 122 123 * CMake will generate build targets for each tool and library, and most 124 LLVM sub-projects generate their own ``check-<project>`` target. 125 126 * Running a serial build will be *slow*. Make sure you run a 127 parallel build; for ``make``, use ``make -j``. 128 129 * For more information see `CMake <CMake.html>`_ 130 131 * If you get an "internal compiler error (ICE)" or test failures, see 132 `below`_. 133 134Consult the `Getting Started with LLVM`_ section for detailed information on 135configuring and compiling LLVM. Go to `Directory Layout`_ to learn about the 136layout of the source code tree. 137 138Requirements 139============ 140 141Before you begin to use the LLVM system, review the requirements given below. 142This may save you some trouble by knowing ahead of time what hardware and 143software you will need. 144 145Hardware 146-------- 147 148LLVM is known to work on the following host platforms: 149 150================== ===================== ============= 151OS Arch Compilers 152================== ===================== ============= 153Linux x86\ :sup:`1` GCC, Clang 154Linux amd64 GCC, Clang 155Linux ARM\ :sup:`4` GCC, Clang 156Linux PowerPC GCC, Clang 157Solaris V9 (Ultrasparc) GCC 158FreeBSD x86\ :sup:`1` GCC, Clang 159FreeBSD amd64 GCC, Clang 160MacOS X\ :sup:`2` PowerPC GCC 161MacOS X x86 GCC, Clang 162Cygwin/Win32 x86\ :sup:`1, 3` GCC 163Windows x86\ :sup:`1` Visual Studio 164Windows x64 x86-64 Visual Studio 165================== ===================== ============= 166 167.. note:: 168 169 #. Code generation supported for Pentium processors and up 170 #. Code generation supported for 32-bit ABI only 171 #. To use LLVM modules on Win32-based system, you may configure LLVM 172 with ``-DBUILD_SHARED_LIBS=On``. 173 #. MCJIT not working well pre-v7, old JIT engine not supported any more. 174 175Note that Debug builds require a lot of time and disk space. An LLVM-only build 176will need about 1-3 GB of space. A full build of LLVM and Clang will need around 17715-20 GB of disk space. The exact space requirements will vary by system. (It 178is so large because of all the debugging information and the fact that the 179libraries are statically linked into multiple tools). 180 181If you you are space-constrained, you can build only selected tools or only 182selected targets. The Release build requires considerably less space. 183 184The LLVM suite *may* compile on other platforms, but it is not guaranteed to do 185so. If compilation is successful, the LLVM utilities should be able to 186assemble, disassemble, analyze, and optimize LLVM bitcode. Code generation 187should work as well, although the generated native code may not work on your 188platform. 189 190Software 191-------- 192 193Compiling LLVM requires that you have several software packages installed. The 194table below lists those required packages. The Package column is the usual name 195for the software package that LLVM depends on. The Version column provides 196"known to work" versions of the package. The Notes column describes how LLVM 197uses the package and provides other details. 198 199=========================================================== ============ ========================================== 200Package Version Notes 201=========================================================== ============ ========================================== 202`GNU Make <http://savannah.gnu.org/projects/make>`_ 3.79, 3.79.1 Makefile/build processor 203`GCC <http://gcc.gnu.org/>`_ >=4.7.0 C/C++ compiler\ :sup:`1` 204`python <http://www.python.org/>`_ >=2.7 Automated test suite\ :sup:`2` 205`libtool <http://savannah.gnu.org/projects/libtool>`_ 1.5.22 Shared library manager\ :sup:`3` 206`zlib <http://zlib.net>`_ >=1.2.3.4 Compression library\ :sup:`4` 207=========================================================== ============ ========================================== 208 209.. note:: 210 211 #. Only the C and C++ languages are needed so there's no need to build the 212 other languages for LLVM's purposes. See `below` for specific version 213 info. 214 #. Only needed if you want to run the automated test suite in the 215 ``llvm/test`` directory. 216 #. Optional, adds compression / uncompression capabilities to selected LLVM 217 tools. 218 219Additionally, your compilation host is expected to have the usual plethora of 220Unix utilities. Specifically: 221 222* **ar** --- archive library builder 223* **bzip2** --- bzip2 command for distribution generation 224* **bunzip2** --- bunzip2 command for distribution checking 225* **chmod** --- change permissions on a file 226* **cat** --- output concatenation utility 227* **cp** --- copy files 228* **date** --- print the current date/time 229* **echo** --- print to standard output 230* **egrep** --- extended regular expression search utility 231* **find** --- find files/dirs in a file system 232* **grep** --- regular expression search utility 233* **gzip** --- gzip command for distribution generation 234* **gunzip** --- gunzip command for distribution checking 235* **install** --- install directories/files 236* **mkdir** --- create a directory 237* **mv** --- move (rename) files 238* **ranlib** --- symbol table builder for archive libraries 239* **rm** --- remove (delete) files and directories 240* **sed** --- stream editor for transforming output 241* **sh** --- Bourne shell for make build scripts 242* **tar** --- tape archive for distribution generation 243* **test** --- test things in file system 244* **unzip** --- unzip command for distribution checking 245* **zip** --- zip command for distribution generation 246 247.. _below: 248.. _check here: 249 250Host C++ Toolchain, both Compiler and Standard Library 251------------------------------------------------------ 252 253LLVM is very demanding of the host C++ compiler, and as such tends to expose 254bugs in the compiler. We are also planning to follow improvements and 255developments in the C++ language and library reasonably closely. As such, we 256require a modern host C++ toolchain, both compiler and standard library, in 257order to build LLVM. 258 259For the most popular host toolchains we check for specific minimum versions in 260our build systems: 261 262* Clang 3.1 263* GCC 4.7 264* Visual Studio 2013 265 266Anything older than these toolchains *may* work, but will require forcing the 267build system with a special option and is not really a supported host platform. 268Also note that older versions of these compilers have often crashed or 269miscompiled LLVM. 270 271For less widely used host toolchains such as ICC or xlC, be aware that a very 272recent version may be required to support all of the C++ features used in LLVM. 273 274We track certain versions of software that are *known* to fail when used as 275part of the host toolchain. These even include linkers at times. 276 277**GCC 4.6.3 on ARM**: Miscompiles ``llvm-readobj`` at ``-O3``. A test failure 278in ``test/Object/readobj-shared-object.test`` is one symptom of the problem. 279 280**GNU ld 2.16.X**. Some 2.16.X versions of the ld linker will produce very long 281warning messages complaining that some "``.gnu.linkonce.t.*``" symbol was 282defined in a discarded section. You can safely ignore these messages as they are 283erroneous and the linkage is correct. These messages disappear using ld 2.17. 284 285**GNU binutils 2.17**: Binutils 2.17 contains `a bug 286<http://sourceware.org/bugzilla/show_bug.cgi?id=3111>`__ which causes huge link 287times (minutes instead of seconds) when building LLVM. We recommend upgrading 288to a newer version (2.17.50.0.4 or later). 289 290**GNU Binutils 2.19.1 Gold**: This version of Gold contained `a bug 291<http://sourceware.org/bugzilla/show_bug.cgi?id=9836>`__ which causes 292intermittent failures when building LLVM with position independent code. The 293symptom is an error about cyclic dependencies. We recommend upgrading to a 294newer version of Gold. 295 296**Clang 3.0 with libstdc++ 4.7.x**: a few Linux distributions (Ubuntu 12.10, 297Fedora 17) have both Clang 3.0 and libstdc++ 4.7 in their repositories. Clang 2983.0 does not implement a few builtins that are used in this library. We 299recommend using the system GCC to compile LLVM and Clang in this case. 300 301**Clang 3.0 on Mageia 2**. There's a packaging issue: Clang can not find at 302least some (``cxxabi.h``) libstdc++ headers. 303 304**Clang in C++11 mode and libstdc++ 4.7.2**. This version of libstdc++ 305contained `a bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53841>`__ which 306causes Clang to refuse to compile condition_variable header file. At the time 307of writing, this breaks LLD build. 308 309Getting a Modern Host C++ Toolchain 310^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 311 312This section mostly applies to Linux and older BSDs. On Mac OS X, you should 313have a sufficiently modern Xcode, or you will likely need to upgrade until you 314do. On Windows, just use Visual Studio 2013 as the host compiler, it is 315explicitly supported and widely available. FreeBSD 10.0 and newer have a modern 316Clang as the system compiler. 317 318However, some Linux distributions and some other or older BSDs sometimes have 319extremely old versions of GCC. These steps attempt to help you upgrade you 320compiler even on such a system. However, if at all possible, we encourage you 321to use a recent version of a distribution with a modern system compiler that 322meets these requirements. Note that it is tempting to to install a prior 323version of Clang and libc++ to be the host compiler, however libc++ was not 324well tested or set up to build on Linux until relatively recently. As 325a consequence, this guide suggests just using libstdc++ and a modern GCC as the 326initial host in a bootstrap, and then using Clang (and potentially libc++). 327 328The first step is to get a recent GCC toolchain installed. The most common 329distribution on which users have struggled with the version requirements is 330Ubuntu Precise, 12.04 LTS. For this distribution, one easy option is to install 331the `toolchain testing PPA`_ and use it to install a modern GCC. There is 332a really nice discussions of this on the `ask ubuntu stack exchange`_. However, 333not all users can use PPAs and there are many other distributions, so it may be 334necessary (or just useful, if you're here you *are* doing compiler development 335after all) to build and install GCC from source. It is also quite easy to do 336these days. 337 338.. _toolchain testing PPA: 339 https://launchpad.net/~ubuntu-toolchain-r/+archive/test 340.. _ask ubuntu stack exchange: 341 http://askubuntu.com/questions/271388/how-to-install-gcc-4-8-in-ubuntu-12-04-from-the-terminal 342 343Easy steps for installing GCC 4.8.2: 344 345.. code-block:: console 346 347 % wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2 348 % wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2.sig 349 % wget https://ftp.gnu.org/gnu/gnu-keyring.gpg 350 % signature_invalid=`gpg --verify --no-default-keyring --keyring ./gnu-keyring.gpg gcc-4.8.2.tar.bz2.sig` 351 % if [ $signature_invalid ]; then echo "Invalid signature" ; exit 1 ; fi 352 % tar -xvjf gcc-4.8.2.tar.bz2 353 % cd gcc-4.8.2 354 % ./contrib/download_prerequisites 355 % cd .. 356 % mkdir gcc-4.8.2-build 357 % cd gcc-4.8.2-build 358 % $PWD/../gcc-4.8.2/configure --prefix=$HOME/toolchains --enable-languages=c,c++ 359 % make -j$(nproc) 360 % make install 361 362For more details, check out the excellent `GCC wiki entry`_, where I got most 363of this information from. 364 365.. _GCC wiki entry: 366 http://gcc.gnu.org/wiki/InstallingGCC 367 368Once you have a GCC toolchain, configure your build of LLVM to use the new 369toolchain for your host compiler and C++ standard library. Because the new 370version of libstdc++ is not on the system library search path, you need to pass 371extra linker flags so that it can be found at link time (``-L``) and at runtime 372(``-rpath``). If you are using CMake, this invocation should produce working 373binaries: 374 375.. code-block:: console 376 377 % mkdir build 378 % cd build 379 % CC=$HOME/toolchains/bin/gcc CXX=$HOME/toolchains/bin/g++ \ 380 cmake .. -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$HOME/toolchains/lib64 -L$HOME/toolchains/lib64" 381 382If you fail to set rpath, most LLVM binaries will fail on startup with a message 383from the loader similar to ``libstdc++.so.6: version `GLIBCXX_3.4.20' not 384found``. This means you need to tweak the -rpath linker flag. 385 386When you build Clang, you will need to give *it* access to modern C++11 387standard library in order to use it as your new host in part of a bootstrap. 388There are two easy ways to do this, either build (and install) libc++ along 389with Clang and then use it with the ``-stdlib=libc++`` compile and link flag, 390or install Clang into the same prefix (``$HOME/toolchains`` above) as GCC. 391Clang will look within its own prefix for libstdc++ and use it if found. You 392can also add an explicit prefix for Clang to look in for a GCC toolchain with 393the ``--gcc-toolchain=/opt/my/gcc/prefix`` flag, passing it to both compile and 394link commands when using your just-built-Clang to bootstrap. 395 396.. _Getting Started with LLVM: 397 398Getting Started with LLVM 399========================= 400 401The remainder of this guide is meant to get you up and running with LLVM and to 402give you some basic information about the LLVM environment. 403 404The later sections of this guide describe the `general layout`_ of the LLVM 405source tree, a `simple example`_ using the LLVM tool chain, and `links`_ to find 406more information about LLVM or to get help via e-mail. 407 408Terminology and Notation 409------------------------ 410 411Throughout this manual, the following names are used to denote paths specific to 412the local system and working environment. *These are not environment variables 413you need to set but just strings used in the rest of this document below*. In 414any of the examples below, simply replace each of these names with the 415appropriate pathname on your local system. All these paths are absolute: 416 417``SRC_ROOT`` 418 419 This is the top level directory of the LLVM source tree. 420 421``OBJ_ROOT`` 422 423 This is the top level directory of the LLVM object tree (i.e. the tree where 424 object files and compiled programs will be placed. It can be the same as 425 SRC_ROOT). 426 427Unpacking the LLVM Archives 428--------------------------- 429 430If you have the LLVM distribution, you will need to unpack it before you can 431begin to compile it. LLVM is distributed as a set of two files: the LLVM suite 432and the LLVM GCC front end compiled for your platform. There is an additional 433test suite that is optional. Each file is a TAR archive that is compressed with 434the gzip program. 435 436The files are as follows, with *x.y* marking the version number: 437 438``llvm-x.y.tar.gz`` 439 440 Source release for the LLVM libraries and tools. 441 442``llvm-test-x.y.tar.gz`` 443 444 Source release for the LLVM test-suite. 445 446.. _checkout: 447 448Checkout LLVM from Subversion 449----------------------------- 450 451If you have access to our Subversion repository, you can get a fresh copy of the 452entire source code. All you need to do is check it out from Subversion as 453follows: 454 455* ``cd where-you-want-llvm-to-live`` 456* Read-Only: ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm`` 457* Read-Write: ``svn co https://[email protected]/svn/llvm-project/llvm/trunk llvm`` 458 459This will create an '``llvm``' directory in the current directory and fully 460populate it with the LLVM source code, Makefiles, test directories, and local 461copies of documentation files. 462 463If you want to get a specific release (as opposed to the most recent revision), 464you can checkout it from the '``tags``' directory (instead of '``trunk``'). The 465following releases are located in the following subdirectories of the '``tags``' 466directory: 467 468* Release 3.4: **RELEASE_34/final** 469* Release 3.3: **RELEASE_33/final** 470* Release 3.2: **RELEASE_32/final** 471* Release 3.1: **RELEASE_31/final** 472* Release 3.0: **RELEASE_30/final** 473* Release 2.9: **RELEASE_29/final** 474* Release 2.8: **RELEASE_28** 475* Release 2.7: **RELEASE_27** 476* Release 2.6: **RELEASE_26** 477* Release 2.5: **RELEASE_25** 478* Release 2.4: **RELEASE_24** 479* Release 2.3: **RELEASE_23** 480* Release 2.2: **RELEASE_22** 481* Release 2.1: **RELEASE_21** 482* Release 2.0: **RELEASE_20** 483* Release 1.9: **RELEASE_19** 484* Release 1.8: **RELEASE_18** 485* Release 1.7: **RELEASE_17** 486* Release 1.6: **RELEASE_16** 487* Release 1.5: **RELEASE_15** 488* Release 1.4: **RELEASE_14** 489* Release 1.3: **RELEASE_13** 490* Release 1.2: **RELEASE_12** 491* Release 1.1: **RELEASE_11** 492* Release 1.0: **RELEASE_1** 493 494If you would like to get the LLVM test suite (a separate package as of 1.4), you 495get it from the Subversion repository: 496 497.. code-block:: console 498 499 % cd llvm/projects 500 % svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite 501 502By placing it in the ``llvm/projects``, it will be automatically configured by 503the LLVM cmake configuration. 504 505Git Mirror 506---------- 507 508Git mirrors are available for a number of LLVM subprojects. These mirrors sync 509automatically with each Subversion commit and contain all necessary git-svn 510marks (so, you can recreate git-svn metadata locally). Note that right now 511mirrors reflect only ``trunk`` for each project. You can do the read-only Git 512clone of LLVM via: 513 514.. code-block:: console 515 516 % git clone http://llvm.org/git/llvm.git 517 518If you want to check out clang too, run: 519 520.. code-block:: console 521 522 % cd llvm/tools 523 % git clone http://llvm.org/git/clang.git 524 525If you want to check out compiler-rt (required to build the sanitizers), run: 526 527.. code-block:: console 528 529 % cd llvm/projects 530 % git clone http://llvm.org/git/compiler-rt.git 531 532If you want to check out libomp (required for OpenMP support), run: 533 534.. code-block:: console 535 536 % cd llvm/projects 537 % git clone http://llvm.org/git/openmp.git 538 539If you want to check out libcxx and libcxxabi (optional), run: 540 541.. code-block:: console 542 543 % cd llvm/projects 544 % git clone http://llvm.org/git/libcxx.git 545 % git clone http://llvm.org/git/libcxxabi.git 546 547If you want to check out the Test Suite Source Code (optional), run: 548 549.. code-block:: console 550 551 % cd llvm/projects 552 % git clone http://llvm.org/git/test-suite.git 553 554Since the upstream repository is in Subversion, you should use ``git 555pull --rebase`` instead of ``git pull`` to avoid generating a non-linear history 556in your clone. To configure ``git pull`` to pass ``--rebase`` by default on the 557master branch, run the following command: 558 559.. code-block:: console 560 561 % git config branch.master.rebase true 562 563Sending patches with Git 564^^^^^^^^^^^^^^^^^^^^^^^^ 565 566Please read `Developer Policy <DeveloperPolicy.html#one-off-patches>`_, too. 567 568Assume ``master`` points the upstream and ``mybranch`` points your working 569branch, and ``mybranch`` is rebased onto ``master``. At first you may check 570sanity of whitespaces: 571 572.. code-block:: console 573 574 % git diff --check master..mybranch 575 576The easiest way to generate a patch is as below: 577 578.. code-block:: console 579 580 % git diff master..mybranch > /path/to/mybranch.diff 581 582It is a little different from svn-generated diff. git-diff-generated diff has 583prefixes like ``a/`` and ``b/``. Don't worry, most developers might know it 584could be accepted with ``patch -p1 -N``. 585 586But you may generate patchset with git-format-patch. It generates by-each-commit 587patchset. To generate patch files to attach to your article: 588 589.. code-block:: console 590 591 % git format-patch --no-attach master..mybranch -o /path/to/your/patchset 592 593If you would like to send patches directly, you may use git-send-email or 594git-imap-send. Here is an example to generate the patchset in Gmail's [Drafts]. 595 596.. code-block:: console 597 598 % git format-patch --attach master..mybranch --stdout | git imap-send 599 600Then, your .git/config should have [imap] sections. 601 602.. code-block:: ini 603 604 [imap] 605 host = imaps://imap.gmail.com 606 user = [email protected] 607 pass = himitsu! 608 port = 993 609 sslverify = false 610 ; in English 611 folder = "[Gmail]/Drafts" 612 ; example for Japanese, "Modified UTF-7" encoded. 613 folder = "[Gmail]/&Tgtm+DBN-" 614 ; example for Traditional Chinese 615 folder = "[Gmail]/&g0l6Pw-" 616 617.. _developers-work-with-git-svn: 618 619For developers to work with git-svn 620^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 621 622To set up clone from which you can submit code using ``git-svn``, run: 623 624.. code-block:: console 625 626 % git clone http://llvm.org/git/llvm.git 627 % cd llvm 628 % git svn init https://llvm.org/svn/llvm-project/llvm/trunk --username=<username> 629 % git config svn-remote.svn.fetch :refs/remotes/origin/master 630 % git svn rebase -l # -l avoids fetching ahead of the git mirror. 631 632 # If you have clang too: 633 % cd tools 634 % git clone http://llvm.org/git/clang.git 635 % cd clang 636 % git svn init https://llvm.org/svn/llvm-project/cfe/trunk --username=<username> 637 % git config svn-remote.svn.fetch :refs/remotes/origin/master 638 % git svn rebase -l 639 640Likewise for compiler-rt, libomp and test-suite. 641 642To update this clone without generating git-svn tags that conflict with the 643upstream Git repo, run: 644 645.. code-block:: console 646 647 % git fetch && (cd tools/clang && git fetch) # Get matching revisions of both trees. 648 % git checkout master 649 % git svn rebase -l 650 % (cd tools/clang && 651 git checkout master && 652 git svn rebase -l) 653 654Likewise for compiler-rt, libomp and test-suite. 655 656This leaves your working directories on their master branches, so you'll need to 657``checkout`` each working branch individually and ``rebase`` it on top of its 658parent branch. 659 660For those who wish to be able to update an llvm repo/revert patches easily using 661git-svn, please look in the directory for the scripts ``git-svnup`` and 662``git-svnrevert``. 663 664To perform the aforementioned update steps go into your source directory and 665just type ``git-svnup`` or ``git svnup`` and everything will just work. 666 667If one wishes to revert a commit with git-svn, but do not want the git hash to 668escape into the commit message, one can use the script ``git-svnrevert`` or 669``git svnrevert`` which will take in the git hash for the commit you want to 670revert, look up the appropriate svn revision, and output a message where all 671references to the git hash have been replaced with the svn revision. 672 673To commit back changes via git-svn, use ``git svn dcommit``: 674 675.. code-block:: console 676 677 % git svn dcommit 678 679Note that git-svn will create one SVN commit for each Git commit you have pending, 680so squash and edit each commit before executing ``dcommit`` to make sure they all 681conform to the coding standards and the developers' policy. 682 683On success, ``dcommit`` will rebase against the HEAD of SVN, so to avoid conflict, 684please make sure your current branch is up-to-date (via fetch/rebase) before 685proceeding. 686 687The git-svn metadata can get out of sync after you mess around with branches and 688``dcommit``. When that happens, ``git svn dcommit`` stops working, complaining 689about files with uncommitted changes. The fix is to rebuild the metadata: 690 691.. code-block:: console 692 693 % rm -rf .git/svn 694 % git svn rebase -l 695 696Please, refer to the Git-SVN manual (``man git-svn``) for more information. 697 698Local LLVM Configuration 699------------------------ 700 701Once checked out from the Subversion repository, the LLVM suite source code must 702be configured before being built. This process uses CMake. 703Unlinke the normal ``configure`` script, CMake 704generates the build files in whatever format you request as well as various 705``*.inc`` files, and ``llvm/include/Config/config.h``. 706 707Variables are passed to ``cmake`` on the command line using the format 708``-D<variable name>=<value>``. The following variables are some common options 709used by people developing LLVM. 710 711+-------------------------+----------------------------------------------------+ 712| Variable | Purpose | 713+=========================+====================================================+ 714| CMAKE_C_COMPILER | Tells ``cmake`` which C compiler to use. By | 715| | default, this will be /usr/bin/cc. | 716+-------------------------+----------------------------------------------------+ 717| CMAKE_CXX_COMPILER | Tells ``cmake`` which C++ compiler to use. By | 718| | default, this will be /usr/bin/c++. | 719+-------------------------+----------------------------------------------------+ 720| CMAKE_BUILD_TYPE | Tells ``cmake`` what type of build you are trying | 721| | to generate files for. Valid options are Debug, | 722| | Release, RelWithDebInfo, and MinSizeRel. Default | 723| | is Debug. | 724+-------------------------+----------------------------------------------------+ 725| CMAKE_INSTALL_PREFIX | Specifies the install directory to target when | 726| | running the install action of the build files. | 727+-------------------------+----------------------------------------------------+ 728| LLVM_TARGETS_TO_BUILD | A semicolon delimited list controlling which | 729| | targets will be built and linked into llc. This is | 730| | equivalent to the ``--enable-targets`` option in | 731| | the configure script. The default list is defined | 732| | as ``LLVM_ALL_TARGETS``, and can be set to include | 733| | out-of-tree targets. The default value includes: | 734| | ``AArch64, AMDGPU, ARM, BPF, CppBackend, Hexagon, | 735| | Mips, MSP430, NVPTX, PowerPC, Sparc, SystemZ | 736| | X86, XCore``. | 737+-------------------------+----------------------------------------------------+ 738| LLVM_ENABLE_DOXYGEN | Build doxygen-based documentation from the source | 739| | code This is disabled by default because it is | 740| | slow and generates a lot of output. | 741+-------------------------+----------------------------------------------------+ 742| LLVM_ENABLE_SPHINX | Build sphinx-based documentation from the source | 743| | code. This is disabled by default because it is | 744| | slow and generates a lot of output. | 745+-------------------------+----------------------------------------------------+ 746| LLVM_BUILD_LLVM_DYLIB | Generate libLLVM.so. This library contains a | 747| | default set of LLVM components that can be | 748| | overridden with ``LLVM_DYLIB_COMPONENTS``. The | 749| | default contains most of LLVM and is defined in | 750| | ``tools/llvm-shlib/CMakelists.txt``. | 751+-------------------------+----------------------------------------------------+ 752| LLVM_OPTIMIZED_TABLEGEN | Builds a release tablegen that gets used during | 753| | the LLVM build. This can dramatically speed up | 754| | debug builds. | 755+-------------------------+----------------------------------------------------+ 756 757To configure LLVM, follow these steps: 758 759#. Change directory into the object root directory: 760 761 .. code-block:: console 762 763 % cd OBJ_ROOT 764 765#. Run the ``cmake``: 766 767 .. code-block:: console 768 769 % cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=prefix=/install/path 770 [other options] SRC_ROOT 771 772Compiling the LLVM Suite Source Code 773------------------------------------ 774 775Unlike with autotools, with CMake your build type is defined at configuration. 776If you want to change your build type, you can re-run cmake with the following 777invocation: 778 779 .. code-block:: console 780 781 % cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=type SRC_ROOT 782 783Between runs, CMake preserves the values set for all options. CMake has the 784following build types defined: 785 786Debug 787 788 These builds are the default. The build system will compile the tools and 789 libraries unoptimized, with debugging information, and asserts enabled. 790 791Release 792 793 For these builds, the build system will compile the tools and libraries 794 with optimizations enabled and not generate debug info. CMakes default 795 optimization level is -O3. This can be configured by setting the 796 ``CMAKE_CXX_FLAGS_RELEASE`` variable on the CMake command line. 797 798RelWithDebInfo 799 800 These builds are useful when debugging. They generate optimized binaries with 801 debug information. CMakes default optimization level is -O2. This can be 802 configured by setting the ``CMAKE_CXX_FLAGS_RELWITHDEBINFO`` variable on the 803 CMake command line. 804 805Once you have LLVM configured, you can build it by entering the *OBJ_ROOT* 806directory and issuing the following command: 807 808.. code-block:: console 809 810 % make 811 812If the build fails, please `check here`_ to see if you are using a version of 813GCC that is known not to compile LLVM. 814 815If you have multiple processors in your machine, you may wish to use some of the 816parallel build options provided by GNU Make. For example, you could use the 817command: 818 819.. code-block:: console 820 821 % make -j2 822 823There are several special targets which are useful when working with the LLVM 824source code: 825 826``make clean`` 827 828 Removes all files generated by the build. This includes object files, 829 generated C/C++ files, libraries, and executables. 830 831``make install`` 832 833 Installs LLVM header files, libraries, tools, and documentation in a hierarchy 834 under ``$PREFIX``, specified with ``CMAKE_INSTALL_PREFIX``, which 835 defaults to ``/usr/local``. 836 837``make docs-llvm-html`` 838 839 If configured with ``-DLLVM_ENABLE_SPHINX=On``, this will generate a directory 840 at ``OBJ_ROOT/docs/html`` which contains the HTML formatted documentation. 841 842Cross-Compiling LLVM 843-------------------- 844 845It is possible to cross-compile LLVM itself. That is, you can create LLVM 846executables and libraries to be hosted on a platform different from the platform 847where they are built (a Canadian Cross build). To generate build files for 848cross-compiling CMake provides a variable ``CMAKE_TOOLCHAIN_FILE`` which can 849define compiler flags and variables used during the CMake test operations. 850 851The result of such a build is executables that are not runnable on on the build 852host but can be executed on the target. As an example the following CMake 853invocation can generate build files targeting iOS. This will work on Mac OS X 854with the latest Xcode: 855 856.. code-block:: console 857 858 % cmake -G "Ninja" -DCMAKE_OSX_ARCHITECTURES="armv7;armv7s;arm64" 859 -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake 860 -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off 861 -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off [options] 862 <PATH_TO_LLVM> 863 864Note: There are some additional flags that need to be passed when building for 865iOS due to limitations in the iOS SDK. 866 867Check :doc:`HowToCrossCompileLLVM` and `Clang docs on how to cross-compile in general 868<http://clang.llvm.org/docs/CrossCompilation.html>`_ for more information 869about cross-compiling. 870 871The Location of LLVM Object Files 872--------------------------------- 873 874The LLVM build system is capable of sharing a single LLVM source tree among 875several LLVM builds. Hence, it is possible to build LLVM for several different 876platforms or configurations using the same source tree. 877 878* Change directory to where the LLVM object files should live: 879 880 .. code-block:: console 881 882 % cd OBJ_ROOT 883 884* Run ``cmake``: 885 886 .. code-block:: console 887 888 % cmake -G "Unix Makefiles" SRC_ROOT 889 890The LLVM build will create a structure underneath *OBJ_ROOT* that matches the 891LLVM source tree. At each level where source files are present in the source 892tree there will be a corresponding ``CMakeFiles`` directory in the *OBJ_ROOT*. 893Underneath that directory there is another directory with a name ending in 894``.dir`` under which you'll find object files for each source. 895 896For example: 897 898 .. code-block:: console 899 900 % cd llvm_build_dir 901 % find lib/Support/ -name APFloat* 902 lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o 903 904Optional Configuration Items 905---------------------------- 906 907If you're running on a Linux system that supports the `binfmt_misc 908<http://en.wikipedia.org/wiki/binfmt_misc>`_ 909module, and you have root access on the system, you can set your system up to 910execute LLVM bitcode files directly. To do this, use commands like this (the 911first command may not be required if you are already using the module): 912 913.. code-block:: console 914 915 % mount -t binfmt_misc none /proc/sys/fs/binfmt_misc 916 % echo ':llvm:M::BC::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register 917 % chmod u+x hello.bc (if needed) 918 % ./hello.bc 919 920This allows you to execute LLVM bitcode files directly. On Debian, you can also 921use this command instead of the 'echo' command above: 922 923.. code-block:: console 924 925 % sudo update-binfmts --install llvm /path/to/lli --magic 'BC' 926 927.. _Program Layout: 928.. _general layout: 929 930Directory Layout 931================ 932 933One useful source of information about the LLVM source base is the LLVM `doxygen 934<http://www.doxygen.org/>`_ documentation available at 935`<http://llvm.org/doxygen/>`_. The following is a brief introduction to code 936layout: 937 938``llvm/examples`` 939----------------- 940 941Simple examples using the LLVM IR and JIT. 942 943``llvm/include`` 944---------------- 945 946Public header files exported from the LLVM library. The three main subdirectories: 947 948``llvm/include/llvm`` 949 950 All LLVM-specific header files, and subdirectories for different portions of 951 LLVM: ``Analysis``, ``CodeGen``, ``Target``, ``Transforms``, etc... 952 953``llvm/include/llvm/Support`` 954 955 Generic support libraries provided with LLVM but not necessarily specific to 956 LLVM. For example, some C++ STL utilities and a Command Line option processing 957 library store header files here. 958 959``llvm/include/llvm/Config`` 960 961 Header files configured by the ``configure`` script. 962 They wrap "standard" UNIX and C header files. Source code can include these 963 header files which automatically take care of the conditional #includes that 964 the ``configure`` script generates. 965 966``llvm/lib`` 967------------ 968 969Most source files are here. By putting code in libraries, LLVM makes it easy to 970share code among the `tools`_. 971 972``llvm/lib/IR/`` 973 974 Core LLVM source files that implement core classes like Instruction and 975 BasicBlock. 976 977``llvm/lib/AsmParser/`` 978 979 Source code for the LLVM assembly language parser library. 980 981``llvm/lib/Bitcode/`` 982 983 Code for reading and writing bitcode. 984 985``llvm/lib/Analysis/`` 986 987 A variety of program analyses, such as Call Graphs, Induction Variables, 988 Natural Loop Identification, etc. 989 990``llvm/lib/Transforms/`` 991 992 IR-to-IR program transformations, such as Aggressive Dead Code Elimination, 993 Sparse Conditional Constant Propagation, Inlining, Loop Invariant Code Motion, 994 Dead Global Elimination, and many others. 995 996``llvm/lib/Target/`` 997 998 Files describing target architectures for code generation. For example, 999 ``llvm/lib/Target/X86`` holds the X86 machine description. 1000 1001``llvm/lib/CodeGen/`` 1002 1003 The major parts of the code generator: Instruction Selector, Instruction 1004 Scheduling, and Register Allocation. 1005 1006``llvm/lib/MC/`` 1007 1008 (FIXME: T.B.D.) ....? 1009 1010``llvm/lib/ExecutionEngine/`` 1011 1012 Libraries for directly executing bitcode at runtime in interpreted and 1013 JIT-compiled scenarios. 1014 1015``llvm/lib/Support/`` 1016 1017 Source code that corresponding to the header files in ``llvm/include/ADT/`` 1018 and ``llvm/include/Support/``. 1019 1020``llvm/projects`` 1021----------------- 1022 1023Projects not strictly part of LLVM but shipped with LLVM. This is also the 1024directory for creating your own LLVM-based projects which leverage the LLVM 1025build system. 1026 1027``llvm/test`` 1028------------- 1029 1030Feature and regression tests and other sanity checks on LLVM infrastructure. These 1031are intended to run quickly and cover a lot of territory without being exhaustive. 1032 1033``test-suite`` 1034-------------- 1035 1036A comprehensive correctness, performance, and benchmarking test suite for LLVM. 1037Comes in a separate Subversion module because not every LLVM user is interested 1038in such a comprehensive suite. For details see the :doc:`Testing Guide 1039<TestingGuide>` document. 1040 1041.. _tools: 1042 1043``llvm/tools`` 1044-------------- 1045 1046Executables built out of the libraries 1047above, which form the main part of the user interface. You can always get help 1048for a tool by typing ``tool_name -help``. The following is a brief introduction 1049to the most important tools. More detailed information is in 1050the `Command Guide <CommandGuide/index.html>`_. 1051 1052``bugpoint`` 1053 1054 ``bugpoint`` is used to debug optimization passes or code generation backends 1055 by narrowing down the given test case to the minimum number of passes and/or 1056 instructions that still cause a problem, whether it is a crash or 1057 miscompilation. See `<HowToSubmitABug.html>`_ for more information on using 1058 ``bugpoint``. 1059 1060``llvm-ar`` 1061 1062 The archiver produces an archive containing the given LLVM bitcode files, 1063 optionally with an index for faster lookup. 1064 1065``llvm-as`` 1066 1067 The assembler transforms the human readable LLVM assembly to LLVM bitcode. 1068 1069``llvm-dis`` 1070 1071 The disassembler transforms the LLVM bitcode to human readable LLVM assembly. 1072 1073``llvm-link`` 1074 1075 ``llvm-link``, not surprisingly, links multiple LLVM modules into a single 1076 program. 1077 1078``lli`` 1079 1080 ``lli`` is the LLVM interpreter, which can directly execute LLVM bitcode 1081 (although very slowly...). For architectures that support it (currently x86, 1082 Sparc, and PowerPC), by default, ``lli`` will function as a Just-In-Time 1083 compiler (if the functionality was compiled in), and will execute the code 1084 *much* faster than the interpreter. 1085 1086``llc`` 1087 1088 ``llc`` is the LLVM backend compiler, which translates LLVM bitcode to a 1089 native code assembly file or to C code (with the ``-march=c`` option). 1090 1091``opt`` 1092 1093 ``opt`` reads LLVM bitcode, applies a series of LLVM to LLVM transformations 1094 (which are specified on the command line), and outputs the resultant 1095 bitcode. '``opt -help``' is a good way to get a list of the 1096 program transformations available in LLVM. 1097 1098 ``opt`` can also run a specific analysis on an input LLVM bitcode 1099 file and print the results. Primarily useful for debugging 1100 analyses, or familiarizing yourself with what an analysis does. 1101 1102``llvm/utils`` 1103-------------- 1104 1105Utilities for working with LLVM source code; some are part of the build process 1106because they are code generators for parts of the infrastructure. 1107 1108 1109``codegen-diff`` 1110 1111 ``codegen-diff`` finds differences between code that LLC 1112 generates and code that LLI generates. This is useful if you are 1113 debugging one of them, assuming that the other generates correct output. For 1114 the full user manual, run ```perldoc codegen-diff'``. 1115 1116``emacs/`` 1117 1118 Emacs and XEmacs syntax highlighting for LLVM assembly files and TableGen 1119 description files. See the ``README`` for information on using them. 1120 1121``getsrcs.sh`` 1122 1123 Finds and outputs all non-generated source files, 1124 useful if one wishes to do a lot of development across directories 1125 and does not want to find each file. One way to use it is to run, 1126 for example: ``xemacs `utils/getsources.sh``` from the top of the LLVM source 1127 tree. 1128 1129``llvmgrep`` 1130 1131 Performs an ``egrep -H -n`` on each source file in LLVM and 1132 passes to it a regular expression provided on ``llvmgrep``'s command 1133 line. This is an efficient way of searching the source base for a 1134 particular regular expression. 1135 1136``makellvm`` 1137 1138 Compiles all files in the current directory, then 1139 compiles and links the tool that is the first argument. For example, assuming 1140 you are in ``llvm/lib/Target/Sparc``, if ``makellvm`` is in your 1141 path, running ``makellvm llc`` will make a build of the current 1142 directory, switch to directory ``llvm/tools/llc`` and build it, causing a 1143 re-linking of LLC. 1144 1145``TableGen/`` 1146 1147 Contains the tool used to generate register 1148 descriptions, instruction set descriptions, and even assemblers from common 1149 TableGen description files. 1150 1151``vim/`` 1152 1153 vim syntax-highlighting for LLVM assembly files 1154 and TableGen description files. See the ``README`` for how to use them. 1155 1156.. _simple example: 1157 1158An Example Using the LLVM Tool Chain 1159==================================== 1160 1161This section gives an example of using LLVM with the Clang front end. 1162 1163Example with clang 1164------------------ 1165 1166#. First, create a simple C file, name it 'hello.c': 1167 1168 .. code-block:: c 1169 1170 #include <stdio.h> 1171 1172 int main() { 1173 printf("hello world\n"); 1174 return 0; 1175 } 1176 1177#. Next, compile the C file into a native executable: 1178 1179 .. code-block:: console 1180 1181 % clang hello.c -o hello 1182 1183 .. note:: 1184 1185 Clang works just like GCC by default. The standard -S and -c arguments 1186 work as usual (producing a native .s or .o file, respectively). 1187 1188#. Next, compile the C file into an LLVM bitcode file: 1189 1190 .. code-block:: console 1191 1192 % clang -O3 -emit-llvm hello.c -c -o hello.bc 1193 1194 The -emit-llvm option can be used with the -S or -c options to emit an LLVM 1195 ``.ll`` or ``.bc`` file (respectively) for the code. This allows you to use 1196 the `standard LLVM tools <CommandGuide/index.html>`_ on the bitcode file. 1197 1198#. Run the program in both forms. To run the program, use: 1199 1200 .. code-block:: console 1201 1202 % ./hello 1203 1204 and 1205 1206 .. code-block:: console 1207 1208 % lli hello.bc 1209 1210 The second examples shows how to invoke the LLVM JIT, :doc:`lli 1211 <CommandGuide/lli>`. 1212 1213#. Use the ``llvm-dis`` utility to take a look at the LLVM assembly code: 1214 1215 .. code-block:: console 1216 1217 % llvm-dis < hello.bc | less 1218 1219#. Compile the program to native assembly using the LLC code generator: 1220 1221 .. code-block:: console 1222 1223 % llc hello.bc -o hello.s 1224 1225#. Assemble the native assembly language file into a program: 1226 1227 .. code-block:: console 1228 1229 % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native # On Solaris 1230 1231 % gcc hello.s -o hello.native # On others 1232 1233#. Execute the native code program: 1234 1235 .. code-block:: console 1236 1237 % ./hello.native 1238 1239 Note that using clang to compile directly to native code (i.e. when the 1240 ``-emit-llvm`` option is not present) does steps 6/7/8 for you. 1241 1242Common Problems 1243=============== 1244 1245If you are having problems building or using LLVM, or if you have any other 1246general questions about LLVM, please consult the `Frequently Asked 1247Questions <FAQ.html>`_ page. 1248 1249.. _links: 1250 1251Links 1252===== 1253 1254This document is just an **introduction** on how to use LLVM to do some simple 1255things... there are many more interesting and complicated things that you can do 1256that aren't documented here (but we'll gladly accept a patch if you want to 1257write something up!). For more information about LLVM, check out: 1258 1259* `LLVM Homepage <http://llvm.org/>`_ 1260* `LLVM Doxygen Tree <http://llvm.org/doxygen/>`_ 1261* `Starting a Project that Uses LLVM <http://llvm.org/docs/Projects.html>`_ 1262