* ``make check-all`` --- This run the regression tests to ensure everything
is in working order.
- * ``make update`` --- This command is used to update all the svn repositories
- at once, rather then having to ``cd`` into the individual repositories and
- running ``svn update``.
-
* It is also possible to use CMake instead of the makefiles. With CMake it is
possible to generate project files for several IDEs: Xcode, Eclipse CDT4,
CodeBlocks, Qt-Creator (use the CodeBlocks generator), KDevelop3.
Hardware
--------
-LLVM is known to work on the following platforms:
-
-+-----------------+----------------------+-------------------------+
-|OS | Arch | Compilers |
-+=================+======================+=========================+
-|AuroraUX | x86\ :sup:`1` | GCC |
-+-----------------+----------------------+-------------------------+
-|Linux | x86\ :sup:`1` | GCC |
-+-----------------+----------------------+-------------------------+
-|Linux | amd64 | GCC |
-+-----------------+----------------------+-------------------------+
-|Linux | ARM\ :sup:`13` | GCC |
-+-----------------+----------------------+-------------------------+
-|Solaris | V9 (Ultrasparc) | GCC |
-+-----------------+----------------------+-------------------------+
-|FreeBSD | x86\ :sup:`1` | GCC |
-+-----------------+----------------------+-------------------------+
-|FreeBSD | amd64 | GCC |
-+-----------------+----------------------+-------------------------+
-|MacOS X\ :sup:`2`| PowerPC | GCC |
-+-----------------+----------------------+-------------------------+
-|MacOS X\ :sup:`9`| x86 | GCC |
-+-----------------+----------------------+-------------------------+
-|Cygwin/Win32 | x86\ :sup:`1, 8, 11` | GCC 3.4.X, binutils 2.20|
-+-----------------+----------------------+-------------------------+
-
-LLVM has partial support for the following platforms:
-
-+-------------------+----------------------+-------------------------------------------+
-|OS | Arch | Compilers |
-+===================+======================+===========================================+
-| Windows | x86\ :sup:`1` | Visual Studio 2000 or higher\ :sup:`4,5` |
-+-------------------+----------------------+-------------------------------------------+
-| AIX\ :sup:`3,4` | PowerPC | GCC |
-+-------------------+----------------------+-------------------------------------------+
-| Linux\ :sup:`3,5` | PowerPC | GCC |
-+-------------------+----------------------+-------------------------------------------+
-| Linux\ :sup:`7` | Alpha | GCC |
-+-------------------+----------------------+-------------------------------------------+
-| Linux\ :sup:`7` | Itanium (IA-64) | GCC |
-+-------------------+----------------------+-------------------------------------------+
-| HP-UX\ :sup:`7` | Itanium (IA-64) | HP aCC |
-+-------------------+----------------------+-------------------------------------------+
-| Windows x64 | x86-64 | mingw-w64's GCC-4.5.x\ :sup:`12` |
-+-------------------+----------------------+-------------------------------------------+
+LLVM is known to work on the following host platforms:
+
+================== ===================== =============
+OS Arch Compilers
+================== ===================== =============
+AuroraUX x86\ :sup:`1` GCC
+Linux x86\ :sup:`1` GCC, Clang
+Linux amd64 GCC, Clang
+Linux ARM\ :sup:`4` GCC, Clang
+Linux PowerPC GCC, Clang
+Solaris V9 (Ultrasparc) GCC
+FreeBSD x86\ :sup:`1` GCC, Clang
+FreeBSD amd64 GCC, Clang
+MacOS X\ :sup:`2` PowerPC GCC
+MacOS X x86 GCC, Clang
+Cygwin/Win32 x86\ :sup:`1, 3` GCC
+Windows x86\ :sup:`1` Visual Studio
+Windows x64 x86-64 Visual Studio
+================== ===================== =============
.. note::
#. Code generation supported for Pentium processors and up
#. Code generation supported for 32-bit ABI only
- #. No native code generation
- #. Build is not complete: one or more tools do not link or function
- #. The GCC-based C/C++ frontend does not build
- #. The port is done using the MSYS shell.
- #. Native code generation exists but is not complete.
- #. Binutils 2.20 or later is required to build the assembler generated by LLVM properly.
- #. Xcode 2.5 and gcc 4.0.1 (Apple Build 5370) will trip internal LLVM assert
- messages when compiled for Release at optimization levels greater than 0
- (i.e., ``-O1`` and higher). Add ``OPTIMIZE_OPTION="-O0"`` to the build
- command line if compiling for LLVM Release or bootstrapping the LLVM
- toolchain.
- #. For MSYS/MinGW on Windows, be sure to install the MSYS version of the perl
- package, and be sure it appears in your path before any Windows-based
- versions such as Strawberry Perl and ActivePerl, as these have
- Windows-specifics that will cause the build to fail.
#. To use LLVM modules on Win32-based system, you may configure LLVM
with ``--enable-shared``.
- #. To compile SPU backend, you need to add ``LDFLAGS=-Wl,--stack,16777216`` to
- configure.
#. MCJIT not working well pre-v7, old JIT engine not supported any more.
Note that you will need about 1-3 GB of space for a full LLVM build in Debug
"known to work" versions of the package. The Notes column describes how LLVM
uses the package and provides other details.
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| Package | Version | Notes |
-+==============================================================+=================+=============================================+
-| `GNU Make <http://savannah.gnu.org/projects/make>`_ | 3.79, 3.79.1 | Makefile/build processor |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `GCC <http://gcc.gnu.org/>`_ | 3.4.2 | C/C++ compiler\ :sup:`1` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `TeXinfo <http://www.gnu.org/software/texinfo/>`_ | 4.5 | For building the CFE |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `SVN <http://subversion.tigris.org/project_packages.html>`_ | >=1.3 | Subversion access to LLVM\ :sup:`2` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `python <http://www.python.org/>`_ | >=2.4 | Automated test suite\ :sup:`3` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `perl <http://www.perl.com/download.csp>`_ | >=5.6.0 | Utilities |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `GNU M4 <http://savannah.gnu.org/projects/m4>`_ | 1.4 | Macro processor for configuration\ :sup:`4` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `GNU Autoconf <http://www.gnu.org/software/autoconf/>`_ | 2.60 | Configuration script builder\ :sup:`4` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `GNU Automake <http://www.gnu.org/software/automake/>`_ | 1.9.6 | aclocal macro generator\ :sup:`4` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `libtool <http://savannah.gnu.org/projects/libtool>`_ | 1.5.22 | Shared library manager\ :sup:`4` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
-| `zlib <http://zlib.net>`_ | >=1.2.3.4 | Compression library\ :sup:`5` |
-+--------------------------------------------------------------+-----------------+---------------------------------------------+
+=========================================================== ============ ==========================================
+Package Version Notes
+=========================================================== ============ ==========================================
+`GNU Make <http://savannah.gnu.org/projects/make>`_ 3.79, 3.79.1 Makefile/build processor
+`GCC <http://gcc.gnu.org/>`_ >=4.7.0 C/C++ compiler\ :sup:`1`
+`python <http://www.python.org/>`_ >=2.5 Automated test suite\ :sup:`2`
+`GNU M4 <http://savannah.gnu.org/projects/m4>`_ 1.4 Macro processor for configuration\ :sup:`3`
+`GNU Autoconf <http://www.gnu.org/software/autoconf/>`_ 2.60 Configuration script builder\ :sup:`3`
+`GNU Automake <http://www.gnu.org/software/automake/>`_ 1.9.6 aclocal macro generator\ :sup:`3`
+`libtool <http://savannah.gnu.org/projects/libtool>`_ 1.5.22 Shared library manager\ :sup:`3`
+`zlib <http://zlib.net>`_ >=1.2.3.4 Compression library\ :sup:`4`
+=========================================================== ============ ==========================================
.. note::
#. Only the C and C++ languages are needed so there's no need to build the
other languages for LLVM's purposes. See `below` for specific version
info.
- #. You only need Subversion if you intend to build from the latest LLVM
- sources. If you're working from a release distribution, you don't need
- Subversion.
#. Only needed if you want to run the automated test suite in the
``llvm/test`` directory.
#. If you want to make changes to the configure scripts, you will need GNU
.. _below:
.. _check here:
-Broken versions of GCC and other tools
---------------------------------------
+Host C++ Toolchain, both Compiler and Standard Library
+------------------------------------------------------
LLVM is very demanding of the host C++ compiler, and as such tends to expose
-bugs in the compiler. In particular, several versions of GCC crash when trying
-to compile LLVM. We routinely use GCC 4.2 (and higher) or Clang. Other
-versions of GCC will probably work as well. GCC versions listed here are known
-to not work. If you are using one of these versions, please try to upgrade your
-GCC to something more recent. If you run into a problem with a version of GCC
-not listed here, please `let us know <mailto:llvmdev@cs.uiuc.edu>`_. Please use
-the "``gcc -v``" command to find out which version of GCC you are using.
-
-**GCC versions prior to 3.0**: GCC 2.96.x and before had several problems in the
-STL that effectively prevent it from compiling LLVM.
-
-**GCC 3.2.2 and 3.2.3**: These versions of GCC fails to compile LLVM with a
-bogus template error. This was fixed in later GCCs.
-
-**GCC 3.3.2**: This version of GCC suffered from a `serious bug
-<http://gcc.gnu.org/PR13392>`_ which causes it to crash in the
-"``convert_from_eh_region_ranges_1``" GCC function.
-
-**Cygwin GCC 3.3.3**: The version of GCC 3.3.3 commonly shipped with Cygwin does
-not work.
-
-**SuSE GCC 3.3.3**: The version of GCC 3.3.3 shipped with SuSE 9.1 (and possibly
-others) does not compile LLVM correctly (it appears that exception handling is
-broken in some cases). Please download the FSF 3.3.3 or upgrade to a newer
-version of GCC.
-
-**GCC 3.4.0 on linux/x86 (32-bit)**: GCC miscompiles portions of the code
-generator, causing an infinite loop in the llvm-gcc build when built with
-optimizations enabled (i.e. a release build).
-
-**GCC 3.4.2 on linux/x86 (32-bit)**: GCC miscompiles portions of the code
-generator at -O3, as with 3.4.0. However gcc 3.4.2 (unlike 3.4.0) correctly
-compiles LLVM at -O2. A work around is to build release LLVM builds with
-"``make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ...``"
-
-**GCC 3.4.x on X86-64/amd64**: GCC `miscompiles portions of LLVM
-<http://llvm.org/PR1056>`__.
-
-**GCC 3.4.4 (CodeSourcery ARM 2005q3-2)**: this compiler miscompiles LLVM when
-building with optimizations enabled. It appears to work with "``make
-ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O1``" or build a debug build.
-
-**IA-64 GCC 4.0.0**: The IA-64 version of GCC 4.0.0 is known to miscompile LLVM.
-
-**Apple Xcode 2.3**: GCC crashes when compiling LLVM at -O3 (which is the
-default with ENABLE_OPTIMIZED=1. To work around this, build with
-"``ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2``".
-
-**GCC 4.1.1**: GCC fails to build LLVM with template concept check errors
-compiling some files. At the time of this writing, GCC mainline (4.2) did not
-share the problem.
-
-**GCC 4.1.1 on X86-64/amd64**: GCC `miscompiles portions of LLVM
-<http://llvm.org/PR1063>`__ when compiling llvm itself into 64-bit code. LLVM
-will appear to mostly work but will be buggy, e.g. failing portions of its
-testsuite.
-
-**GCC 4.1.2 on OpenSUSE**: Seg faults during libstdc++ build and on x86_64
-platforms compiling md5.c gets a mangled constant.
+bugs in the compiler. We are also planning to follow improvements and
+developments in the C++ language and library reasonably closely. As such, we
+require a modern host C++ toolchain, both compiler and standard library, in
+order to build LLVM.
-**GCC 4.1.2 (20061115 (prerelease) (Debian 4.1.1-21)) on Debian**: Appears to
-miscompile parts of LLVM 2.4. One symptom is ValueSymbolTable complaining about
-symbols remaining in the table on destruction.
+For the most popular host toolchains we check for specific minimum versions in
+our build systems:
-**GCC 4.1.2 20071124 (Red Hat 4.1.2-42)**: Suffers from the same symptoms as the
-previous one. It appears to work with ENABLE_OPTIMIZED=0 (the default).
+* Clang 3.1
+* GCC 4.7
+* Visual Studio 2012
-**Cygwin GCC 4.3.2 20080827 (beta) 2**: Users `reported
-<http://llvm.org/PR4145>`_ various problems related with link errors when using
-this GCC version.
+Anything older than these toolchains *may* work, but will require forcing the
+build system with a special option and is not really a supported host platform.
+Also note that older versions of these compilers have often crashed or
+miscompiled LLVM.
-**Debian GCC 4.3.2 on X86**: Crashes building some files in LLVM 2.6.
+For less widely used host toolchains such as ICC or xlC, be aware that a very
+recent version may be required to support all of the C++ features used in LLVM.
-**GCC 4.3.3 (Debian 4.3.3-10) on ARM**: Miscompiles parts of LLVM 2.6 when
-optimizations are turned on. The symptom is an infinite loop in
-``FoldingSetImpl::RemoveNode`` while running the code generator.
-
-**SUSE 11 GCC 4.3.4**: Miscompiles LLVM, causing crashes in ValueHandle logic.
-
-**GCC 4.3.5 and GCC 4.4.5 on ARM**: These can miscompile ``value >> 1`` even at
-``-O0``. A test failure in ``test/Assembler/alignstack.ll`` is one symptom of
-the problem.
+We track certain versions of software that are *known* to fail when used as
+part of the host toolchain. These even include linkers at times.
**GCC 4.6.3 on ARM**: Miscompiles ``llvm-readobj`` at ``-O3``. A test failure
in ``test/Object/readobj-shared-object.test`` is one symptom of the problem.
**Clang 3.0 on Mageia 2**. There's a packaging issue: Clang can not find at
least some (``cxxabi.h``) libstdc++ headers.
+**Clang in C++11 mode and libstdc++ 4.7.2**. This version of libstdc++
+contained `a bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53841>`__ which
+causes Clang to refuse to compile condition_variable header file. At the time
+of writing, this breaks LLD build.
+
+Getting a Modern Host C++ Toolchain
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This section mostly applies to Linux and older BSDs. On Mac OS X, you should
+have a sufficiently modern Xcode, or you will likely need to upgrade until you
+do. On Windows, just use Visual Studio 2012 as the host compiler, it is
+explicitly supported and widely available. FreeBSD 10.0 and newer have a modern
+Clang as the system compiler.
+
+However, some Linux distributions and some other or older BSDs sometimes have
+extremely old versions of GCC. These steps attempt to help you upgrade you
+compiler even on such a system. However, if at all possible, we encourage you
+to use a recent version of a distribution with a modern system compiler that
+meets these requirements. Note that it is tempting to to install a prior
+version of Clang and libc++ to be the host compiler, however libc++ was not
+well tested or set up to build on Linux until relatively recently. As
+a consequence, this guide suggests just using libstdc++ and a modern GCC as the
+initial host in a bootstrap, and then using Clang (and potentially libc++).
+
+The first step is to get a recent GCC toolchain installed. The most common
+distribution on which users have struggled with the version requirements is
+Ubuntu Precise, 12.04 LTS. For this distribution, one easy option is to install
+the `toolchain testing PPA
+<https://launchpad.net/~ubuntu-toolchain-r/+archive/test>`__ and use it to
+install a modern GCC. There is a really nice discussions of this on the `ask
+ubuntu stack exchange
+<http://askubuntu.com/questions/271388/how-to-install-gcc-4-8-in-ubuntu-12-04-from-the-terminal>`__.
+However, not all users can use PPAs and there are many other distros, so it may
+be necessory (or just useful, if you're here you *are* doing compiler
+development after all) to build and install GCC from source. It is also quite
+easy to do these days.
+
+Easy steps for installing GCC 4.8.2:
+
+.. code-block:: console
+
+ wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
+ tar -xvjf gcc-4.8.2.tar.bz2
+ cd gcc-4.8.2
+ ./contrib/download_prerequisites
+ cd ..
+ mkdir gcc-4.8.2-build
+ cd gcc-4.8.2-build
+ %PWD/../gcc-4.8.2/configure --prefix=$HOME/toolchains --enable-languages=c,c++
+ make -j$(nproc)
+ make install
+
+For more details, check out the `excellent GCC wiki entry
+<http://gcc.gnu.org/wiki/InstallingGCC>`__, where I got most of this information
+from.
+
+Once you have a GCC toolchain, use it as your host compiler. Things should
+generally "just work". You may need to pass a special linker flag,
+``-Wl,-rpath,$HOME/toolchains/lib`` or some variant thereof to get things to
+find the libstdc++ DSO in this toolchain.
+
+When you build Clang, you will need to give *it* access to modern C++11
+standard library in order to use it as your new host in part of a bootstrap.
+There are two easy ways to do this, either build (and install) libc++ along
+with Clang and then use it with the ``-stdlib=libc++`` compile and link flag,
+or install Clang into the same prefix (``$HOME/toolchains`` above) as GCC.
+Clang will look within its own prefix for libstdc++ and use it if found. You
+can also add an explicit prefix for Clang to look in for a GCC toolchain with
+the ``--gcc-toolchain=/opt/my/gcc/prefix`` flag, passing it to both compile and
+link commands when using your just-built-Clang to bootstrap.
+
.. _Getting Started with LLVM:
Getting Started with LLVM
Source release for the LLVM test-suite.
-``llvm-gcc-4.2-x.y.source.tar.gz``
-
- Source release of the llvm-gcc-4.2 front end. See README.LLVM in the root
- directory for build instructions.
-
-``llvm-gcc-4.2-x.y-platform.tar.gz``
-
- Binary release of the llvm-gcc-4.2 front end for a specific platform.
-
.. _checkout:
Checkout LLVM from Subversion
following releases are located in the following subdirectories of the '``tags``'
directory:
+* Release 3.3: **RELEASE_33/final**
+* Release 3.2: **RELEASE_32/final**
* Release 3.1: **RELEASE_31/final**
* Release 3.0: **RELEASE_30/final**
* Release 2.9: **RELEASE_29/final**
The result of such a build is executables that are not runnable on on the build
host (--build option) but can be executed on the compile host (--host option).
+Check :doc:`HowToCrossCompileLLVM` and `Clang docs on how to cross-compile in general
+<http://clang.llvm.org/docs/CrossCompilation.html>`_ for more information
+about cross-compiling.
+
The Location of LLVM Object Files
---------------------------------
Clang works just like GCC by default. The standard -S and -c arguments
work as usual (producing a native .s or .o file, respectively).
-#. Next, compile the C file into a LLVM bitcode file:
+#. Next, compile the C file into an LLVM bitcode file:
.. code-block:: console