#!/usr/bin/env bash

OS=`uname`
HOSTARCH=`uname -m`
ARCHSUFFIX=.xz
PARALLEL=-j8
GNU_FTP=ftp://ftp.gnu.org/gnu

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

if [ "$OS" = "Darwin" ]; then
	export CPPFLAGS=-I/opt/local/include
	export LDFLAGS=-L/opt/local/lib
fi
if [ "$OS" = "FreeBSD" ]; then
	export CPPFLAGS=-I/usr/local/include
	export LDFLAGS=-L/usr/local/lib
fi
MAKE=make
if [ "$OS" = "FreeBSD" ]; then
	MAKE=gmake
fi
if [ "$HOSTARCH" = "amd64" ]; then
	HOSTARCH=x86_64
fi

# load GCCVER and BINVER
. toolvers

if [ "$FETCH" = "1" ]; then
    ARCHSUFFIX=.bz2
    wget -N $GNU_FTP/binutils/binutils-$BINVER.tar$ARCHSUFFIX
    wget -N $GNU_FTP/gcc/gcc-$GCCVER/gcc-$GCCVER.tar$ARCHSUFFIX
    wget -N $GNU_FTP/gdb/gdb-$GDBVER.tar$ARCHSUFFIX
fi

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
if [ ! -d gdb-$GDBVER.patched ]; then
	echo extracting gdb-$GDBVER.tar${ARCHSUFFIX}
	rm -rf gdb-$GDBVER
	tar xf gdb-$GDBVER.tar${ARCHSUFFIX} || exit 1
	echo patching gdb
	patch -d gdb-$GDBVER -p1 < gdb-patch.txt || exit 1

	rm -rf gdb-$GDBVER.patched
	mv gdb-$GDBVER gdb-$GDBVER.patched
fi

for ARCH in $ARCHES; do 
	if [ "$ARCH" == "arm" ]; then
		TARGET=arm-eabi
	else
		TARGET=$ARCH-elf
	fi

	INSTALLPATH=`pwd`/$TARGET-$GCCVER-$OS-$HOSTARCH
	BINBUILDPATH=build-binutils-$BINVER-$ARCH-$OS-$HOSTARCH
	GCCBUILDPATH=build-gcc-$GCCVER-$ARCH-$OS-$HOSTARCH
	GDBBUILDPATH=build-gdb-$GDBVER-$ARCH-$OS-$HOSTARCH
	export PATH=$INSTALLPATH/bin:$PATH

	if [ ! -f $BINBUILDPATH/built.txt ]; then
		mkdir -p $BINBUILDPATH
		pushd $BINBUILDPATH &&
		../binutils-$BINVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --disable-werror &&
		#$MAKE configure-host &&
		$MAKE $PARALLEL &&
		$MAKE install &&
		touch built.txt || exit 1
		popd
	fi

	if [ ! -f $GCCBUILDPATH/built.txt ]; then
		ARCH_OPTIONS=
		if [ $ARCH == "arm" ]; then
			ARCH_OPTIONS="--with-cpu=arm926ej-s --with-fpu=vfp"
		fi
		mkdir -p $GCCBUILDPATH
		pushd $GCCBUILDPATH &&
		../gcc-$GCCVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --enable-languages=c,c++ $ARCH_OPTIONS --disable-werror &&
		$MAKE all-gcc $PARALLEL &&
		$MAKE all-target-libgcc $PARALLEL &&
		$MAKE install-gcc &&
		$MAKE install-target-libgcc &&
		touch built.txt || exit 1
		popd
	fi

	if [ ! -f $GDBBUILDPATH/built.txt ]; then
		mkdir -p $GDBBUILDPATH
		pushd $GDBBUILDPATH &&
		../gdb-$GDBVER.patched/configure --target=$TARGET --prefix=$INSTALLPATH --disable-werror &&
		make $PARALLEL &&
		make install &&
		touch built.txt || exit 1
		popd
	fi
done
