//===----------------------------------------------------------------------===//
//                      Building llvm-gcc4 from Source
//===----------------------------------------------------------------------===//

These instructions describe how to build llvm-gcc-4.2.

Note that this should work on all the supported LLVM targets.  If you run into
problems, please ask for help or file a bug.

Please follow these instructions carefully.  In particular, the target-specific
configure instructions should be followed to ensure correct builds.

Please also note, that this branch is still in early development phase and can
be not usable at all.

//===----------------------------------------------------------------------===//
                           First Step: Build LLVM
//===----------------------------------------------------------------------===//

First, check out LLVM from Subversion, then build it in optimized mode (a
Release build, as opposed to a Debug one)):

  make ENABLE_OPTIMIZED=1

If you use a Debug instead of a Release build of LLVM, make sure you add
--enable-checking to the configure flags below or llvm-gcc-4.2 will not build!

Below we assume the LLVM OBJ_ROOT is $LLVMOBJDIR.


//===----------------------------------------------------------------------===//
                           Unpack Front-end Source
//===----------------------------------------------------------------------===//

$ mkdir llvm-gcc
$ cd llvm-gcc
$ tar zxvf llvm-gcc4-x.y.source.tar.gz


//===----------------------------------------------------------------------===//
                     Target-Specific configure Instructions
//===----------------------------------------------------------------------===//

//===-----------------------
Linux-specific Instructions:

To build a compiler that targets 32-bit x86, the following options should be
added to the configure line:
  --target=i686-pc-linux-gnu --with-tune=generic --with-arch=pentium4
You can select a different arch string if you prefer, but it's important to
use this option to prevent llvm-gcc from defaulting to generic i386, which
can lead to problems as llvm itself doesn't support x86 targets lower
than i486.

If llvm-gcc doesn't build right, try building LLVM with OPTIMIZE_OPTION=-O2.
This may be host compiler version specific.

If you get an error message building llvm-gcc like this:
  ...gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by
              /usr/lib/libstdc++.so.6)

you are probably hitting http://llvm.org/PR896.  Please reconfigure with the
--disable-shared option to work around this.

If you want Fortran support:
    EXTRALANGS=,fortran

//===-----------------------
X86-64/AMD-64/EM64-T for any OS other than Darwin/Mac OS X:

If you want just pure 64 bit compiler, configure with --disable-multilib.

//===-----------------------
Darwin/Mac OS X Instructions:

First step: Upgrade your Xcode installation: you need at least Xcode 2.4.

Next, decide if you want Objective-C support.  If so:
    EXTRALANGS=,objc,obj-c++

If building for Darwin/PPC:
    TRIPLE=powerpc-apple-darwin8 (Tiger)
    TRIPLE=powerpc-apple-darwin9 (Leopard)

If building for Darwin/X86 (32- and 64-bit support):
    TARGETOPTIONS='--with-arch=nocona --with-tune=generic'
    TRIPLE=i686-apple-darwin8 (Tiger)
    TRIPLE=i686-apple-darwin9 (Leopard)
    TRIPLE=x86_64-apple-darwin10 (Snow Leopard on a 64-bit machine)
    TRIPLE=i686-apple-darwin10 (Snow Leopard on a 32-bit machine)

If building for Darwin/X86 (32-bit support only):
    TARGETOPTIONS='--with-arch=pentium-m --with-tune=prescott --disable-multilib'
    TRIPLE=i686-apple-darwin8 (Tiger)
    TRIPLE=i686-apple-darwin9 (Leopard)
    TRIPLE=x86_64-apple-darwin10 (Snow Leopard on a 64-bit machine)
    TRIPLE=i686-apple-darwin10 (Snow Leopard on a 32-bit machine)

The Triples are very important, otherwise your llvm-gcc/g++ may not be able
to find the header files below.

In addition, you *must* specify the following options to configure:

     --with-gxx-include-dir=/usr/include/c++/4.0.0 (Leopard)
     --with-gxx-include-dir=/usr/include/c++/4.2.1 (Snow Leopard)
     --build=$TRIPLE --host=$TRIPLE --target=$TRIPLE

With these options, llvm-gcc will build the same way as Apple's system GCC.

If you want Fortran support, you need to do the following:
    Get the GMP, MPFR, and libiconv via MacPorts.
    You need to add fortran to the list of EXTRALANGS.
    Then specify these additional options to configure:
        --with-gmp=/opt/local
        --with-mpfr=/opt/local
        --with-libiconv-prefix=/opt/local

//===----------------------------------------------------------------------===//
                                Build Options
//===----------------------------------------------------------------------===//

Version Identifier:

  If you want LLVM to include an identifying marker in the --version output,
  build llvm-gcc with LLVM_VERSION_INFO=XXX.  For example, to build the LLVM
  2.5 Release front-end, use 'make LLVM_VERSION_INFO=2.5'.  This will cause the
  front-end to print: "gcc version 4.2.1 (Based on Apple Inc. build 5555)
  (LLVM build 2.5)" as the version number.

  BUILDOPTIONS=LLVM_VERSION_INFO=whatever


//===----------------------------------------------------------------------===//
                        Configure, Build, Install, Test
//===----------------------------------------------------------------------===//

Next, make an object directory and install directory as siblings to the
llvm-gcc source directory, and build and install llvm-gcc:

$ mkdir obj
$ mkdir install
$ cd obj
$ ../llvm-gcc4.2-x.y.source/configure --prefix=`pwd`/../install --program-prefix=llvm- \
    --enable-llvm=$LLVMOBJDIR --enable-languages=c,c++$EXTRALANGS $TARGETOPTIONS
$ make $BUILDOPTIONS
$ make install

Note that it is currently necessary to use a separate object directory for
building llvm-gcc. Running configure and make from within the llvm-gcc
source directory does not work.

//===-----------------------
Darwin/Mac OS X Specific part:

$ ln -sf /usr/lib/libstdc++.6.dylib `pwd`/../install/lib
$ ln -sf /usr/lib/libstdc++.6.dylib `pwd`/../install/lib/libstdc++.dylib

That last step, "ln -sf ..." is required so that the linker (collect2) can find
libstdc++ ('-lstdc++') and subsequently link C++ executables correctly.

//===-----------------------

Note that if you prefer to bootstrap llvm-gcc (so that the final llvm-gcc
executables have been compiled with llvm-gcc itself), replace "make" with
"make bootstrap".

You should now have something like:

$ llvm-gcc -v
...
gcc version 4.2.1 (Based on Apple Inc. build 5555) (LLVM build)

** NOTE: If the -v line above doesn't include "LLVM", you probably mistyped the
--enable-llvm=xxx line and have a normal gcc, not an llvm-gcc.
