#!/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
#

CROSSGCC_DATE="November 1st, 2011"
CROSSGCC_VERSION="1.07"

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

# version numbers
GMP_VERSION=5.0.5
MPFR_VERSION=3.1.0
MPC_VERSION=0.9
LIBELF_VERSION=0.8.13
GCC_VERSION=4.6.3
GCC_AUTOCONF_VERSION=2.64
BINUTILS_VERSION=2.22
GDB_VERSION=7.4.1
W32API_VERSION=3.17-2
W32API_VERSION_SHORT=3.17
MINGWRT_VERSION=3.18
IASL_VERSION=20120420
PYTHON_VERSION=2.7.2
EXPAT_VERSION=2.0.1

# archive locations
GMP_ARCHIVE="http://ftpmirror.gnu.org/gmp/gmp-${GMP_VERSION}.tar.bz2"
MPFR_ARCHIVE="http://ftpmirror.gnu.org/mpfr/mpfr-${MPFR_VERSION}.tar.bz2"
MPC_ARCHIVE="http://www.multiprecision.org/mpc/download/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-core-${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.bz2"
W32API_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-${W32API_VERSION_SHORT}/w32api-${W32API_VERSION}-mingw32-src.tar.lzma"
MINGWRT_ARCHIVE="http://downloads.sourceforge.net/project/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-${MINGWRT_VERSION}/mingwrt-${MINGWRT_VERSION}-mingw32-src.tar.gz"
IASL_ARCHIVE="http://www.acpica.org/download/acpica-unix-${IASL_VERSION}.tar.gz"
PYTHON_ARCHIVE="http://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.bz2"
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}"
W32API_DIR="w32api-${W32API_VERSION}-mingw32"
MINGWRT_DIR="mingwrt-${MINGWRT_VERSION}-mingw32"
IASL_DIR="acpica-unix-${IASL_VERSION}"
PYTHON_DIR="Python-${PYTHON_VERSION}"
EXPAT_DIR="expat-${EXPAT_VERSION}"

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

searchgnu()
{
	# $1 short name
	# result: GNU version of that tool on stdout
	#         or no output if no GNU version was found
	for i in "$1" "g$1" "gnu$1"; do
		if test -x "`which $i 2>/dev/null`"; then
			if test `$i --version 2>/dev/null |grep -c GNU` \
			    -gt 0; then
				echo $i
				return
			fi
		fi
	done
	printf "${RED}ERROR:${red} Missing toolchain: $1${NC}\n" >&2
	exit 1
}

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

searchgnu m4 > /dev/null
searchgnu bison > /dev/null

cleanup()
{
	printf "Cleaning up temporary files... "
	rm -rf build-* combined gcc-* gmp-* mpfr-* mpc-* libelf-* binutils-*
	rm -rf gdb-* w32api-* mingwrt-* 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; cleanup;;
		-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

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

MINGW_ARCHIVES=""
if [ "$TARGETARCH" = "i386-mingw32" ]; then
	MINGW_ARCHIVES="$W32API_ARCHIVE $MINGWRT_ARCHIVE"
fi

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

if [ ${GCC_VERSION} = "trunk" ]; then
  if [ ! -r tarballs/gcc-core-${GCC_VERSION}.tar.bz2 ]; then
    printf "Pre-Release GCC ${GCC_VERSION}, checking out subversion trunk\n"
    mkdir -p tarballs/.tmp
    cd tarballs/.tmp
    rm -rf gcc-${GCC_VERSION}
    svn export -q svn://gcc.gnu.org/svn/gcc/trunk gcc-${GCC_VERSION}
    printf "done. Now creating tar ball...\n"
    tar cjf ../gcc-core-${GCC_VERSION}.tar.bz2 gcc-${GCC_VERSION}
    printf "done. Now cleaning up...\n"
    cd ..
    rm -rf .tmp
    cd ..
    printf "done.\n"
  fi
fi

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 $MINGW_ARCHIVES \
	    $IASL_ARCHIVE $PYTHON_ARCHIVE $EXPAT_ARCHIVE; do
	FILE=`basename $ARCHIVE`
	printf " * $FILE "
	test -f tarballs/$FILE && printf "(cached)" || (
		printf "(downloading)"
		cd tarballs
		wget --no-check-certificate -q $ARCHIVE
	)
	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"

MINGW_PACKAGES=""
if [ "$TARGETARCH" = "i386-mingw32" ]; then
	MINGW_PACKAGES="W32API MINGWRT"
fi

printf "Unpacking and patching ... \n"
for PACKAGE in GMP MPFR MPC LIBELF GCC BINUTILS $PYTHON_PACKAGE \
	    $EXPAT_PACKAGE $GDB_PACKAGE $MINGW_PACKAGES IASL; do
	archive=$PACKAGE"_ARCHIVE"
	archive="`eval echo '$'$archive`"
	dir=$PACKAGE"_DIR"
	dir="`eval echo '$'${dir}`"
	test -d ${dir} || (
		printf " * `basename $archive`\n"
		FLAGS=zxf
		suffix=`echo $archive | sed 's,.*\.,,'`
		test "$suffix" = "gz" && FLAGS=zxf
		test "$suffix" = "bz2" && FLAGS=jxf
		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
	)
done
printf "Unpacked and patched ... "
printf "${green}ok${NC}\n"

if [ "$TARGETARCH" = "i386-mingw32" ]; then
	mkdir -p $TARGETDIR/i386-mingw32/sys-include
	mv $MINGWRT_DIR/include/* $W32API_DIR/include/* \
				  $TARGETDIR/i386-mingw32/sys-include
fi

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` -eq 1 ]; then
		OPTIONS="ABI=64"
	else
		OPTIONS="ABI=32"
	fi

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

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

mkdir -p build-gmp build-mpfr build-mpc build-libelf build-binutils \
		build-gcc build-python build-expat
if [ $SKIPGDB -eq 0 ]; then
	mkdir -p build-gdb
fi
if [ -f build-gmp/.success ]; then
	printf "Skipping GMP as it is already built\n"
else
printf "Building GMP ${GMP_VERSION} ... "
(
	cd build-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
	if [ ! -f .failed ]; then touch .success; fi
) > build-gmp/crossgcc-build.log 2>&1
test -r build-gmp/.failed && printf "${RED}failed${NC}\n" || \
	printf "${green}ok${NC}\n"
test -r build-gmp/.failed && exit 1
fi

#if [ "$DESTDIR" != "" -a ! -x $TARGETDIR ]; then
#	# create compat link
#	ln -s $DESTDIR$TARGETDIR $TARGETDIR
#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 build-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 build-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

	# 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
) > build-mpfr/crossgcc-build.log 2>&1
test -r build-mpfr/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-mpfr/.failed && exit 1
fi

if [ -f build-mpc/.success ]; then
	printf "Skipping MPC as it is already built\n"
else
printf "Building MPC ${MPC_VERSION} ... "
(
	#test `uname` = "Darwin" && CFLAGS="$CFLAGS -force_cpusubtype_ALL"
	cd build-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

	if [ ! -f .failed ]; then touch .success; fi
) > build-mpc/crossgcc-build.log 2>&1
test -r build-mpc/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-mpc/.failed && exit 1
fi

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

	if [ ! -f .failed ]; then touch .success; fi
) > build-libelf/crossgcc-build.log 2>&1
test -r build-libelf/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-libelf/.failed && exit 1
fi

if [ -f build-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 build-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
) > build-binutils/crossgcc-build.log 2>&1
test -r build-binutils/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-binutils/.failed && exit 1
fi

if [ -f build-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 build-gcc
	export PATH=$PATH:$DESTDIR$TARGETDIR/bin
	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 \
		$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" || touch .failed
	$MAKE install DESTDIR=$DESTDIR || touch .failed
	if [ ! -f .failed ]; then touch .success; fi
) > build-gcc/crossgcc-build.log 2>&1
test -r build-gcc/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-gcc/.failed && exit 1
fi

if [ -f build-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 build-expat
	export PATH=$PATH:$DESTDIR$TARGETDIR/bin
	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
	if [ ! -f .failed ]; then touch .success; fi
) &> build-expat/crossgcc-build.log
test -r build-expat/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-expat/.failed && exit 1
fi


if [ -f build-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 build-python
	export PATH=$PATH:$DESTDIR$TARGETDIR/bin
	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
	if [ ! -f .failed ]; then touch .success; fi
) &> build-gdb/crossgcc-build.log
test -r build-python/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-python/.failed && exit 1
fi


if [ -f build-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 build-gdb
	export PATH=$PATH:$DESTDIR$TARGETDIR/bin
	export PYTHONHOME=$DESTDIR$TARGETDIR
	rm -f .failed
	LDFLAGS="-Wl,-rpath,\$\$ORIGIN/../lib/ -L$DESTDIR$TARGETDIR/lib \
		 -lpthread -ldl -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
) > build-gdb/crossgcc-build.log 2>&1
test -r build-gdb/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r build-gdb/.failed && 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} ... "
(
	cd $IASL_DIR/source/compiler
	export PATH=$PATH:$DESTDIR$TARGETDIR/bin
	rm -f .failed
	CFLAGS="$HOSTCFLAGS"
	$MAKE CC="$CC" || touch .failed
	rm -f $DESTDIR$TARGETDIR/bin/iasl || touch .failed
	cp iasl $DESTDIR$TARGETDIR/bin || touch .failed
	if [ ! -f .failed ]; then touch .success; fi
) > $IASL_DIR/source/compiler/crossgcc-build.log 2>&1
test -r $IASL_DIR/source/compiler/.failed && printf "${RED}failed${NC}\n" || \
	     printf "${green}ok${NC}\n"
test -r $IASL_DIR/source/compiler/.failed && exit 1
fi

if [ $SAVETEMPS -eq 0 ]; then
	printf "Cleaning up... "
	rm -rf ${GMP_DIR} build-gmp
	rm -rf ${MPFR_DIR} build-mpfr
	rm -rf ${MPC_DIR} build-mpc
	rm -rf ${LIBELF_DIR} build-libelf
	rm -rf ${BINUTILS_DIR} build-binutils
	rm -rf ${GCC_DIR} build-gcc
	rm -rf ${GDB_DIR} build-gdb
	rm -rf ${EXPAT_DIR} build-expat
	rm -rf ${PYTHON_DIR} build-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"


