Written by Brian R. Gaeke
This document is intended to explain the process of building the LLVM C/C++ front-end, based on GCC 3.4, from its source code. You would have to do this, for example, if you are porting LLVM to a new architecture or operating system.
NOTE: This is currently a somewhat fragile, error-prone process, and you should only try to do it if:
We welcome patches to help make this process simpler.
Configure and build the LLVM libraries and tools using:
% cd llvm % ./configure [options...] % gmake tools-only
The use of the non-default target "tools-only" means that the LLVM tools and libraries will build, and the binaries will be deposited in llvm/tools/Debug, but the runtime (bytecode) libraries will not build.
Add the directory containing the tools to your PATH.
% set path = ( `cd llvm/tools/Debug && pwd` $path )
Unpack the C/C++ front-end source into cfrontend/src.
Edit src/configure. Change the first line (starting w/ #!) to contain the correct full pathname of sh.
Make "build" and "install" directories as siblings of the "src" tree.
% pwd /usr/local/example/cfrontend/src % cd .. % mkdir build install % set CFEINSTALL = `pwd`/install
Configure, build and install the C front-end:
Linux/x86:
% cd build % ../src/configure --prefix=$CFEINSTALL --disable-nls --disable-shared \ --enable-languages=c,c++ % gmake all-gcc % setenv LLVM_LIB_SEARCH_PATH `pwd`/gcc % gmake all; gmake install
Solaris/Sparc:
For Solaris/Sparc, LLVM only supports SparcV9. Therefore, the configure command line should like something like this:
% cd build % ../src/configure --prefix=$CFEINSTALL --disable-nls --disable-shared \ --enable-languages=c,c++ --host=sparcv9-sun-solaris2.8 % gmake all-gcc % setenv LLVM_LIB_SEARCH_PATH `pwd`/gcc % gmake all; gmake install
Common Problem: You may get error messages regarding the fact that LLVM does not support inline assembly. Here are two common fixes:
Fix 1: If you have system header files that include
inline assembly, you may have to modify them to remove the inline
assembly, and install the modified versions in
$CFEINSTALL/target-triplet/sys-include
.
src/libstdc++-v3/config/cpu/name-of-cpu/atomicity.h
and apply a patch so that it does not use inline assembly.Porting to a new architecture: If you are porting the new front-end to a new architecture, or compiling in a different configuration that we have previously, there are probably several changes you will have to make to the GCC target to get it to work correctly. These include:
Go back into the LLVM source tree proper. Edit Makefile.config
to redefine LLVMGCCDIR
to the full pathname of the
$CFEINSTALL
directory, which is the directory you just
installed the C front-end into. (The ./configure script is likely to
have set this to a directory which does not exist on your system.)
If you edited header files during the C/C++ front-end build as
described in "Fix 1" above, you must now copy those header files from
$CFEINSTALL/target-triplet/sys-include
to
$CFEINSTALL/lib/gcc/target-triplet/3.4-llvm/include
.
(This should be the "include" directory in the same directory as the
libgcc.a library, which you can find by running
$CFEINSTALL/bin/gcc --print-libgcc-file-name
.)
Build and install the runtime (bytecode) libraries by running:
% gmake -C runtime % mkdir $CFEINSTALL/bytecode-libs % gmake -C runtime install % setenv LLVM_LIB_SEARCH_PATH $CFEINSTALL/bytecode-libs
Test the newly-installed C frontend by one or more of the following means:
gmake -C
test/Programs