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