Skip to content

Instantly share code, notes, and snippets.

@cr1901
Created February 8, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cr1901/28c7c1a2a0581eb5e02f to your computer and use it in GitHub Desktop.
Save cr1901/28c7c1a2a0581eb5e02f to your computer and use it in GitHub Desktop.
Compile LLVM/Rust on Ubuntu 12.04 using non-standard paths.
#!/bin/sh
BOOTSTRAP_ROOT=/home/william/Projects
#TEMP_TOOLS=$BOOTSTRAP_ROOT/llvm-temp-tools
TEMP_TOOLS=$BOOTSTRAP_ROOT/llvm-toolchain
LLVM_TOOLCHAIN=$BOOTSTRAP_ROOT/llvm-toolchain
FETCH=wget #Try BSD FTP if wget doesn't exist.
NUM_JOBS=4
#export PATH=$TEMP_TOOLS/bin:$PATH
export LD_LIBRARY_PATH=$TEMP_TOOLS/lib:$LD_LIBRARY_PATH
get_phase() {
PHASE=`cat llvm_phase`
}
put_phase() {
echo "$1" > llvm_phase
}
get_gcc() {
$FETCH ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2
tar -xjf gcc-4.8.3.tar.bz2
rm gcc-4.8.3.tar.bz2
cd gcc-4.8.3
./contrib/download_prerequisites
cd $BOOTSTRAP_ROOT
mkdir build-gcc-for-llvm
}
build_gcc() {
cd build-gcc-for-llvm
../gcc-4.8.3/configure --prefix=$TEMP_TOOLS --enable-languages=c,c++
make -j$NUM_JOBS
make install
cd $BOOTSTRAP_ROOT
}
get_cmake() {
$FETCH http://www.cmake.org/files/v3.1/cmake-3.1.0.tar.gz
tar -xzf cmake-3.1.0.tar.gz
rm cmake-3.1.0.tar.gz
cd $BOOTSTRAP_ROOT
}
build_cmake() {
cd cmake-3.1.0
./bootstrap --prefix=$TEMP_TOOLS
make -j$NUM_JOBS
make install
cd $BOOTSTRAP_ROOT
}
get_llvm() {
git clone http://llvm.org/git/llvm
mkdir build-llvm
}
get_clang() {
cd llvm/tools
git clone http://llvm.org/git/clang
cd $BOOTSTRAP_ROOT
}
build_llvm() {
cd build-llvm
CC=$TEMP_TOOLS/bin/gcc CXX=$TEMP_TOOLS/bin/g++ \
$TEMP_TOOLS/bin/cmake \
-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$TEMP_TOOLS/lib -L$TEMP_TOOLS/lib" \
-DCMAKE_INSTALL_PREFIX=$TEMP_TOOLS ../llvm
make -j$NUM_JOBS
make install
cd $BOOTSTRAP_ROOT
}
get_rust() {
git clone https://github.com/rust-lang/rust
mkdir build-rust-external-llvm
}
build_rust() {
cd build-rust-external-llvm
CC=$TEMP_TOOLS/bin/gcc CXX=$TEMP_TOOLS/bin/g++ \
CPPFLAGS="-I$TEMP_TOOLS/include" LDFLAGS="-Wl,-rpath,$TEMP_TOOLS/lib -L$TEMP_TOOLS/lib" \
./configure --prefix=$TEMP_TOOLS --llvm-root=$TEMP_TOOLS
RUSTFLAGS="-L$TEMP_TOOLS/lib" make -j$NUM_JOBS
make install
cd $BOOTSTRAP_ROOT
}
cd $BOOTSTRAP_ROOT
if [ ! -f llvm_phase ]; then
PHASE=0
else
get_phase
fi
while [ $PHASE -lt 8 ]; do
case $PHASE in
0)
get_gcc
put_phase 1
;;
1)
build_gcc
put_phase 2
;;
2)
get_cmake
put_phase 3
;;
3)
build_cmake
put_phase 4
;;
4)
get_llvm
get_clang
put_phase 5
;;
5)
build_llvm
put_phase 6
;;
6)
get_rust
put_phase 7
;;
7)
build_rust
put_phase 8
;;
esac
get_phase
done
cd $BOOTSTRAP_ROOT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment