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 ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2 330 % tar -xvjf gcc-4.8.2.tar.bz2 331 % cd gcc-4.8.2 332 % ./contrib/download_prerequisites 333 % cd .. 334 % mkdir gcc-4.8.2-build 335 % cd gcc-4.8.2-build 336 % $PWD/../gcc-4.8.2/configure --prefix=$HOME/toolchains --enable-languages=c,c++ 337 % make -j$(nproc) 338 % make install 339 340For more details, check out the excellent `GCC wiki entry`_, where I got most 341of this information from. 342 343.. _GCC wiki entry: 344 http://gcc.gnu.org/wiki/InstallingGCC 345 346Once you have a GCC toolchain, configure your build of LLVM to use the new 347toolchain for your host compiler and C++ standard library. Because the new 348version of libstdc++ is not on the system library search path, you need to pass 349extra linker flags so that it can be found at link time (``-L``) and at runtime 350(``-rpath``). If you are using CMake, this invocation should produce working 351binaries: 352 353.. code-block:: console 354 355 % mkdir build 356 % cd build 357 % CC=$HOME/toolchains/bin/gcc CXX=$HOME/toolchains/bin/g++ \ 358 cmake .. -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$HOME/toolchains/lib64 -L$HOME/toolchains/lib64" 359 360If you fail to set rpath, most LLVM binaries will fail on startup with a message 361from the loader similar to ``libstdc++.so.6: version `GLIBCXX_3.4.20' not 362found``. This means you need to tweak the -rpath linker flag. 363 364When you build Clang, you will need to give *it* access to modern C++11 365standard library in order to use it as your new host in part of a bootstrap. 366There are two easy ways to do this, either build (and install) libc++ along 367with Clang and then use it with the ``-stdlib=libc++`` compile and link flag, 368or install Clang into the same prefix (``$HOME/toolchains`` above) as GCC. 369Clang will look within its own prefix for libstdc++ and use it if found. You 370can also add an explicit prefix for Clang to look in for a GCC toolchain with 371the ``--gcc-toolchain=/opt/my/gcc/prefix`` flag, passing it to both compile and 372link commands when using your just-built-Clang to bootstrap. 373 374.. _Getting Started with LLVM: 375 376Getting Started with LLVM 377========================= 378 379The remainder of this guide is meant to get you up and running with LLVM and to 380give you some basic information about the LLVM environment. 381 382The later sections of this guide describe the `general layout`_ of the LLVM 383source tree, a `simple example`_ using the LLVM tool chain, and `links`_ to find 384more information about LLVM or to get help via e-mail. 385 386Terminology and Notation 387------------------------ 388 389Throughout this manual, the following names are used to denote paths specific to 390the local system and working environment. *These are not environment variables 391you need to set but just strings used in the rest of this document below*. In 392any of the examples below, simply replace each of these names with the 393appropriate pathname on your local system. All these paths are absolute: 394 395``SRC_ROOT`` 396 397 This is the top level directory of the LLVM source tree. 398 399``OBJ_ROOT`` 400 401 This is the top level directory of the LLVM object tree (i.e. the tree where 402 object files and compiled programs will be placed. It can be the same as 403 SRC_ROOT). 404 405.. _Setting Up Your Environment: 406 407Setting Up Your Environment 408--------------------------- 409 410In order to compile and use LLVM, you may need to set some environment 411variables. 412 413``LLVM_LIB_SEARCH_PATH=/path/to/your/bitcode/libs`` 414 415 [Optional] This environment variable helps LLVM linking tools find the 416 locations of your bitcode libraries. It is provided only as a convenience 417 since you can specify the paths using the -L options of the tools and the 418 C/C++ front-end will automatically use the bitcode files installed in its 419 ``lib`` directory. 420 421Unpacking the LLVM Archives 422--------------------------- 423 424If you have the LLVM distribution, you will need to unpack it before you can 425begin to compile it. LLVM is distributed as a set of two files: the LLVM suite 426and the LLVM GCC front end compiled for your platform. There is an additional 427test suite that is optional. Each file is a TAR archive that is compressed with 428the gzip program. 429 430The files are as follows, with *x.y* marking the version number: 431 432``llvm-x.y.tar.gz`` 433 434 Source release for the LLVM libraries and tools. 435 436``llvm-test-x.y.tar.gz`` 437 438 Source release for the LLVM test-suite. 439 440.. _checkout: 441 442Checkout LLVM from Subversion 443----------------------------- 444 445If you have access to our Subversion repository, you can get a fresh copy of the 446entire source code. All you need to do is check it out from Subversion as 447follows: 448 449* ``cd where-you-want-llvm-to-live`` 450* Read-Only: ``svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm`` 451* Read-Write: ``svn co https://user@llvm.org/svn/llvm-project/llvm/trunk llvm`` 452 453This will create an '``llvm``' directory in the current directory and fully 454populate it with the LLVM source code, Makefiles, test directories, and local 455copies of documentation files. 456 457If you want to get a specific release (as opposed to the most recent revision), 458you can checkout it from the '``tags``' directory (instead of '``trunk``'). The 459following releases are located in the following subdirectories of the '``tags``' 460directory: 461 462* Release 3.4: **RELEASE_34/final** 463* Release 3.3: **RELEASE_33/final** 464* Release 3.2: **RELEASE_32/final** 465* Release 3.1: **RELEASE_31/final** 466* Release 3.0: **RELEASE_30/final** 467* Release 2.9: **RELEASE_29/final** 468* Release 2.8: **RELEASE_28** 469* Release 2.7: **RELEASE_27** 470* Release 2.6: **RELEASE_26** 471* Release 2.5: **RELEASE_25** 472* Release 2.4: **RELEASE_24** 473* Release 2.3: **RELEASE_23** 474* Release 2.2: **RELEASE_22** 475* Release 2.1: **RELEASE_21** 476* Release 2.0: **RELEASE_20** 477* Release 1.9: **RELEASE_19** 478* Release 1.8: **RELEASE_18** 479* Release 1.7: **RELEASE_17** 480* Release 1.6: **RELEASE_16** 481* Release 1.5: **RELEASE_15** 482* Release 1.4: **RELEASE_14** 483* Release 1.3: **RELEASE_13** 484* Release 1.2: **RELEASE_12** 485* Release 1.1: **RELEASE_11** 486* Release 1.0: **RELEASE_1** 487 488If you would like to get the LLVM test suite (a separate package as of 1.4), you 489get it from the Subversion repository: 490 491.. code-block:: console 492 493 % cd llvm/projects 494 % svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite 495 496By placing it in the ``llvm/projects``, it will be automatically configured by 497the LLVM configure script as well as automatically updated when you run ``svn 498update``. 499 500Git Mirror 501---------- 502 503Git mirrors are available for a number of LLVM subprojects. These mirrors sync 504automatically with each Subversion commit and contain all necessary git-svn 505marks (so, you can recreate git-svn metadata locally). Note that right now 506mirrors reflect only ``trunk`` for each project. You can do the read-only Git 507clone of LLVM via: 508 509.. code-block:: console 510 511 % git clone http://llvm.org/git/llvm.git 512 513If you want to check out clang too, run: 514 515.. code-block:: console 516 517 % cd llvm/tools 518 % git clone http://llvm.org/git/clang.git 519 520If you want to check out compiler-rt too, run: 521 522.. code-block:: console 523 524 % cd llvm/projects 525 % git clone http://llvm.org/git/compiler-rt.git 526 527If you want to check out the Test Suite Source Code (optional), run: 528 529.. code-block:: console 530 531 % cd llvm/projects 532 % git clone http://llvm.org/git/test-suite.git 533 534Since the upstream repository is in Subversion, you should use ``git 535pull --rebase`` instead of ``git pull`` to avoid generating a non-linear history 536in your clone. To configure ``git pull`` to pass ``--rebase`` by default on the 537master branch, run the following command: 538 539.. code-block:: console 540 541 % git config branch.master.rebase true 542 543Sending patches with Git 544^^^^^^^^^^^^^^^^^^^^^^^^ 545 546Please read `Developer Policy <DeveloperPolicy.html#one-off-patches>`_, too. 547 548Assume ``master`` points the upstream and ``mybranch`` points your working 549branch, and ``mybranch`` is rebased onto ``master``. At first you may check 550sanity of whitespaces: 551 552.. code-block:: console 553 554 % git diff --check master..mybranch 555 556The easiest way to generate a patch is as below: 557 558.. code-block:: console 559 560 % git diff master..mybranch > /path/to/mybranch.diff 561 562It is a little different from svn-generated diff. git-diff-generated diff has 563prefixes like ``a/`` and ``b/``. Don't worry, most developers might know it 564could be accepted with ``patch -p1 -N``. 565 566But you may generate patchset with git-format-patch. It generates by-each-commit 567patchset. To generate patch files to attach to your article: 568 569.. code-block:: console 570 571 % git format-patch --no-attach master..mybranch -o /path/to/your/patchset 572 573If you would like to send patches directly, you may use git-send-email or 574git-imap-send. Here is an example to generate the patchset in Gmail's [Drafts]. 575 576.. code-block:: console 577 578 % git format-patch --attach master..mybranch --stdout | git imap-send 579 580Then, your .git/config should have [imap] sections. 581 582.. code-block:: ini 583 584 [imap] 585 host = imaps://imap.gmail.com 586 user = your.gmail.account@gmail.com 587 pass = himitsu! 588 port = 993 589 sslverify = false 590 ; in English 591 folder = "[Gmail]/Drafts" 592 ; example for Japanese, "Modified UTF-7" encoded. 593 folder = "[Gmail]/&Tgtm+DBN-" 594 ; example for Traditional Chinese 595 folder = "[Gmail]/&g0l6Pw-" 596 597For developers to work with git-svn 598^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 599 600To set up clone from which you can submit code using ``git-svn``, run: 601 602.. code-block:: console 603 604 % git clone http://llvm.org/git/llvm.git 605 % cd llvm 606 % git svn init https://llvm.org/svn/llvm-project/llvm/trunk --username=<username> 607 % git config svn-remote.svn.fetch :refs/remotes/origin/master 608 % git svn rebase -l # -l avoids fetching ahead of the git mirror. 609 610 # If you have clang too: 611 % cd tools 612 % git clone http://llvm.org/git/clang.git 613 % cd clang 614 % git svn init https://llvm.org/svn/llvm-project/cfe/trunk --username=<username> 615 % git config svn-remote.svn.fetch :refs/remotes/origin/master 616 % git svn rebase -l 617 618Likewise for compiler-rt and test-suite. 619 620To update this clone without generating git-svn tags that conflict with the 621upstream Git repo, run: 622 623.. code-block:: console 624 625 % git fetch && (cd tools/clang && git fetch) # Get matching revisions of both trees. 626 % git checkout master 627 % git svn rebase -l 628 % (cd tools/clang && 629 git checkout master && 630 git svn rebase -l) 631 632Likewise for compiler-rt and test-suite. 633 634This leaves your working directories on their master branches, so you'll need to 635``checkout`` each working branch individually and ``rebase`` it on top of its 636parent branch. 637 638For those who wish to be able to update an llvm repo/revert patches easily using 639git-svn, please look in the directory for the scripts ``git-svnup`` and 640``git-svnrevert``. 641 642To perform the aforementioned update steps go into your source directory and 643just type ``git-svnup`` or ``git svnup`` and everything will just work. 644 645If one wishes to revert a commit with git-svn, but do not want the git hash to 646escape into the commit message, one can use the script ``git-svnrevert`` or 647``git svnrevert`` which will take in the git hash for the commit you want to 648revert, look up the appropriate svn revision, and output a message where all 649references to the git hash have been replaced with the svn revision. 650 651To commit back changes via git-svn, use ``git svn dcommit``: 652 653.. code-block:: console 654 655 % git svn dcommit 656 657Note that git-svn will create one SVN commit for each Git commit you have pending, 658so squash and edit each commit before executing ``dcommit`` to make sure they all 659conform to the coding standards and the developers' policy. 660 661On success, ``dcommit`` will rebase against the HEAD of SVN, so to avoid conflict, 662please make sure your current branch is up-to-date (via fetch/rebase) before 663proceeding. 664 665The git-svn metadata can get out of sync after you mess around with branches and 666``dcommit``. When that happens, ``git svn dcommit`` stops working, complaining 667about files with uncommitted changes. The fix is to rebuild the metadata: 668 669.. code-block:: console 670 671 % rm -rf .git/svn 672 % git svn rebase -l 673 674Please, refer to the Git-SVN manual (``man git-svn``) for more information. 675 676Local LLVM Configuration 677------------------------ 678 679Once checked out from the Subversion repository, the LLVM suite source code must 680be configured before being built. For instructions using autotools please see 681`Building LLVM With Autotools <BuildingLLVMWithAutotools.html>`_. The 682recommended process uses CMake. Unlinke the normal ``configure`` script, CMake 683generates the build files in whatever format you request as well as various 684``*.inc`` files, and ``llvm/include/Config/config.h``. 685 686Variables are passed to ``cmake`` on the command line using the format 687``-D<variable name>=<value>``. The following variables are some common options 688used by people developing LLVM. 689 690+-------------------------+----------------------------------------------------+ 691| Variable | Purpose | 692+=========================+====================================================+ 693| CMAKE_C_COMPILER | Tells ``cmake`` which C compiler to use. By | 694| | default, this will be /usr/bin/cc. | 695+-------------------------+----------------------------------------------------+ 696| CMAKE_CXX_COMPILER | Tells ``cmake`` which C++ compiler to use. By | 697| | default, this will be /usr/bin/c++. | 698+-------------------------+----------------------------------------------------+ 699| CMAKE_BUILD_TYPE | Tells ``cmake`` what type of build you are trying | 700| | to generate files for. Valid options are Debug, | 701| | Release, RelWithDebInfo, and MinSizeRel. Default | 702| | is Debug. | 703+-------------------------+----------------------------------------------------+ 704| CMAKE_INSTALL_PREFIX | Specifies the install directory to target when | 705| | running the install action of the build files. | 706+-------------------------+----------------------------------------------------+ 707| LLVM_TARGETS_TO_BUILD | A semicolon delimited list controlling which | 708| | targets will be built and linked into llc. This is | 709| | equivalent to the ``--enable-targets`` option in | 710| | the configure script. The default list is defined | 711| | as ``LLVM_ALL_TARGETS``, and can be set to include | 712| | out-of-tree targets. The default value includes: | 713| | ``AArch64, ARM, CppBackend, Hexagon, | 714| | Mips, MSP430, NVPTX, PowerPC, R600, Sparc, | 715| | SystemZ, X86, XCore``. | 716+-------------------------+----------------------------------------------------+ 717| LLVM_ENABLE_DOXYGEN | Build doxygen-based documentation from the source | 718| | code This is disabled by default because it is | 719| | slow and generates a lot of output. | 720+-------------------------+----------------------------------------------------+ 721| LLVM_ENABLE_SPHINX | Build sphinx-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_BUILD_LLVM_DYLIB | Generate libLLVM.so. This library contains a | 726| | default set of LLVM components that can be | 727| | overridden with ``LLVM_DYLIB_COMPONENTS``. The | 728| | default contains most of LLVM and is defined in | 729| | ``tools/llvm-shlib/CMakelists.txt``. | 730+-------------------------+----------------------------------------------------+ 731| LLVM_OPTIMIZED_TABLEGEN | Builds a release tablegen that gets used during | 732| | the LLVM build. This can dramatically speed up | 733| | debug builds. | 734+-------------------------+----------------------------------------------------+ 735 736To configure LLVM, follow these steps: 737 738#. Change directory into the object root directory: 739 740 .. code-block:: console 741 742 % cd OBJ_ROOT 743 744#. Run the ``cmake``: 745 746 .. code-block:: console 747 748 % cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=prefix=/install/path 749 [other options] SRC_ROOT 750 751Compiling the LLVM Suite Source Code 752------------------------------------ 753 754Unlike with autotools, with CMake your build type is defined at configuration. 755If you want to change your build type, you can re-run cmake with the following 756invocation: 757 758 .. code-block:: console 759 760 % cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=type SRC_ROOT 761 762Between runs, CMake preserves the values set for all options. CMake has the 763following build types defined: 764 765Debug 766 767 These builds are the default. The build system will compile the tools and 768 libraries unoptimized, with debugging information, and asserts enabled. 769 770Release 771 772 For these builds, the build system will compile the tools and libraries 773 with optimizations enabled and not generate debug info. CMakes default 774 optimization level is -O3. This can be configured by setting the 775 ``CMAKE_CXX_FLAGS_RELEASE`` variable on the CMake command line. 776 777RelWithDebInfo 778 779 These builds are useful when debugging. They generate optimized binaries with 780 debug information. CMakes default optimization level is -O2. This can be 781 configured by setting the ``CMAKE_CXX_FLAGS_RELWITHDEBINFO`` variable on the 782 CMake command line. 783 784Once you have LLVM configured, you can build it by entering the *OBJ_ROOT* 785directory and issuing the following command: 786 787.. code-block:: console 788 789 % make 790 791If the build fails, please `check here`_ to see if you are using a version of 792GCC that is known not to compile LLVM. 793 794If you have multiple processors in your machine, you may wish to use some of the 795parallel build options provided by GNU Make. For example, you could use the 796command: 797 798.. code-block:: console 799 800 % make -j2 801 802There are several special targets which are useful when working with the LLVM 803source code: 804 805``make clean`` 806 807 Removes all files generated by the build. This includes object files, 808 generated C/C++ files, libraries, and executables. 809 810``make install`` 811 812 Installs LLVM header files, libraries, tools, and documentation in a hierarchy 813 under ``$PREFIX``, specified with ``CMAKE_INSTALL_PREFIX``, which 814 defaults to ``/usr/local``. 815 816``make docs-llvm-html`` 817 818 If configured with ``-DLLVM_ENABLE_SPHINX=On``, this will generate a directory 819 at ``OBJ_ROOT/docs/html`` which contains the HTML formatted documentation. 820 821Cross-Compiling LLVM 822-------------------- 823 824It is possible to cross-compile LLVM itself. That is, you can create LLVM 825executables and libraries to be hosted on a platform different from the platform 826where they are built (a Canadian Cross build). To generate build files for 827cross-compiling CMake provides a variable ``CMAKE_TOOLCHAIN_FILE`` which can 828define compiler flags and variables used during the CMake test operations. 829 830The result of such a build is executables that are not runnable on on the build 831host but can be executed on the target. As an example the following CMake 832invocation can generate build files targeting iOS. This will work on Mac OS X 833with the latest Xcode: 834 835.. code-block:: console 836 837 % cmake -G "Ninja" -DCMAKE_OSX_ARCHITECTURES=“armv7;armv7s;arm64" 838 -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake 839 -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off 840 -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off [options] 841 <PATH_TO_LLVM> 842 843Note: There are some additional flags that need to be passed when building for 844iOS due to limitations in the iOS SDK. 845 846Check :doc:`HowToCrossCompileLLVM` and `Clang docs on how to cross-compile in general 847<http://clang.llvm.org/docs/CrossCompilation.html>`_ for more information 848about cross-compiling. 849 850The Location of LLVM Object Files 851--------------------------------- 852 853The LLVM build system is capable of sharing a single LLVM source tree among 854several LLVM builds. Hence, it is possible to build LLVM for several different 855platforms or configurations using the same source tree. 856 857This is accomplished in the typical autoconf manner: 858 859* Change directory to where the LLVM object files should live: 860 861 .. code-block:: console 862 863 % cd OBJ_ROOT 864 865* Run ``cmake``: 866 867 .. code-block:: console 868 869 % cmake -G "Unix Makefiles" SRC_ROOT 870 871The LLVM build will create a structure underneath *OBJ_ROOT* that matches the 872LLVM source tree. At each level where source files are present in the source 873tree there will be a corresponding ``CMakeFiles`` directory in the *OBJ_ROOT*. 874Underneath that directory there is another directory with a name ending in 875``.dir`` under which you'll find object files for each source. 876 877For example: 878 879 .. code-block:: console 880 881 % cd llvm_build_dir 882 % find lib/Support/ -name APFloat* 883 lib/Support/CMakeFiles/LLVMSupport.dir/APFloat.cpp.o 884 885Optional Configuration Items 886---------------------------- 887 888If you're running on a Linux system that supports the `binfmt_misc 889<http://en.wikipedia.org/wiki/binfmt_misc>`_ 890module, and you have root access on the system, you can set your system up to 891execute LLVM bitcode files directly. To do this, use commands like this (the 892first command may not be required if you are already using the module): 893 894.. code-block:: console 895 896 % mount -t binfmt_misc none /proc/sys/fs/binfmt_misc 897 % echo ':llvm:M::BC::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register 898 % chmod u+x hello.bc (if needed) 899 % ./hello.bc 900 901This allows you to execute LLVM bitcode files directly. On Debian, you can also 902use this command instead of the 'echo' command above: 903 904.. code-block:: console 905 906 % sudo update-binfmts --install llvm /path/to/lli --magic 'BC' 907 908.. _Program Layout: 909.. _general layout: 910 911Program Layout 912============== 913 914One useful source of information about the LLVM source base is the LLVM `doxygen 915<http://www.doxygen.org/>`_ documentation available at 916`<http://llvm.org/doxygen/>`_. The following is a brief introduction to code 917layout: 918 919``llvm/examples`` 920----------------- 921 922This directory contains some simple examples of how to use the LLVM IR and JIT. 923 924``llvm/include`` 925---------------- 926 927This directory contains public header files exported from the LLVM library. The 928three main subdirectories of this directory are: 929 930``llvm/include/llvm`` 931 932 This directory contains all of the LLVM specific header files. This directory 933 also has subdirectories for different portions of LLVM: ``Analysis``, 934 ``CodeGen``, ``Target``, ``Transforms``, etc... 935 936``llvm/include/llvm/Support`` 937 938 This directory contains generic support libraries that are provided with LLVM 939 but not necessarily specific to LLVM. For example, some C++ STL utilities and 940 a Command Line option processing library store their header files here. 941 942``llvm/include/llvm/Config`` 943 944 This directory contains header files configured by the ``configure`` script. 945 They wrap "standard" UNIX and C header files. Source code can include these 946 header files which automatically take care of the conditional #includes that 947 the ``configure`` script generates. 948 949``llvm/lib`` 950------------ 951 952This directory contains most of the source files of the LLVM system. In LLVM, 953almost all code exists in libraries, making it very easy to share code among the 954different `tools`_. 955 956``llvm/lib/IR/`` 957 958 This directory holds the core LLVM source files that implement core classes 959 like Instruction and BasicBlock. 960 961``llvm/lib/AsmParser/`` 962 963 This directory holds the source code for the LLVM assembly language parser 964 library. 965 966``llvm/lib/Bitcode/`` 967 968 This directory holds code for reading and write LLVM bitcode. 969 970``llvm/lib/Analysis/`` 971 972 This directory contains a variety of different program analyses, such as 973 Dominator Information, Call Graphs, Induction Variables, Interval 974 Identification, Natural Loop Identification, etc. 975 976``llvm/lib/Transforms/`` 977 978 This directory contains the source code for the LLVM to LLVM program 979 transformations, such as Aggressive Dead Code Elimination, Sparse Conditional 980 Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global 981 Elimination, and many others. 982 983``llvm/lib/Target/`` 984 985 This directory contains files that describe various target architectures for 986 code generation. For example, the ``llvm/lib/Target/X86`` directory holds the 987 X86 machine description while ``llvm/lib/Target/ARM`` implements the ARM 988 backend. 989 990``llvm/lib/CodeGen/`` 991 992 This directory contains the major parts of the code generator: Instruction 993 Selector, Instruction Scheduling, and Register Allocation. 994 995``llvm/lib/MC/`` 996 997 (FIXME: T.B.D.) 998 999``llvm/lib/Debugger/`` 1000 1001 This directory contains the source level debugger library that makes it 1002 possible to instrument LLVM programs so that a debugger could identify source 1003 code locations at which the program is executing. 1004 1005``llvm/lib/ExecutionEngine/`` 1006 1007 This directory contains libraries for executing LLVM bitcode directly at 1008 runtime in both interpreted and JIT compiled fashions. 1009 1010``llvm/lib/Support/`` 1011 1012 This directory contains the source code that corresponds to the header files 1013 located in ``llvm/include/ADT/`` and ``llvm/include/Support/``. 1014 1015``llvm/projects`` 1016----------------- 1017 1018This directory contains projects that are not strictly part of LLVM but are 1019shipped with LLVM. This is also the directory where you should create your own 1020LLVM-based projects. 1021 1022``llvm/runtime`` 1023---------------- 1024 1025This directory contains libraries which are compiled into LLVM bitcode and used 1026when linking programs with the Clang front end. Most of these libraries are 1027skeleton versions of real libraries; for example, libc is a stripped down 1028version of glibc. 1029 1030Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front end 1031to compile. 1032 1033``llvm/test`` 1034------------- 1035 1036This directory contains feature and regression tests and other basic sanity 1037checks on the LLVM infrastructure. These are intended to run quickly and cover a 1038lot of territory without being exhaustive. 1039 1040``test-suite`` 1041-------------- 1042 1043This is not a directory in the normal llvm module; it is a separate Subversion 1044module that must be checked out (usually to ``projects/test-suite``). This 1045module contains a comprehensive correctness, performance, and benchmarking test 1046suite for LLVM. It is a separate Subversion module because not every LLVM user 1047is interested in downloading or building such a comprehensive test suite. For 1048further details on this test suite, please see the :doc:`Testing Guide 1049<TestingGuide>` document. 1050 1051.. _tools: 1052 1053``llvm/tools`` 1054-------------- 1055 1056The **tools** directory contains the executables built out of the libraries 1057above, which form the main part of the user interface. You can always get help 1058for a tool by typing ``tool_name -help``. The following is a brief introduction 1059to the most important tools. More detailed information is in 1060the `Command Guide <CommandGuide/index.html>`_. 1061 1062``bugpoint`` 1063 1064 ``bugpoint`` is used to debug optimization passes or code generation backends 1065 by narrowing down the given test case to the minimum number of passes and/or 1066 instructions that still cause a problem, whether it is a crash or 1067 miscompilation. See `<HowToSubmitABug.html>`_ for more information on using 1068 ``bugpoint``. 1069 1070``llvm-ar`` 1071 1072 The archiver produces an archive containing the given LLVM bitcode files, 1073 optionally with an index for faster lookup. 1074 1075``llvm-as`` 1076 1077 The assembler transforms the human readable LLVM assembly to LLVM bitcode. 1078 1079``llvm-dis`` 1080 1081 The disassembler transforms the LLVM bitcode to human readable LLVM assembly. 1082 1083``llvm-link`` 1084 1085 ``llvm-link``, not surprisingly, links multiple LLVM modules into a single 1086 program. 1087 1088``lli`` 1089 1090 ``lli`` is the LLVM interpreter, which can directly execute LLVM bitcode 1091 (although very slowly...). For architectures that support it (currently x86, 1092 Sparc, and PowerPC), by default, ``lli`` will function as a Just-In-Time 1093 compiler (if the functionality was compiled in), and will execute the code 1094 *much* faster than the interpreter. 1095 1096``llc`` 1097 1098 ``llc`` is the LLVM backend compiler, which translates LLVM bitcode to a 1099 native code assembly file or to C code (with the ``-march=c`` option). 1100 1101``opt`` 1102 1103 ``opt`` reads LLVM bitcode, applies a series of LLVM to LLVM transformations 1104 (which are specified on the command line), and then outputs the resultant 1105 bitcode. The '``opt -help``' command is a good way to get a list of the 1106 program transformations available in LLVM. 1107 1108 ``opt`` can also be used to run a specific analysis on an input LLVM bitcode 1109 file and print out the results. It is primarily useful for debugging 1110 analyses, or familiarizing yourself with what an analysis does. 1111 1112``llvm/utils`` 1113-------------- 1114 1115This directory contains utilities for working with LLVM source code, and some of 1116the utilities are actually required as part of the build process because they 1117are code generators for parts of LLVM infrastructure. 1118 1119 1120``codegen-diff`` 1121 1122 ``codegen-diff`` is a script that finds differences between code that LLC 1123 generates and code that LLI generates. This is a useful tool if you are 1124 debugging one of them, assuming that the other generates correct output. For 1125 the full user manual, run ```perldoc codegen-diff'``. 1126 1127``emacs/`` 1128 1129 The ``emacs`` directory contains syntax-highlighting files which will work 1130 with Emacs and XEmacs editors, providing syntax highlighting support for LLVM 1131 assembly files and TableGen description files. For information on how to use 1132 the syntax files, consult the ``README`` file in that directory. 1133 1134``getsrcs.sh`` 1135 1136 The ``getsrcs.sh`` script finds and outputs all non-generated source files, 1137 which is useful if one wishes to do a lot of development across directories 1138 and does not want to individually find each file. One way to use it is to run, 1139 for example: ``xemacs `utils/getsources.sh``` from the top of your LLVM source 1140 tree. 1141 1142``llvmgrep`` 1143 1144 This little tool performs an ``egrep -H -n`` on each source file in LLVM and 1145 passes to it a regular expression provided on ``llvmgrep``'s command 1146 line. This is a very efficient way of searching the source base for a 1147 particular regular expression. 1148 1149``makellvm`` 1150 1151 The ``makellvm`` script compiles all files in the current directory and then 1152 compiles and links the tool that is the first argument. For example, assuming 1153 you are in the directory ``llvm/lib/Target/Sparc``, if ``makellvm`` is in your 1154 path, simply running ``makellvm llc`` will make a build of the current 1155 directory, switch to directory ``llvm/tools/llc`` and build it, causing a 1156 re-linking of LLC. 1157 1158``TableGen/`` 1159 1160 The ``TableGen`` directory contains the tool used to generate register 1161 descriptions, instruction set descriptions, and even assemblers from common 1162 TableGen description files. 1163 1164``vim/`` 1165 1166 The ``vim`` directory contains syntax-highlighting files which will work with 1167 the VIM editor, providing syntax highlighting support for LLVM assembly files 1168 and TableGen description files. For information on how to use the syntax 1169 files, consult the ``README`` file in that directory. 1170 1171.. _simple example: 1172 1173An Example Using the LLVM Tool Chain 1174==================================== 1175 1176This section gives an example of using LLVM with the Clang front end. 1177 1178Example with clang 1179------------------ 1180 1181#. First, create a simple C file, name it 'hello.c': 1182 1183 .. code-block:: c 1184 1185 #include <stdio.h> 1186 1187 int main() { 1188 printf("hello world\n"); 1189 return 0; 1190 } 1191 1192#. Next, compile the C file into a native executable: 1193 1194 .. code-block:: console 1195 1196 % clang hello.c -o hello 1197 1198 .. note:: 1199 1200 Clang works just like GCC by default. The standard -S and -c arguments 1201 work as usual (producing a native .s or .o file, respectively). 1202 1203#. Next, compile the C file into an LLVM bitcode file: 1204 1205 .. code-block:: console 1206 1207 % clang -O3 -emit-llvm hello.c -c -o hello.bc 1208 1209 The -emit-llvm option can be used with the -S or -c options to emit an LLVM 1210 ``.ll`` or ``.bc`` file (respectively) for the code. This allows you to use 1211 the `standard LLVM tools <CommandGuide/index.html>`_ on the bitcode file. 1212 1213#. Run the program in both forms. To run the program, use: 1214 1215 .. code-block:: console 1216 1217 % ./hello 1218 1219 and 1220 1221 .. code-block:: console 1222 1223 % lli hello.bc 1224 1225 The second examples shows how to invoke the LLVM JIT, :doc:`lli 1226 <CommandGuide/lli>`. 1227 1228#. Use the ``llvm-dis`` utility to take a look at the LLVM assembly code: 1229 1230 .. code-block:: console 1231 1232 % llvm-dis < hello.bc | less 1233 1234#. Compile the program to native assembly using the LLC code generator: 1235 1236 .. code-block:: console 1237 1238 % llc hello.bc -o hello.s 1239 1240#. Assemble the native assembly language file into a program: 1241 1242 .. code-block:: console 1243 1244 % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native # On Solaris 1245 1246 % gcc hello.s -o hello.native # On others 1247 1248#. Execute the native code program: 1249 1250 .. code-block:: console 1251 1252 % ./hello.native 1253 1254 Note that using clang to compile directly to native code (i.e. when the 1255 ``-emit-llvm`` option is not present) does steps 6/7/8 for you. 1256 1257Common Problems 1258=============== 1259 1260If you are having problems building or using LLVM, or if you have any other 1261general questions about LLVM, please consult the `Frequently Asked 1262Questions <FAQ.html>`_ page. 1263 1264.. _links: 1265 1266Links 1267===== 1268 1269This document is just an **introduction** on how to use LLVM to do some simple 1270things... there are many more interesting and complicated things that you can do 1271that aren't documented here (but we'll gladly accept a patch if you want to 1272write something up!). For more information about LLVM, check out: 1273 1274* `LLVM Homepage <http://llvm.org/>`_ 1275* `LLVM Doxygen Tree <http://llvm.org/doxygen/>`_ 1276* `Starting a Project that Uses LLVM <http://llvm.org/docs/Projects.html>`_ 1277