//===----------------------------------------------------------------------===//
//                      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=i686-apple-darwin10 (Snow Leopard)

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=i686-apple-darwin10 (Snow Leopard)

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.
