#!/bin/bash

OS=`uname`
HOSTARCH=`uname -m`
ARCHSUFFIX=.bz2

if [ "x$ARCHES" = "x" ]; then
	echo need to specify architectures to build in the ARCHES environment variable
	echo ie. ARCHES=\"arm sh\"
	exit 1
fi

# load GCCVER and BINVER
. toolvers

if [ ! -d binutils-$BINVER.patched ]; then
	echo extracting binutils-$BINVER.tar${ARCHSUFFIX}
	rm -rf binutils-$BINVER
	tar xf binutils-$BINVER.tar${ARCHSUFFIX} || exit 1
	echo patching binutils
	patch -d binutils-$BINVER -p1 < binutils-patch.txt || exit 1
	rm -rf binutils-$BINVER.patched
	mv binutils-$BINVER binutils-$BINVER.patched
fi
if [ ! -d gcc-$GCCVER.patched ]; then
	echo extracting gcc-$GCCVER.tar${ARCHSUFFIX}
	rm -rf gcc-$GCCVER
	tar xf gcc-$GCCVER.tar${ARCHSUFFIX} || exit 1
	echo patching gcc
	patch -d gcc-$GCCVER -p1 < gcc-patch.txt || exit 1
	rm -rf gcc-$GCCVER.patched
	mv gcc-$GCCVER gcc-$GCCVER.patched
fi

for ARCH in $ARCHES; do 
#	INSTALLPATH=~/toolchains/$ARCH-elf-$GCCVER
	INSTALLPATH=`pwd`/$ARCH-elf-$GCCVER-$OS-$HOSTARCH
	BINBUILDPATH=build-binutils-$BINVER-$ARCH-$OS-$HOSTARCH
	GCCBUILDPATH=build-gcc-$GCCVER-$ARCH-$OS-$HOSTARCH
	export PATH=$INSTALLPATH/bin:$PATH

	if [ ! -f $BINBUILDPATH/built.txt ]; then
		(mkdir -p $BINBUILDPATH &&
		cd $BINBUILDPATH &&
		../binutils-$BINVER.patched/configure --target=$ARCH-elf --prefix=$INSTALLPATH &&
		gmake configure-host &&
		gmake -j4 &&
		gmake install &&
		touch built.txt)
	fi

	if [ ! -f $GCCBUILDPATH/built.txt ]; then
		(mkdir -p $GCCBUILDPATH &&
		cd $GCCBUILDPATH &&
		../gcc-$GCCVER.patched/configure --target=$ARCH-elf --prefix=$INSTALLPATH --enable-languages=c,c++ --disable-libssp &&
		gmake configure-host &&
		gmake -j4 &&
		gmake install &&
		touch built.txt)
	fi
done
