1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#!/bin/bash 2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# 3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Compiles and installs a Linux/x86_64 -> Linux/ARM crosstool based on LLVM and 4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# LLVM-GCC-4.2 using SVN snapshots in provided tarballs. 5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoset -o nounset 7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoset -o errexit 8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoecho -n "Welcome to LLVM Linux/X86_64 -> Linux/ARM crosstool " 10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoecho "builder/installer; some steps will require sudo privileges." 11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly INSTALL_ROOT="${INSTALL_ROOT:-/usr/local/crosstool}" 13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Both $USER and root *must* have read/write access to this dir. 14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly SCRATCH_ROOT=$(mktemp -d "${TMPDIR:-/tmp}/llvm-project.XXXXXX") 15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly SRC_ROOT="${SCRATCH_ROOT}/src" 16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly OBJ_ROOT="${SCRATCH_ROOT}/obj" 17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CROSS_HOST="x86_64-unknown-linux-gnu" 19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CROSS_TARGET="arm-none-linux-gnueabi" 20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CROSS_MARCH="${CROSS_MARCH:-armv6}" 21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY="${INSTALL_ROOT}/codesourcery" 23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY_PKG_PATH="${CODE_SOURCERY_PKG_PATH:-${HOME}/codesourcery}" 24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY_HTTP="http://www.codesourcery.com/sgpp/lite/arm/portal/package1787/public" 25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY_PKG="arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2" 26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY_ROOT="${CODE_SOURCERY}/arm-2007q3" 27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CODE_SOURCERY_BIN="${CODE_SOURCERY_ROOT}/bin" 28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Make sure ${CROSS_TARGET}-* binutils are in command path 29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexport PATH="${CODE_SOURCERY_BIN}:${PATH}" 30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CROSS_TARGET_AS="${CODE_SOURCERY_BIN}/${CROSS_TARGET}-as" 32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly CROSS_TARGET_LD="${CODE_SOURCERY_BIN}/${CROSS_TARGET}-ld" 33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly SYSROOT="${CODE_SOURCERY_ROOT}/${CROSS_TARGET}/libc" 35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_PKG_PATH="${LLVM_PKG_PATH:-${HOME}/llvm-project/snapshots}" 37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Latest SVN revisions known to be working in this configuration. 39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_DEFAULT_REV="74530" 40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVMGCC_DEFAULT_REV="74535" 41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_PKG="llvm-${LLVM_SVN_REV:-${LLVM_DEFAULT_REV}}.tar.bz2" 43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_SRC_DIR="${SRC_ROOT}/llvm" 44e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_OBJ_DIR="${OBJ_ROOT}/llvm" 45e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVM_INSTALL_DIR="${INSTALL_ROOT}/${CROSS_TARGET}/llvm" 46e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 47e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVMGCC_PKG="llvm-gcc-4.2-${LLVMGCC_SVN_REV:-${LLVMGCC_DEFAULT_REV}}.tar.bz2" 48e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVMGCC_SRC_DIR="${SRC_ROOT}/llvm-gcc-4.2" 49e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVMGCC_OBJ_DIR="${OBJ_ROOT}/llvm-gcc-4.2" 50e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly LLVMGCC_INSTALL_DIR="${INSTALL_ROOT}/${CROSS_TARGET}/llvm-gcc-4.2" 51e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 52e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoreadonly MAKE_OPTS="${MAKE_OPTS:--j2}" 53e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 54e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Params: 55e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# $1: directory to be created 56e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# $2: optional mkdir command prefix, e.g. "sudo" 57e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaocreateDir() { 58e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ ! -e $1 ]]; then 59e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao ${2:-} mkdir -p $1 60e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao elif [[ -e $1 && ! -d $1 ]]; then 61e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "$1 exists but is not a directory; exiting." 62e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao exit 3 63e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 64e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 65e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 66e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaosudoCreateDir() { 67e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao createDir $1 sudo 68e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao sudo chown ${USER} $1 69e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 70e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 71e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# Prints out and runs the command, but without logging -- intended for use with 72e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# lightweight commands that don't have useful output to parse, e.g. mkdir, tar, 73e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao# etc. 74e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaorunCommand() { 75e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao local message="$1" 76e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao shift 77e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "=> $message" 78e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "==> Running: $*" 79e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao $* 80e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 81e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 82e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaorunAndLog() { 83e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao local message="$1" 84e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao local log_file="$2" 85e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao shift 2 86e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "=> $message; log in $log_file" 87e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "==> Running: $*" 88e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Pop-up a terminal with the output of the current command? 89e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # e.g.: xterm -e /bin/bash -c "$* >| tee $log_file" 90e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao $* &> $log_file 91e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ $? != 0 ]]; then 92e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "Error occurred: see most recent log file for details." 93e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao exit 94e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 95e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 96e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 97e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallCodeSourcery() { 98e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Unpack the tarball, creating the CodeSourcery dir, if necessary. 99e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ ! -d ${CODE_SOURCERY_ROOT} ]]; then 100e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao sudoCreateDir ${CODE_SOURCERY} 101e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao cd ${CODE_SOURCERY} 102e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ -e ${CODE_SOURCERY_PKG_PATH}/${CODE_SOURCERY_PKG} ]]; then 103e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runCommand "Unpacking CodeSourcery in ${CODE_SOURCERY}" \ 104e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tar jxf ${CODE_SOURCERY_PKG_PATH}/${CODE_SOURCERY_PKG} 105e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao else 106e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo -n "CodeSourcery tarball not found in " 107e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "${CODE_SOURCERY_PKG_PATH}/${CODE_SOURCERY_PKG}" 108e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo -n "Fix the path or download it from " 109e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "${CODE_SOURCERY_HTTP}/${CROSS_TARGET}/${CODE_SOURCERY_PKG}" 110e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao exit 111e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 112e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao else 113e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "CodeSourcery install dir already exists; skipping." 114e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 115e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 116e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Verify our CodeSourcery toolchain installation. 117e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ ! -d "${SYSROOT}" ]]; then 118e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo -n "Error: CodeSourcery does not contain libc for ${CROSS_TARGET}: " 119e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "${SYSROOT} not found." 120e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao exit 121e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 122e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 123e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao for tool in ${CROSS_TARGET_AS} ${CROSS_TARGET_LD}; do 124e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ ! -e $tool ]]; then 125e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "${tool} not found; exiting." 126e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao exit 127e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 128e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao done 129e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 130e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 131e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallLLVM() { 132e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ -d ${LLVM_INSTALL_DIR} ]]; then 133e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "LLVM install dir ${LLVM_INSTALL_DIR} exists; skipping." 134e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return 135e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 136e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 137e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao sudoCreateDir ${LLVM_INSTALL_DIR} 138e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 139e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Unpack LLVM tarball; should create the directory "llvm". 140e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao cd ${SRC_ROOT} 141e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runCommand "Unpacking LLVM" tar jxf ${LLVM_PKG_PATH}/${LLVM_PKG} 142e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 143e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Configure, build, and install LLVM. 144e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao createDir ${LLVM_OBJ_DIR} 145e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao cd ${LLVM_OBJ_DIR} 146e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Configuring LLVM" ${LLVM_OBJ_DIR}/llvm-configure.log \ 147e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao ${LLVM_SRC_DIR}/configure \ 148e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --disable-jit \ 149e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --enable-optimized \ 150e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --prefix=${LLVM_INSTALL_DIR} \ 151e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --target=${CROSS_TARGET} \ 152e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --with-llvmgccdir=${LLVMGCC_INSTALL_DIR} 153e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Building LLVM" ${LLVM_OBJ_DIR}/llvm-build.log \ 154e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao make ${MAKE_OPTS} 155e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Installing LLVM" ${LLVM_OBJ_DIR}/llvm-install.log \ 156e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao make ${MAKE_OPTS} install 157e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 158e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 159e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallLLVMGCC() { 160e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao if [[ -d ${LLVMGCC_INSTALL_DIR} ]]; then 161e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao echo "LLVM-GCC install dir ${LLVMGCC_INSTALL_DIR} exists; skipping." 162e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return 163e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao fi 164e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 165e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao sudoCreateDir ${LLVMGCC_INSTALL_DIR} 166e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 167e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Unpack LLVM-GCC tarball; should create the directory "llvm-gcc-4.2". 168e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao cd ${SRC_ROOT} 169e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runCommand "Unpacking LLVM-GCC" tar jxf ${LLVM_PKG_PATH}/${LLVMGCC_PKG} 170e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 171e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao # Configure, build, and install LLVM-GCC. 172e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao createDir ${LLVMGCC_OBJ_DIR} 173e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao cd ${LLVMGCC_OBJ_DIR} 174e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Configuring LLVM-GCC" ${LLVMGCC_OBJ_DIR}/llvmgcc-configure.log \ 175e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao ${LLVMGCC_SRC_DIR}/configure \ 176e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --enable-languages=c,c++ \ 177e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --enable-llvm=${LLVM_INSTALL_DIR} \ 178e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --prefix=${LLVMGCC_INSTALL_DIR} \ 179e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --program-prefix=llvm- \ 180e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --target=${CROSS_TARGET} \ 181e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --with-arch=${CROSS_MARCH} \ 182e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --with-as=${CROSS_TARGET_AS} \ 183e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --with-ld=${CROSS_TARGET_LD} \ 184e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao --with-sysroot=${SYSROOT} 185e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Building LLVM-GCC" ${LLVMGCC_OBJ_DIR}/llvmgcc-build.log \ 186e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao make 187e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao runAndLog "Installing LLVM-GCC" ${LLVMGCC_OBJ_DIR}/llvmgcc-install.log \ 188e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao make install 189e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 190e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 191e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoecho "Building in ${SCRATCH_ROOT}; installing in ${INSTALL_ROOT}" 192e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 193e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaocreateDir ${SRC_ROOT} 194e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaocreateDir ${OBJ_ROOT} 195e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 196e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallCodeSourcery 197e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallLLVM 198e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei LiaoinstallLLVMGCC 199e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 200e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoecho "Done." 201