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