//===----------------------------------------------------------------------===//
//                      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)
    
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)

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

  --with-gxx-include-dir=/usr/include/c++/4.0.0
  --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.
