Created
June 25, 2013 21:53
-
-
Save doubleotoo/5862801 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
# | |
# Usage: ./install-llvm-clang.sh <version: x.x> | |
#------------------------------------------------------------------------------- | |
# Default values | |
#------------------------------------------------------------------------------- | |
: ${LLVM_CLANG_VERSION:=$1} | |
: ${GCC_HOME:=} | |
if [ -z "${GCC_HOME}" ]; then | |
echo "[FATAL] \$GCC_HOME is not set" | |
exit 1 | |
fi | |
GCC_VERSION="$(gcc -dumpversion)" | |
echo "[INFO] LLVM-Clang '$LLVM_CLANG_VERSION'" | |
echo "[INFO] GCC '$GCC_VERSION'" | |
: ${DESTDIR:=$(pwd)} | |
: ${PREFIX:=${DESTDIR}/${LLVM_CLANG_VERSION}/gcc/${GCC_VERSION}} | |
: ${WORKSPACE:=${PREFIX}/workspace} | |
: ${BUILDDIR:=${WORKSPACE}/build} | |
#------------------------------------------------------------------------------- | |
# Sanity Checks | |
#------------------------------------------------------------------------------- | |
if [ -z "${LLVM_CLANG_VERSION}" ]; then | |
echo "Usage: $0 <version: x.x>" | |
exit 1 | |
fi | |
#------------------------------------------------------------------------------- | |
# Meta Information | |
#------------------------------------------------------------------------------- | |
LLVM_SRCDIR="${WORKSPACE}/llvm-${LLVM_CLANG_VERSION}.src" | |
CLANG_SRCDIR="${LLVM_SRCDIR}/tools/cfe-${LLVM_CLANG_VERSION}.src" | |
LLVM_TARBALL="llvm-${LLVM_CLANG_VERSION}.src.tar.gz" | |
CLANG_TARBALL="cfe-${LLVM_CLANG_VERSION}.src.tar.gz" | |
LLVM_DOWNLOAD_URL="http://llvm.org/releases/${LLVM_CLANG_VERSION}/${LLVM_TARBALL}" | |
CLANG_DOWNLOAD_URL="http://llvm.org/releases/${LLVM_CLANG_VERSION}/${CLANG_TARBALL}" | |
#------------------------------------------------------------------------------- | |
# Workspace | |
#------------------------------------------------------------------------------- | |
mkdir -p "${WORKSPACE}" || exit 1 | |
pushd "${WORKSPACE}" || exit 1 | |
#------------------------------------------------------------------------------- | |
# [LLVM] Download and unpack | |
#------------------------------------------------------------------------------- | |
if [ ! -f "$LLVM_TARBALL" ]; then | |
echo "[INFO] Downloading LLVM '$LLVM_DOWNLOAD_URL'" | |
wget --no-check-certificate "$LLVM_DOWNLOAD_URL" || exit 1 | |
else | |
echo "[INFO] [SKIP] LLVM tarball already exists: '$LLVM_TARBALL'" | |
fi | |
if [ ! -d "$LLVM_SRCDIR" ]; then | |
echo "[INFO] Unpacking LLVM tarball: '$LLVM_TARBALL'" | |
tar xvzf "$LLVM_TARBALL" || exit 1 | |
else | |
echo "[INFO] [SKIP] LLVM source code already exists: '$LLVM_SRCDIR'" | |
fi | |
#------------------------------------------------------------------------------- | |
# [Clang] Download and unpack | |
#------------------------------------------------------------------------------- | |
cd "${LLVM_SRCDIR}/tools/" | |
if [ ! -f "$CLANG_TARBALL" ]; then | |
echo "[INFO] Downloading Clang '$CLANG_DOWNLOAD_URL'" | |
wget --no-check-certificate "$CLANG_DOWNLOAD_URL" || exit 1 | |
else | |
echo "[INFO] [SKIP] Clang tarball already exists: '$CLANG_TARBALL'" | |
fi | |
if [ ! -d "$CLANG_SRCDIR" ]; then | |
echo "[INFO] Unpacking Clang tarball: '$CLANG_TARBALL'" | |
tar xvzf "$CLANG_TARBALL" || exit 1 | |
mv "$CLANG_SRCDIR" clang || exit 1 | |
else | |
echo "[INFO] [SKIP] Clang source code already exists: '$CLANG_SRCDIR'" | |
fi | |
#------------------------------------------------------------------------------- | |
# Build and install | |
#------------------------------------------------------------------------------- | |
cd "${LLVM_SRCDIR}" | |
mkdir -p "${BUILDDIR}" || exit 1 | |
pushd "${BUILDDIR}" || exit 1 | |
if [ ! -e "${PREFIX}/bin" ]; then | |
echo "[INFO] Configuring LLVM-Clang" | |
echo "[INFO] Installing to '$PREFIX'" | |
echo "[INFO] \$GCC_HOME='${GCC_HOME}'" | |
"${LLVM_SRCDIR}/configure" --prefix="$PREFIX" || exit 1 | |
# Required by Clang-to-ROSE interface | |
export REQUIRES_RTTI=1 | |
make -j || exit 1 | |
make -j install || exit 1 | |
if [ "$(uname --machine)" = "x86_64" ]; then | |
export LIBDIR="lib64" | |
else | |
export LIBDIR="lib" | |
fi | |
echo "[INFO] Creating LLVM-Clang environment setup file" | |
cat > "${PREFIX}/setup.sh" <<-EOF | |
#!/bin/bash | |
# | |
# Automatically generated by $0 on $(date) | |
export LLVM_HOME="${PREFIX}" | |
# llvm-config is used to setup \$LD_LIBRARY_PATH | |
export PATH="\${LLVM_HOME}/bin:\${PATH}" | |
# GCC ${GCC_VERSION} | |
export GCC_HOME="${GCC_HOME}" | |
export PATH="\${GCC_HOME}/bin:\${PATH}" | |
export LD_LIBRARY_PATH="\${GCC_HOME}/${LIBDIR}:\${LD_LIBRARY_PATH}" | |
export GMP_HOME="${GMP_HOME}" | |
export LD_LIBRARY_PATH="\${GMP_HOME}/lib:\${LD_LIBRARY_PATH}" | |
export MPC_HOME="${MPC_HOME}" | |
export LD_LIBRARY_PATH="\${MPC_HOME}/lib:\${LD_LIBRARY_PATH}" | |
export MPFR_HOME="${MPFR_HOME}" | |
export LD_LIBRARY_PATH="\${MPFR_HOME}/lib:\${LD_LIBRARY_PATH}" | |
EOF | |
#----------------------------------------------- | |
# Set Permissions | |
#----------------------------------------------- | |
chmod -R g+r "${PREFIX}" | |
chmod -R g+x "${PREFIX}/bin" | |
find "${PREFIX}" -type d -exec chmod g+x {} \; | |
echo "[INFO] Successfully installed LLVM-Clang version '${LLVM_CLANG_VERSION}'" | |
echo "[INFO] \$GCC_HOME='${GCC_HOME}'" | |
echo "[INFO] \$PREFIX='${PREFIX}'" | |
else | |
echo "[INFO] [SKIP] Installation already exists in '$PREFIX'" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment