#!/bin/sh
source ./environment.sh
source ./version.sh

if [ "x$PREFIX" = "x" ]
then
    PREFIX=$TOPDIR/$(date +%F-%H-%M-%S)
fi

STEPS=$TOPDIR/steps
mkdir -p $STEPS
mkdir -p $PREFIX
CONFIG_FLAG="--prefix=$PREFIX --target=lm32-elf"
CONFIG_FLAG_LIB="--prefix=$PREFIX --host=lm32-elf"

if [ ! -f $STEPS/gdb-$GDB_V ]
then
    echo "Compile GDB $GDB_V"
    sleep 1
    cd $PACKAGES
    mkdir -p build-gdb-$GDB_V
    cd build-gdb-$GDB_V
    ../gdb-$GDB_V/configure $CONFIG_FLAG
    make -j20 && make install && touch $STEPS/gdb-$GDB_V
fi

if [ ! -f $STEPS/binutils-$BINUTILS_V ]
then
    echo "Compile binutils $BINUTILS_V"
    sleep 1
    cd $PACKAGES
    mkdir -p build-binutils-$BINUTILS_V
    cd build-binutils-$BINUTILS_V
    ../binutils-$BINUTILS_V/configure $CONFIG_FLAG
    make -j20 && make check && make install && touch $STEPS/binutils-$BINUTILS_V
fi


if [ ! -f $STEPS/gmp-$GMP_V ]
then
    echo "Compile GMP"
    sleep 1
    cd $PACKAGES
    rm -rf build-gmp-$GMP_V
    mkdir -p build-gmp-$GMP_V
    cd build-gmp-$GMP_V
    ../gmp-$GMP_V/configure $CONFIG_FLAG_LIB
    make -j20 && make check && make install
fi


if [ ! -f $STEPS/mpfr-$MPFR_V ]
then
    echo "Compile MPFR"
    sleep 1
    cd $PACKAGES
    rm -rf build-mpfr-$MPFR_V
    mkdir -p build-mpfr-$MPFR_V
    cd build-mpfr-$MPFR_V
    ../mpfr-$MPFR_V/configure $CONFIG_FLAG_LIB --with-gmp=$PREFIX
    make -j20 && make check && make install
fi


if [ ! -f $STEPS/mpc-$MPC_V ]
then
    echo "Compile MPC"
    sleep 1
    cd $PACKAGES
    rm -rf build-mpc-$MPC_V
    mkdir -p build-mpc-$MPC_V
    cd build-mpc-$MPC_V
    ../mpc-$MPC_V/configure $CONFIG_FLAG_LIB --with-gmp=$PREFIX --with-mpfr=$PREFIX
    make -j20 && make check && make install && touch $STEPS/mpc-$MPC_V && touch $STEPS/mpfr-$MPFR_V && touch $STEPS/gmp-$GMP_V
fi

if [ ! -f $STEPS/mpc-$MPC_V ]
then
    echo "Something wrong"
    exit
fi


if [ ! -f $STEPS/gcc-$GCC_V ]
then
    echo "Compile gcc $GCC_V"
    sleep 1
    cd $PACKAGES
    mkdir -p build-gcc-$GCC_V
    cd build-gcc-$GCC_V
    ../gcc-$GCC_V/configure $CONFIG_FLAG \
	    --enable-languages=c \
	    --enable-host-shared \
	    --with-gmp=$PREFIX \
	    --with-mpfr=$PREFIX \
	    --with-mpc=$PREFIX \
	    --with-gmp=$PREFIX \
	    --with-mpfr=$PREFIX \
	    --with-mpc=$PREFIX

    make -j20 all-gcc && make install-gcc && touch $STEPS/gcc-$GCC_V
fi

if [ ! -f $STEPS/newlib-$NEWLIB_V ]
then
    echo "Compile newlib"
    sleep 1
    cd $PACKAGES
    rm -rf build-newlib-$NEWLIB_V
    mkdir -p build-newlib-$NEWLIB_V
    cd build-newlib-$NEWLIB_V
    # disable multithread MUST be there, otherwise it does not work
    ../newlib-$NEWLIB_V/configure $CONFIG_FLAG \
				  --with-newlib \
				  CC_FOR_TARGET=$PREFIX/bin/lm32-elf-gcc \
				  AS_FOR_TARGET=$PREFIX/bin/lm32-elf-as \
				  AR_FOR_TARGET=$PREFIX/bin/lm32-elf-ar \
				  LD_FOR_TARGET=$PREFIX/bin/lm32-elf-ld \
				  RANLIB_FOR_TARGET=$PREFIX/bin/lm32-elf-ranlib
    make -j20 && make check && make install && touch $STEPS/newlib-$NEWLIB_V
fi


if [ ! -f $STEPS/gcc-final-$GCC_V ]
then
    echo "Compile final gcc $GCC_V"
    sleep 1
    cd $PACKAGES
    mkdir -p build-gcc-$GCC_V
    cd build-gcc-$GCC_V
    ../gcc-$GCC_V/configure $CONFIG_FLAG \
	    --enable-languages=c \
	    --enable-host-shared \
	    --with-gmp=$PREFIX \
	    --with-mpfr=$PREFIX \
	    --with-mpc=$PREFIX \
	    --with-gmp=$PREFIX \
	    --with-mpfr=$PREFIX \
	    --with-mpc=$PREFIX \
	    --with-newlib

    make -j20 all && make install && touch $STEPS/gcc-final-$GCC_V
fi
