#!/bin/sh

PARFLAGS="-j 4"

BINUTILS="2.19"
GCC="4.3.2"
GDB="6.8"
NEWLIB="1.17.0"
GMP="4.2.4"
MPFR="2.3.2"

if [ "${1}" = "" ]; then
	echo "Syntax: ${0} /path/to/basedir/for/gcc"
	exit 1
fi

set -e -x

prefix="${1}"

mkdir -p "${prefix}/src"

cd "${prefix}/src"

test -e "binutils-${BINUTILS}.tar.bz2" || wget "ftp://gcc.gnu.org/pub/binutils/releases/binutils-${BINUTILS}.tar.bz2"
test -e "gcc-core-${GCC}.tar.bz2" || wget "ftp://gcc.gnu.org/pub/gcc/releases/gcc-${GCC}/gcc-core-${GCC}.tar.bz2"
test -e "gcc-g++-${GCC}.tar.bz2" || wget "ftp://gcc.gnu.org/pub/gcc/releases/gcc-${GCC}/gcc-g++-${GCC}.tar.bz2"
test -e "gdb-${GDB}.tar.bz2" || wget "ftp://sourceware.org/pub/gdb/releases/gdb-${GDB}.tar.bz2"
test -e "newlib-${NEWLIB}.tar.gz" || wget "ftp://sources.redhat.com/pub/newlib/newlib-${NEWLIB}.tar.gz"
test -e "gmp-${GMP}.tar.bz2" || wget "http://ftp.sunet.se/pub/gnu/gmp/gmp-${GMP}.tar.bz2"
test -e "mpfr-${MPFR}.tar.bz2" || wget "http://www.mpfr.org/mpfr-current/mpfr-${MPFR}.tar.bz2"

#Cleanup from previous attempt...
rm -rf "binutils-${BINUTILS}" "gcc-${GCC}" "gdb-${GDB}" "newlib-${NEWLIB}" "gmp-${GMP}" "mpfr-${MPFR}"
#Extract everything
tar xjf "binutils-${BINUTILS}.tar.bz2"
tar xjf "gcc-core-${GCC}.tar.bz2"
tar xjf "gcc-g++-${GCC}.tar.bz2"
tar xjf "gdb-${GDB}.tar.bz2"
tar xzf "newlib-${NEWLIB}.tar.gz"
tar xjf "gmp-${GMP}.tar.bz2"
tar xjf "mpfr-${MPFR}.tar.bz2"

mkdir "${prefix}/src/binutils-${BINUTILS}/build"
mkdir "${prefix}/src/gcc-${GCC}/build"
mkdir "${prefix}/src/gdb-${GDB}/build"
mkdir "${prefix}/src/newlib-${NEWLIB}/build"

PATH="${prefix}/bin:${PATH}"
export PATH

#GMP
ln -s "${prefix}/src/gmp-${GMP}" "${prefix}/src/gcc-${GCC}/gmp"

#MPFR
ln -s "${prefix}/src/mpfr-${MPFR}" "${prefix}/src/gcc-${GCC}/mpfr"

#Binutils
cd "${prefix}/src/binutils-${BINUTILS}/build"
../configure --target=arm-elf --prefix="${prefix}" --enable-interwork --enable-multilib --disable-nls --disable-shared --disable-threads --with-gcc --with-gnu-as --with-gnu-ld
make ${PARFLAGS}
make install

#GCC (1)
cd "${prefix}/src/gcc-${GCC}/build"
mkdir -p libiberty libcpp fixincludes
../configure --target=arm-elf --prefix="${prefix}" --disable-nls --disable-shared --disable-threads --with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 --enable-languages=c,c++ --enable-interwork --enable-multilib --with-newlib --with-headers=../../newlib-"${NEWLIB}"/newlib/libc/include --disable-libssp --disable-libstdcxx-pch --disable-libmudflap --disable-libgomp -v
make ${PARFLAGS} all-gcc
make install-gcc

#Newlib
cd "${prefix}/src/newlib-${NEWLIB}/build"
../configure --target=arm-elf --prefix="${prefix}" --enable-interwork --enable-multilib
make ${PARFLAGS}
make install

#GCC (2)
cd "${prefix}/src/gcc-${GCC}/build"
make ${PARFLAGS}
make install

#GDB
cd "${prefix}/src/gdb-${GDB}/build"
../configure --target=arm-elf --prefix="${prefix}" --disable-nls
make ${PARFLAGS}
make install

cd "${prefix}/src"
rm -rf "binutils-${BINUTILS}" "gcc-${GCC}" "gdb-${GDB}" "newlib-${NEWLIB}" "gmp-${GMP}" "mpfr-${MPFR}"

set +x
echo "Done"
