#!/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., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
#

cd `dirname $0`

CROSSGCC_DATE="March 8th, 2015"
CROSSGCC_VERSION="1.27"

# default settings
TARGETDIR=`pwd`/xgcc
TARGETARCH=i386-elf
DESTDIR=

# 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
IASL_VERSION=20150204
PYTHON_VERSION=3.4.3
EXPAT_VERSION=2.1.0

# 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"

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}"

unset MAKELEVEL MAKEFLAGS

SAVETEMPS=0
SKIPGDB=1
SKIPPYTHON=1

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
}

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 test -x "`which $i 2>/dev/null`"; then
			if test `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 test -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 test -x "`which sha1 2>/dev/null`"; then
				echo sha1
				return
			fi
		fi
		if [ $UNAME = "NetBSD" ]; then
			if test -x "`which cksum 2>/dev/null`"; then
				echo cksum -a `echo $1 | sed -e 's,sum,,'`
				return
			fi
		fi
		if [ $UNAME = "Darwin" ]; then
			if test -x "`which openssl 2>/dev/null`"; then
				echo openssl `echo $1 | sed -e 's,sum,,'`
				return
			fi
		fi
	fi
	printf "${RED}ERROR:${red} Missing tool: Please install $1 (eg using your OS packaging system)${NC}\n" >&2
	[ -z "$3" ] && exit 1
	false
}

TAR=`searchtool tar` || exit $?
PATCH=`searchtool patch` || exit $?
MAKE=`searchtool make` || exit $?

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

wait_for_build() {
	# $1: directory in which log file and failure marker are stored
	cat > "$1/crossgcc-build.log"
	test -r "$1/.failed" && printf "${RED}failed${NC}. Check $1/crossgcc-build.log.\n" || \
		printf "${green}ok${NC}\n"
	test -r "$1/.failed" && exit 1
	true
}

SHA1SUM=`searchtool sha1sum`
SHA512SUM=`searchtool sha512sum`
CHECKSUM=$SHA1SUM

cleanup()
{
	printf "Cleaning up temporary files... "
	rm -rf ${BUILDDIRPREFIX}-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-*
	rm -rf gdb-* acpica-* python-* expat-*
	printf "${green}ok${NC}\n"
}

myhelp()
{
	printf "Usage: $0 [-V] [-c] [-p <platform>] [-d <target directory>] [-D <dest dir>] [-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 "    [-p|--platform <platform>]    target platform to build cross compiler for\n"
	printf "                                  (defaults to $TARGETARCH)\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 "    [-G|--gdb]                    build GNU debugger\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
}

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 Vhcd:p:j:D:tGy -- "$@"`
	eval set "$args"
else
	# Detected non-GNU getopt
	args=`getopt Vhcd:p:j:D:tGy $*`
	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;;
		-G|--gdb)	shift; SKIPGDB=0;;
		-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

echo "Target arch is now $TARGETARCH"
BUILDDIRPREFIX=build-${TARGETARCH}

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

GDB_PACKAGE="GDB"
PYTHON_PACKAGE="PYTHON"
EXPAT_PACKAGE="EXPAT"
if [ $SKIPGDB -eq 1 ]; then
	printf "Will skip GDB ... ${green}ok${NC}\n"
	GDB_ARCHIVE=""
	GDB_PACKAGE=""
	if [ $SKIPPYTHON -eq 0 ]; then
		printf "Python scripting needs GDB ... disabling ... ${green}ok${NC}\n"
		SKIPPYTHON=1
	fi
fi
if [ $SKIPPYTHON -eq 1 ]; then
	PYTHON_ARCHIVE=""
	PYTHON_PACKAGE=""
	EXPAT_ARCHIVE=""
	EXPAT_PACKAGE=""
fi

# coreboot does not like the GOLD linker
# USE_GOLD="--enable-gold"
USE_GOLD=""
GCC_OPTIONS="--enable-lto"

printf "Downloading tar balls ... \n"
mkdir -p tarballs
for ARCHIVE in $GMP_ARCHIVE $MPFR_ARCHIVE $MPC_ARCHIVE $LIBELF_ARCHIVE  \
	    $GCC_ARCHIVE $BINUTILS_ARCHIVE $GDB_ARCHIVE \
	    $IASL_ARCHIVE $PYTHON_ARCHIVE $EXPAT_ARCHIVE; do
	FILE=`basename $ARCHIVE`
	printf " * $FILE "

	##create the sum
	#test -f sum/$FILE.cksum || (
	#	$CHECKSUM tarballs/$FILE > sum/$FILE.cksum
	#	continue
	#)

	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})"
	)
	test -f tarballs/$FILE || \
		printf "\n${RED}Failed to download $FILE.${NC}\n"
	test -f tarballs/$FILE || exit 1
	printf "\n"
done
printf "Downloaded tar balls ... "
printf "${green}ok${NC}\n"

printf "Unpacking and patching ... \n"
for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS $PYTHON_PACKAGE \
	    $EXPAT_PACKAGE $GDB_PACKAGE IASL; do
	archive=$PACKAGE"_ARCHIVE"
	archive="`eval echo '$'$archive`"
	dir=$PACKAGE"_DIR"
	dir="`eval echo '$'${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"
		done
		touch ${dir}/.unpack_success
	)
done
printf "Unpacked and patched ... "
printf "${green}ok${NC}\n"

CC=cc
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

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

mkdir -p ${BUILDDIRPREFIX}-gmp ${BUILDDIRPREFIX}-mpfr ${BUILDDIRPREFIX}-mpc ${BUILDDIRPREFIX}-libelf ${BUILDDIRPREFIX}-binutils \
		${BUILDDIRPREFIX}-gcc ${BUILDDIRPREFIX}-python ${BUILDDIRPREFIX}-expat

mkdir -p $DESTDIR$TARGETDIR/bin
export PATH=$DESTDIR$TARGETDIR/bin:$PATH

if [ $SKIPGDB -eq 0 ]; then
	mkdir -p ${BUILDDIRPREFIX}-gdb
fi
if [ -f ${BUILDDIRPREFIX}-gmp/.success ]; then
	printf "Skipping GMP as it is already built\n"
else
printf "Building GMP ${GMP_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-gmp
	rm -f .failed
	CC="$CC" ../${GMP_DIR}/configure --disable-shared --prefix=$TARGETDIR $OPTIONS \
		|| touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed

	normalize_dirs

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-gmp" || exit 1
fi

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

if [ -f ${BUILDDIRPREFIX}-mpfr/.success ]; then
	printf "Skipping MPFR as it is already built\n"
else
printf "Building MPFR ${MPFR_VERSION} ... "
(
	test $UNAME = "Darwin" && CFLAGS="$CFLAGS -force_cpusubtype_ALL"
	cd ${BUILDDIRPREFIX}-mpfr
	rm -f .failed
	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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-mpfr" || exit 1
fi

if [ -f ${BUILDDIRPREFIX}-mpc/.success ]; then
	printf "Skipping MPC as it is already built\n"
else
printf "Building MPC ${MPC_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-mpc
	rm -f .failed
	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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-mpc" || exit 1
fi

if [ -f ${BUILDDIRPREFIX}-libelf/.success ]; then
	printf "Skipping libelf as it is already built\n"
else
printf "Building libelf ${LIBELF_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-libelf
	rm -f .failed
	echo "$HOSTCFLAGS"
	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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-libelf" || exit 1
fi

if [ -f ${BUILDDIRPREFIX}-binutils/.success ]; then
	printf "Skipping binutils as it is already built\n"
else
printf "Building binutils ${BINUTILS_VERSION} ... "
(
	# What a pain: binutils don't come with configure
	# script anymore. Create it:
	cd binutils-${BINUTILS_VERSION}/
	autoconf
	cd ..
	# Now build binutils
	cd ${BUILDDIRPREFIX}-binutils
	rm -f .failed
	CC="$CC" ../binutils-${BINUTILS_VERSION}/configure --prefix=$TARGETDIR \
		--target=${TARGETARCH} --disable-werror --disable-nls \
		$USE_GOLD CFLAGS="$HOSTCFLAGS" || touch .failed
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed
	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-binutils" || exit 1
fi

if [ -f ${BUILDDIRPREFIX}-gcc/.success ]; then
	printf "Skipping GCC as it is already built\n"
else
printf "Building GCC ${GCC_VERSION} ... "
(
	# Even worse than binutils: GCC does not come with configure
	# script anymore, but also enforces an obsolete autoconf version
	# to create it. This is a poster child of how autotools help make
	# software portable.
	cd gcc-${GCC_VERSION}
	sed '/dnl Ensure exactly this Autoconf version is used/d' \
		config/override.m4 > config/override.m4.new
	autoconf_version=`autoconf -V | grep "autoconf" | tr ' ' '\n' | tail -1`
	sed "s/${GCC_AUTOCONF_VERSION}/${autoconf_version}/g" \
		config/override.m4.new > config/override.m4
	autoconf
	cd ..
	# Now, finally, we can build gcc:
	cd ${BUILDDIRPREFIX}-gcc
	rm -f .failed
	# GCC does not honour HOSTCFLAGS at all. CFLAGS are used for
	# both target and host object files. This is pretty misdesigned.
	# 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 \
		--disable-libssp --disable-bootstrap --disable-nls \
		--disable-libquadmath --without-headers \
		$GCC_OPTIONS --enable-languages="c" $USE_GOLD \
		--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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-gcc" || exit 1
fi

if [ -f ${BUILDDIRPREFIX}-expat/.success ]; then
	printf "Skipping Expat as it is already built\n"
elif [ $SKIPPYTHON -eq 1 ]; then
	printf "Skipping Expat (Python scripting not enabled)\n"
else
printf "Building Expat ${EXPAT_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-expat
	rm -f .failed
	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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-expat" || exit 1
fi


if [ -f ${BUILDDIRPREFIX}-python/.success ]; then
	printf "Skipping Python as it is already built\n"
elif [ $SKIPPYTHON -eq 1 ]; then
	printf "Skipping Python (Python scripting not enabled)\n"
else
printf "Building Python ${PYTHON_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-python
	rm -f .failed
	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

	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-python" || exit 1
fi


if [ -f ${BUILDDIRPREFIX}-gdb/.success ]; then
	printf "Skipping GDB as it is already built\n"
elif [ $SKIPGDB -eq 1 ]; then
	printf "Skipping GDB (GDB support not enabled)\n"
else
printf "Building GDB ${GDB_VERSION} ... "
(
	cd ${BUILDDIRPREFIX}-gdb
	export PYTHONHOME=$DESTDIR$TARGETDIR
	rm -f .failed
	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-${GDB_VERSION}/configure --prefix=$TARGETDIR \
		--target=${TARGETARCH} --disable-werror --disable-nls
	$MAKE $JOBS || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed
	if [ ! -f .failed ]; then touch .success; fi
) 2>&1 | wait_for_build "${BUILDDIRPREFIX}-gdb" || exit 1
fi

if [ -f $IASL_DIR/source/compiler/.success ]; then
	printf "Skipping IASL as it is already built\n"
else
printf "Building IASL ${IASL_VERSION} ... "
(
	RDIR=$IASL_DIR/source/compiler
	cd $IASL_DIR/generate/unix
	rm -f $RDIR/.failed
	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
	if [ ! -f $RDIR/.failed ]; then touch $RDIR/.success; fi
) 2>&1 | wait_for_build "$IASL_DIR/source/compiler" || exit 1
fi

PROGNAME=`basename "$0"`
rm -f "$DESTDIR$TARGETDIR/$PROGNAME".commit.*
cp "$PROGNAME" $DESTDIR$TARGETDIR/"$PROGNAME.commit.`git describe`"

if [ $SAVETEMPS -eq 0 ]; then
	printf "Cleaning up... "
	rm -rf ${GMP_DIR} ${BUILDDIRPREFIX}-gmp
	rm -rf ${MPFR_DIR} ${BUILDDIRPREFIX}-mpfr
	rm -rf ${MPC_DIR} ${BUILDDIRPREFIX}-mpc
	rm -rf ${LIBELF_DIR} ${BUILDDIRPREFIX}-libelf
	rm -rf ${BINUTILS_DIR} ${BUILDDIRPREFIX}-binutils
	rm -rf ${GCC_DIR} ${BUILDDIRPREFIX}-gcc
	rm -rf ${GDB_DIR} ${BUILDDIRPREFIX}-gdb
	rm -rf ${EXPAT_DIR} ${BUILDDIRPREFIX}-expat
	rm -rf ${PYTHON_DIR} ${BUILDDIRPREFIX}-python
	rm -rf ${IASL_DIR}
	printf "${green}ok${NC}\n"
else
	printf "Leaving temporary files around... ${green}ok${NC}\n"
fi

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


