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