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