#!/usr/bin/env bash

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

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


if [ "$OS" = "Linux" ]; then
    COUNT=`grep processor /proc/cpuinfo | wc -l`
    PARALLEL=-j`expr $COUNT + $COUNT`
fi
if [ "$OS" = "Darwin" ]; then
    export CPPFLAGS=-I/opt/local/include
    export LDFLAGS=-L/opt/local/lib
    export CXXFLAGS="-fbracket-depth=1024" 
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

export CC="cc"
export CXX="c++"

if [ "$CCACHE" = "1" ]; then
export CC="ccache $CC"
export CXX="ccache $CXX"
fi

# load GCCVER and BINVER
. toolvers

if [ -z "$FETCH" ]; then
    FETCH=1
fi
if [ "$FETCH" = "1" ]; then
    if [ ! -f binutils-$BINVER.tar.bz2 ]; then
        wget -P $ARCHIVES -N $GNU_FTP/binutils/binutils-$BINVER.tar.bz2
    fi
    if [ ! -f gcc-$GCCVER.tar.bz2 ]; then
        wget -P $ARCHIVES -N $GNU_FTP/gcc/gcc-$GCCVER/gcc-$GCCVER.tar.bz2
    fi
    if [ ! -f gdb-$GDBVER.tar.xz ]; then
        wget -P $ARCHIVES -N $GNU_FTP/gdb/gdb-$GDBVER.tar.xz
    fi
    if [ ! -f mpfr-$MPFRVER.tar.bz2 ]; then
        wget -P $ARCHIVES -N $GNU_FTP/mpfr/mpfr-$MPFRVER.tar.bz2
    fi
    if [ ! -f mpc-$MPCVER.tar.gz ]; then
        wget -P $ARCHIVES -N $GNU_FTP/mpc/mpc-$MPCVER.tar.gz
    fi
    if [ ! -f gmp-$GMPVER.tar.bz2 ]; then
        wget -P $ARCHIVES -N $GNU_FTP/gmp/gmp-$GMPVER.tar.bz2
    fi
fi

function extract-tool()
{
    #echo "extract-tool " $1 $2 $3 $4

    TARFILE=${1}-${2}.tar$3
    TARGETDIR=${1}-${2}
    if [ -f ${TARGETDIR}/.extracted ]; then
        echo "$TARFILE already extracted into $TARGETDIR, skipping"
        return 0
    fi
    if [ ! -f $ARCHIVES/$TARFILE ]; then
        echo "error, missing $TARFILE"
        exit 1
    fi

    echo extracting $TARFILE
    rm -rf $TARGETDIR
    tar xf $ARCHIVES/$TARFILE || exit 1

    if [ ! -z "$4" ]; then
        echo patching $1
        patch -d $TARGETDIR -p1 < $4 || exit 1
    fi

    touch $TARGETDIR/.extracted || exit 1
}

if [ ! -f .extracted-stamp ]; then
    extract-tool binutils $BINVER .bz2 binutils-patch.txt
    extract-tool gcc $GCCVER .bz2 gcc-patch.txt
    extract-tool gdb $GDBVER .xz gdb-patch.txt
    extract-tool gmp $GMPVER .bz2
    extract-tool mpc $MPCVER .gz
    extract-tool mpfr $MPFRVER .bz2
    touch .extracted-stamp
fi

# link the last three libs into gcc
pushd gcc-$GCCVER
ln -sf ../gmp-$GMPVER gmp
ln -sf ../mpc-$MPCVER mpc
ln -sf ../mpfr-$MPFRVER mpfr
popd

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/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/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/configure --target=$TARGET --prefix=$INSTALLPATH --disable-werror &&
        make $PARALLEL &&
        make install &&
        touch built.txt || exit 1
        popd
    fi
done
