#!/bin/sh
#
# Copyright (C) 2008-2010 by coresystems GmbH
# written by Patrick Georgi <patrick.georgi@coresystems.de> and
#            Stefan Reinauer <stefan.reinauer@coresystems.de>
#
# Copyright (C) 2011 by Sage Electronic Engineering
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc.
#

cd $(dirname $0)

CROSSGCC_DATE="June 17th, 2015"
CROSSGCC_VERSION="1.31"

# default settings
PACKAGE=GCC
TARGETDIR=$(pwd)/xgcc
TARGETARCH=i386-elf
DESTDIR=
SAVETEMPS=0
SKIPPYTHON=1

# GCC toolchain version numbers
GMP_VERSION=6.0.0
MPFR_VERSION=3.1.2
MPC_VERSION=1.0.3
LIBELF_VERSION=0.8.13
GCC_VERSION=4.9.2
GCC_AUTOCONF_VERSION=2.69
BINUTILS_VERSION=2.25
GDB_VERSION=7.9.1
IASL_VERSION=20150204
PYTHON_VERSION=3.4.3
EXPAT_VERSION=2.1.0
# CLANG version number
CLANG_VERSION=3.6.1

# GCC toolchain archive locations
GMP_ARCHIVE="http://ftpmirror.gnu.org/gmp/gmp-${GMP_VERSION}a.tar.bz2"
MPFR_ARCHIVE="http://ftpmirror.gnu.org/mpfr/mpfr-${MPFR_VERSION}.tar.bz2"
MPC_ARCHIVE="http://ftpmirror.gnu.org/mpc/mpc-${MPC_VERSION}.tar.gz"
LIBELF_ARCHIVE="http://www.mr511.de/software/libelf-${LIBELF_VERSION}.tar.gz"
GCC_ARCHIVE="http://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2"
BINUTILS_ARCHIVE="http://ftpmirror.gnu.org/binutils/binutils-${BINUTILS_VERSION}.tar.bz2"
GDB_ARCHIVE="http://ftpmirror.gnu.org/gdb/gdb-${GDB_VERSION}.tar.xz"
IASL_ARCHIVE="https://acpica.org/sites/acpica/files/acpica-unix-${IASL_VERSION}.tar.gz"
PYTHON_ARCHIVE="http://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz"
EXPAT_ARCHIVE="http://downloads.sourceforge.net/sourceforge/expat/expat-${EXPAT_VERSION}.tar.gz"
# CLANG toolchain archive locations
LLVM_ARCHIVE="http://llvm.org/releases/${CLANG_VERSION}/llvm-${CLANG_VERSION}.src.tar.xz"
CFE_ARCHIVE="http://llvm.org/releases/${CLANG_VERSION}/cfe-${CLANG_VERSION}.src.tar.xz"
CRT_ARCHIVE="http://llvm.org/releases/${CLANG_VERSION}/compiler-rt-${CLANG_VERSION}.src.tar.xz"
CTE_ARCHIVE="http://llvm.org/releases/${CLANG_VERSION}/clang-tools-extra-${CLANG_VERSION}.src.tar.xz"

# GCC toolchain directories
GMP_DIR="gmp-${GMP_VERSION}"
MPFR_DIR="mpfr-${MPFR_VERSION}"
MPC_DIR="mpc-${MPC_VERSION}"
LIBELF_DIR="libelf-${LIBELF_VERSION}"
GCC_DIR="gcc-${GCC_VERSION}"
BINUTILS_DIR="binutils-${BINUTILS_VERSION}"
GDB_DIR="gdb-${GDB_VERSION}"
IASL_DIR="acpica-unix-${IASL_VERSION}"
PYTHON_DIR="Python-${PYTHON_VERSION}"
EXPAT_DIR="expat-${EXPAT_VERSION}"
# CLANG toolchain directories
LLVM_DIR="llvm-${CLANG_VERSION}.src"
CFE_DIR="cfe-${CLANG_VERSION}.src"
CRT_DIR="compiler-rt-${CLANG_VERSION}.src"
CTE_DIR="clang-tools-extra-${CLANG_VERSION}.src"

unset MAKELEVEL MAKEFLAGS

red='\033[0;31m'
RED='\033[1;31m'
green='\033[0;32m'
GREEN='\033[1;32m'
blue='\033[0;34m'
BLUE='\033[1;34m'
cyan='\033[0;36m'
CYAN='\033[1;36m'
NC='\033[0m' # No Color

UNAME=$(uname)

normalize_dirs()
{
	mkdir -p $DESTDIR$TARGETDIR/lib
	test -d $DESTDIR$TARGETDIR/lib32 && mv $DESTDIR$TARGETDIR/lib32/* $DESTDIR$TARGETDIR/lib
	test -d $DESTDIR$TARGETDIR/lib64 && mv $DESTDIR$TARGETDIR/lib64/* $DESTDIR$TARGETDIR/lib
	rmdir -p $DESTDIR$TARGETDIR/lib32 $DESTDIR$TARGETDIR/lib64

	perl -pi -e "s,/lib32,/lib," $DESTDIR$TARGETDIR/lib/*.la
	perl -pi -e "s,/lib64,/lib," $DESTDIR$TARGETDIR/lib/*.la
}

please_install()
{
	test -r /etc/os-release && source /etc/os-release
	case "$ID_LIKE" in
	debian) solution="sudo apt-get install $1" ;;
	suse) solution="sudo zypper install $1" ;;
	*) solution="using your OS packaging system" ;;
	esac

	printf "${RED}ERROR:${red} Missing tool: Please install \'$1\' utility. (eg $solution)${NC}\n" >&2
}

searchtool()
{
	# $1 short name
	# $2 search string
	# $3 soft fail if set
	# result: file name of that tool on stdout
	#         or no output if nothing suitable was found
	search=GNU
	if [ -n "$2" ]; then
		search="$2"
	fi
	for i in "$1" "g$1" "gnu$1"; do
		if [ -x "$(which $i 2>/dev/null)" ]; then
			if [ "$(cat /dev/null | $i --version 2>&1 | grep -c "$search")" \
			    -gt 0 ]; then
				echo $i
				return
			fi
		fi
	done
	# A workaround for OSX 10.9 and some BSDs, whose nongnu
	# patch and tar also work.
	if [ $UNAME = "Darwin" -o $UNAME = "FreeBSD" -o $UNAME = "NetBSD" -o $UNAME = "OpenBSD" ]; then
		if [ "$1" = "patch" -o "$1" = "tar" ]; then
			if [ -x "$(which $1 2>/dev/null)" ]; then
				echo $1
				return
			fi
		fi
	fi
	if [ "$(echo $1 | cut -b -3)" = "sha" ]; then
		if [ $UNAME = "FreeBSD" ]; then
			if [ -x "$(which sha1 2>/dev/null)" ]; then
				echo sha1
				return
			fi
		fi
		if [ $UNAME = "NetBSD" ]; then
			if [ -x "$(which cksum 2>/dev/null)" ]; then
				echo cksum -a $(echo $1 | sed -e 's,sum,,')
				return
			fi
		fi
		if [ $UNAME = "Darwin" ]; then
			if [ -x "$(which openssl 2>/dev/null)" ]; then
				echo openssl $(echo $1 | sed -e 's,sum,,')
				return
			fi
		fi
	fi
	please_install $1
	[ -z "$3" ] && exit 1
	false
}

download() {
	package=$1
	archive="$(eval echo \$$package"_ARCHIVE")"

	FILE=$(basename $archive)
	printf " * $FILE "

	test -f tarballs/$FILE && \
		( test -z "$CHECKSUM" || \
		  test "$(cat sum/$FILE.cksum 2>/dev/null | \
				sed -e 's,.*\([0-9a-f]\{40\}\).*,\1,')" = \
			"$($CHECKSUM tarballs/$FILE 2>/dev/null | \
				sed -e 's,.*\([0-9a-f]\{40\}\).*,\1,')" ) && \
			printf "(cached)" || (
		printf "(downloading)"
		rm -f tarballs/$FILE
		cd tarballs
		wget --no-check-certificate -q $archive
		cd ..
		test ! -f sum/$FILE.cksum && test -f tarballs/$FILE && \
			(test -z "$CHECKSUM" || $CHECKSUM tarballs/$FILE > sum/$FILE.cksum ) && \
			printf "(checksum created. ${RED}Note. Please upload sum/$FILE.cksum if the corresponding archive is upgraded.${NC})"
	)
	if [ ! -f tarballs/$FILE ]; then
		printf "\n${RED}Failed to download $FILE.${NC}\n"
		exit 1
	fi
	printf "\n"
}

unpack_and_patch() {
	package=$1
	archive="$(eval echo \$$package"_ARCHIVE")"
	dir="$(eval echo \$$package"_DIR")"
	test -d ${dir} && test -f ${dir}/.unpack_success || (
		printf " * $(basename $archive)\n"
		FLAGS=zxf
		suffix=$(echo $archive | sed 's,.*\.,,')
		test "$suffix" = "gz" && FLAGS=zxf
		test "$suffix" = "bz2" && FLAGS=jxf
		test "$suffix" = "xz" && FLAGS="--xz -xf"
		test "$suffix" = "lzma" && FLAGS="--lzma -xf"
		$TAR $FLAGS tarballs/$(basename $archive)
		for patch in patches/${dir}_*.patch; do
			test -r $patch || continue
			printf "   o $(basename $patch)\n"
			$PATCH -s -N -p0 < $(echo $patch) || {
				printf "\n${RED}Failed $patch.${NC}\n"
				exit 1
			}
		done
		touch ${dir}/.unpack_success
	)
}

fn_exists()
{
	type $1 >/dev/null 2>&1
}

is_package_enabled()
{
	echo "$PACKAGES" |grep -q "\<$1\>"
}

build() {
	package=$1

	fn_exists build_$package || return

	version="$(eval echo \$$package"_VERSION")"
	BUILDDIR=build-${TARGETARCH}-$package

	mkdir -p ${BUILDDIR}

	is_package_enabled "$package" && \
	if [ -f ${BUILDDIR}/.success ]; then
		printf "Skipping $package as it is already built\n"
	else
		printf "Building $package $version ... "
		DIR=$PWD
		cd ${BUILDDIR}
		rm -f .failed
		build_${package} > build.log 2>&1
		cd $DIR/${BUILDDIR}
		if [ ! -f .failed ]; then touch .success; fi
		cd ..

		if [ -r "${BUILDDIR}/.failed" ]; then
			printf "${RED}failed${NC}. Check ${BUILDDIR}/build.log.\n"
			exit 1
		fi
		printf "${green}ok${NC}\n"
	fi
}

cleanup()
{
	printf "Cleaning up temporary files... "
	for package in $PACKAGES; do
		rm -rf build-${TARGETARCH}-$package $(eval echo \$$package"_DIR")
	done
	printf "${green}ok${NC}\n"
}

myhelp()
{
	printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-C] [-G] [-S]\n"
	printf "       $0 [-V|--version]\n"
	printf "       $0 [-h|--help]\n\n"

	printf "Options:\n"
	printf "    [-V|--version]                print version number and exit\n"
	printf "    [-h|--help]                   print this help and exit\n"
	printf "    [-c|--clean]                  remove temporary files before build\n"
	printf "    [-t|--savetemps]              don't remove temporary files after build\n"
	printf "    [-y|--ccache]                 Use ccache when building cross compiler\n"
	printf "    [-j|--jobs <num>]             run <num> jobs in parallel in make\n"
	printf "    [-d|--directory <target dir>] target directory to install cross compiler to\n"
	printf "                                  (defaults to $TARGETDIR)\n\n"
	printf "    [-D|--destdir <dest dir>]     destination directory to install cross compiler to\n"
	printf "                                  (for RPM builds, default unset)\n"
	printf "    [-P|--package <package>]      Build a specific package: GCC, CLANG, IASL, GDB\n"
	printf "                                  (defaults to $PACKAGE)\n"
	printf "GCC specific options:\n"
	printf "    [-p|--platform <platform>]    target platform to build cross compiler for\n"
	printf "                                  (defaults to $TARGETARCH)\n"
	printf "GDB specific options:\n"
	printf "    [-p|--platform <platform>]    target platform to build cross compiler for\n"
	printf "                                  (defaults to $TARGETARCH)\n"
	printf "    [-S|--scripting]              build scripting support for GDB\n\n"
}

myversion()
{
	# version tag is always printed, so just print the license here

	cat << EOF
Copyright (C) 2008-2010 by coresystems GmbH
Copyright (C) 2011 by Sage Electronic Engineering

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

EOF
}

build_GMP() {
	CC="$CC" CFLAGS="-Os" ../${GMP_DIR}/configure --disable-shared --enable-fat --prefix=$TARGETDIR $OPTIONS \
		|| touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs

	# Now set CFLAGS to match GMP CFLAGS but strip out -pedantic
	# as GCC 4.6.x fails if it's there.
	export HOSTCFLAGS=$(grep __GMP_CFLAGS $DESTDIR$TARGETDIR/include/gmp.h |cut -d\" -f2 |\
	    sed s,-pedantic,,)
}

build_MPFR() {
	test $UNAME = "Darwin" && CFLAGS="$CFLAGS -force_cpusubtype_ALL"
	CC="$CC" ../${MPFR_DIR}/configure --disable-shared --prefix=$TARGETDIR \
		--infodir=$TARGETDIR/info \
		--with-gmp=$DESTDIR$TARGETDIR CFLAGS="$HOSTCFLAGS" || \
		touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs

	# work around build problem of libgmp.la
	if [ "$DESTDIR" != "" ]; then
	    perl -pi -e "s,$DESTDIR,," $DESTDIR$TARGETDIR/libgmp.la
	fi
}

build_MPC() {
	CC="$CC" ../${MPC_DIR}/configure --disable-shared --prefix=$TARGETDIR \
		--infodir=$TARGETDIR/info --with-mpfr=$DESTDIR$TARGETDIR \
		--with-gmp=$DESTDIR$TARGETDIR CFLAGS="$HOSTCFLAGS" || \
		touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs
}

build_LIBELF() {
	CC="$CC" CFLAGS="$HOSTCFLAGS" libelf_cv_elf_h_works=no \
	../${LIBELF_DIR}/configure --disable-shared --prefix=$TARGETDIR \
		--infodir=$TARGETDIR/info CFLAGS="$HOSTCFLAGS" || touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install prefix=$DESTDIR$TARGETDIR || touch .failed

	normalize_dirs
}

build_BINUTILS() {
	if [ $TARGETARCH == "x86_64-elf" ]; then
		ADDITIONALTARGET=",i386-elf"
	fi
	CC="$CC" ../binutils-${BINUTILS_VERSION}/configure --prefix=$TARGETDIR \
		--target=${TARGETARCH} --enable-targets=${TARGETARCH}${ADDITIONALTARGET} \
		--disable-werror --disable-nls --enable-lto --enable-gold \
		--enable-plugins --enable-multilibs CFLAGS="$HOSTCFLAGS" || touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed
}


build_GCC() {
	# GCC does not honor HOSTCFLAGS at all. CFLAGS are used for
	# both target and host object files.
	# There's a work-around called CFLAGS_FOR_BUILD and CFLAGS_FOR_TARGET
	# but it does not seem to work properly. At least the host library
	# libiberty is not compiled with CFLAGS_FOR_BUILD.
	CC="$CC" CFLAGS_FOR_TARGET="-O2" CFLAGS="$HOSTCFLAGS" \
		CFLAGS_FOR_BUILD="$HOSTCFLAGS" ../gcc-${GCC_VERSION}/configure \
		--prefix=$TARGETDIR --libexecdir=$TARGETDIR/lib \
		--target=${TARGETARCH} --disable-werror --disable-shared \
		--enable-lto --enable-plugins --enable-gold --enable-ld=default \
		--disable-libssp --disable-bootstrap --disable-nls \
		--disable-libquadmath --without-headers \
		${GCC_OPTIONS} --enable-languages="c" \
		--with-gmp=$DESTDIR$TARGETDIR --with-mpfr=$DESTDIR$TARGETDIR \
		--with-mpc=$DESTDIR$TARGETDIR --with-libelf=$DESTDIR$TARGETDIR \
		--with-pkgversion="coreboot toolchain v$CROSSGCC_VERSION $CROSSGCC_DATE" \
		|| touch .failed
	$MAKE $JOBS CFLAGS_FOR_BUILD="$HOSTCFLAGS" all-gcc || touch .failed
	$MAKE install-gcc DESTDIR=$DESTDIR || touch .failed

	if [ "$(echo $TARGETARCH | grep -c -- -mingw32)" -eq 0 ]; then
		$MAKE $JOBS CFLAGS_FOR_BUILD="$HOSTCFLAGS" all-target-libgcc || touch .failed
		$MAKE install-target-libgcc DESTDIR=$DESTDIR || touch .failed
	fi
}

build_EXPAT() {
	CC="$CC" CFLAGS="$HOSTCFLAGS" ../${EXPAT_DIR}/configure --disable-shared \
		--prefix=$TARGETDIR --target=${TARGETARCH} || touch .failed
	$MAKE || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs
}

build_PYTHON() {
	CC="$CC" CFLAGS="$HOSTCFLAGS" ../${PYTHON_DIR}/configure --prefix=$TARGETDIR \
		--target=${TARGETARCH} || touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs
}

build_GDB() {
	export PYTHONHOME=$DESTDIR$TARGETDIR
	if [ $(uname) != "FreeBSD" -a $(uname) != "NetBSD" ]; then
		LIBDL="-ldl"
	fi
	LDFLAGS="-Wl,-rpath,\$\$ORIGIN/../lib/ -L$DESTDIR$TARGETDIR/lib \
		 -lpthread $LIBDL -lutil" \
	CC="$CC" CFLAGS="$HOSTCFLAGS -I$DESTDIR$TARGETDIR/include" \
	../${GDB_DIR}/configure --prefix=$TARGETDIR \
		--target=${TARGETARCH} --disable-werror --disable-nls
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed
}

build_IASL() {
	RDIR=$PWD
	cd ../$IASL_DIR/generate/unix
	CFLAGS="$HOSTCFLAGS"
	HOST="_LINUX"
	test $UNAME = "Darwin" && HOST="_APPLE"
	test $UNAME = "FreeBSD" && HOST="_FreeBSD"
	test $UNAME = "Cygwin" && HOST="_CYGWIN"
	HOST="$HOST" OPT_CFLAGS="-O -D_FORTIFY_SOURCE=2" CFLAGS="$CFLAGS" $MAKE CC="$CC" iasl || touch $RDIR/.failed
	rm -f $DESTDIR$TARGETDIR/bin/iasl || touch $RDIR/.failed
	cp bin/iasl $DESTDIR$TARGETDIR/bin || touch $RDIR/.failed
}

build_LLVM() {
	cd ..
	ln -sf $PWD/$CFE_DIR  $LLVM_DIR/tools/clang
	ln -sf $PWD/$CTE_DIR  $LLVM_DIR/tools/clang/tools/extra
	ln -sf $PWD/$CRT_DIR  $LLVM_DIR/projects/compiler-rt
	cd -

	$CMAKE -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$DESTDIR$TARGETDIR \
		-DCMAKE_BUILD_TYPE=Release ../$LLVM_DIR || touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install || touch .failed

	cp -a ../$CFE_DIR/tools/scan-build/* $DESTDIR$TARGETDIR/bin
	cp -a ../$CFE_DIR/tools/scan-view/* $DESTDIR$TARGETDIR/bin
}

printf "${blue}Welcome to the ${red}coreboot${blue} cross toolchain builder v$CROSSGCC_VERSION ($CROSSGCC_DATE)${NC}\n\n"

# Look if we have getopt. If not, build it.
export PATH=$PATH:.
getopt - > /dev/null 2>/dev/null || gcc -o getopt getopt.c

# parse parameters.. try to find out whether we're running GNU getopt
getoptbrand="$(getopt -V | sed -e '1!d' -e 's,^\(......\).*,\1,')"
if [ "${getoptbrand}" = "getopt" ]; then
	# Detected GNU getopt that supports long options.
	args=$(getopt -l version,help,clean,directory:,platform:,jobs:,destdir:,savetemps,skip-gdb,ccache,clang Vhcd:p:j:D:tGyC -- "$@")
	eval set "$args"
else
	# Detected non-GNU getopt
	args=$(getopt Vhcd:p:j:D:tGyC $*)
	set -- $args
fi

if [ $? != 0 ]; then
	myhelp
	exit 1
fi

while true ; do
        case "$1" in
		-V|--version)	shift; myversion; exit 0;;
		-h|--help)	shift; myhelp; exit 0;;
		-c|--clean)	shift; clean=1;;
		-t|--savetemps)	shift; SAVETEMPS=1;;
		-d|--directory)	shift; TARGETDIR="$1"; shift;;
		-p|--platform)	shift; TARGETARCH="$1"; shift;;
		-D|--destdir)	shift; DESTDIR="$1"; shift;;
		-j|--jobs)	shift; JOBS="-j $1"; shift;;
		-P|--package)   shift; PACKAGE="$1"; shift;;
		-S|--scripting) shift; SKIPPYTHON=0;;
		-y|--ccache)	shift; USECCACHE=1;;
		--)		shift; break;;
		-*)		printf "Invalid option\n\n"; myhelp; exit 1;;
		*)		break;;
	esac
done

case "$TARGETARCH" in
	x86_64-elf)	;;
	x86_64*)	TARGETARCH=x86_64-elf;;
	i386-elf)	;;
	i386-mingw32)	;;
	mipsel-elf)	;;
	riscv-elf)	;;
	i386*)		TARGETARCH=i386-elf;;
	arm*)		TARGETARCH=armv7-a-eabi;;
	aarch64*)	TARGETARCH=aarch64-elf;;
	*)		printf "${red}WARNING: Unsupported architecture $TARGETARCH.${NC}\n\n"; ;;
esac

# Figure out which packages to build

case "$PACKAGE" in
	GCC|gcc)
		echo "Target architecture is now $TARGETARCH"
		NAME="${TARGETARCH} cross GCC"
		PACKAGES="GMP MPFR MPC LIBELF BINUTILS GCC"
		;;
	GDB|gdb)
		NAME="${TARGETARCH} cross GDB"
		PACKAGES="GDB"
		if [ $SKIPPYTHON -eq 0 ]; then
			PACKAGES="EXPAT PYTHON $PACKAGES"
		fi
		;;
	CLANG|clang)
		NAME=clang
		PACKAGES="LLVM CFE CRT CTE"
		CMAKE=$(searchtool cmake "cmake") || exit $?
		;;
	IASL|iasl)
		NAME="IASL ACPI compiler"
		PACKAGES=IASL
		;;
	*)
		printf "${red}ERROR: Unsupported package $PACKAGE. (Supported packages are GCC, GDB, CLANG, IASL)${NC}\n\n";
		exit 1
		;;
esac

# Find all the required tools:

TAR=$(searchtool tar) || exit $?
PATCH=$(searchtool patch) || exit $?
MAKE=$(searchtool make) || exit $?
SHA1SUM=$(searchtool sha1sum)
SHA512SUM=$(searchtool sha512sum)
CHECKSUM=$SHA1SUM

searchtool m4 > /dev/null
searchtool bison > /dev/null
searchtool flex flex > /dev/null
searchtool g++ "Free Software Foundation" nofail > /dev/null || \
searchtool clang "clang version" > /dev/null
searchtool wget > /dev/null
searchtool bzip2 "bzip2," > /dev/null

# This initial cleanup is useful when updating the toolchain script.

if [ "$clean" = "1" ]; then
	cleanup
fi

# Set up host compiler and flags needed for various OSes

CC=cc
if is_package_enabled "GCC"; then
if [ $UNAME = "Darwin" ]; then
	#GCC_OPTIONS="$GCC_OPTIONS --enable-threads=posix"

	# generally the OS X compiler can create x64 binaries.
	# Per default it generated i386 binaries in 10.5 and x64
	# binaries in 10.6 (even if the kernel is 32bit)
	# For some weird reason, 10.5 autodetects an ABI=64 though
	# so we're setting the ABI explicitly here.
	if [ $(sysctl -n hw.optional.x86_64 2>/dev/null) -eq 1 ] 2>/dev/null; then
		OPTIONS="ABI=64"
	else
		OPTIONS="ABI=32"
	fi

	# In Xcode 4.5.2 the default compiler is clang.
	# However, this compiler fails to compile gcc 4.7.x. As a
	# workaround it's possible to compile gcc with llvm-gcc.
	if $CC -v 2>&1 | grep -q LLVM; then
		CC=llvm-gcc
	fi
fi
fi # GCC

if [ "$USECCACHE" = 1 ]; then
	CC="ccache $CC"
fi

# Prepare target directory for building GCC
# (dependencies must be in the PATH)
mkdir -p $DESTDIR$TARGETDIR/bin
export PATH=$DESTDIR$TARGETDIR/bin:$PATH

# Download, unpack, patch and build all packages

printf "Downloading tar balls ... \n"
mkdir -p tarballs
for P in $PACKAGES; do
	download $P
done
printf "Downloaded tar balls ... ${green}ok${NC}\n"

printf "Unpacking and patching ... \n"
for P in $PACKAGES; do
	unpack_and_patch $P || exit 1
done
printf "Unpacked and patched ... ${green}ok${NC}\n"

printf "Building packages ... \n"
for package in $PACKAGES; do
	build $package
done
printf "Packages built ... ${green}ok${NC}\n"

# Adding git information of current tree to target directory
# for reproducibility
PROGNAME=$(basename "$0")
rm -f "$DESTDIR$TARGETDIR/$PROGNAME".commit.*
cp "$PROGNAME" $DESTDIR$TARGETDIR/"$PROGNAME.commit.$(git describe)"

if [ $SAVETEMPS -eq 0 ]; then
	cleanup
else
	printf "Leaving temporary files around... ${green}ok${NC}\n"
fi

printf "\n${green}You can now run your $NAME toolchain from $TARGETDIR.${NC}\n"
