#!/bin/sh
  # Written by Uwe Hermann <uwe@hermann-uwe.de>, released as public domain.

#-mabi=aapcs-linux -mfloat-abi=soft -meabi=4 

  TARGET=arm-none-eabi                         # Or: TARGET=arm-none-eabi
  ##PREFIX=/usr/local/arm       # Install location of your final toolchain
  PREFIX=/usr/local/arm-none-eabi
  ROGRAM_PREFIX=arm-none-eabi-
  #PREFIX=/usr
  #ROGRAM_PREFIX=arm-linux-uclibc-
  PARALLEL="-j 2"                        # Or: PARALLEL=""


  BINUTILS=binutils-2.20.1
  GCC=gcc-4.4.3
  NEWLIB=newlib-1.18.0
  GDB=gdb-7.1

  export PATH="$PATH:$PREFIX/bin"

  mkdir build

  function binutils {
      wget -c http://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2
      tar xfvj $BINUTILS.tar.bz2
      cd build
      ../$BINUTILS/configure --target=$TARGET --prefix=$PREFIX  --program-prefix=$PROGRAM_PREFIX --enable-interwork --enable-multilib \
	  --with-gnu-as --with-gnu-ld --disable-nls
      make $PARALLEL
      make install
      cd ..
      rm -rf build/* $BINUTILS $BINUTILS.tar.bz2
}

 function gcc  {
     wget -c ftp://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.bz2
     tar xfvj $GCC.tar.bz2
     cd build
     ../$GCC/configure --target=$TARGET --prefix=$PREFIX --program-prefix=$PROGRAM_PREFIX --enable-interwork --enable-multilib \
	 --enable-languages="c" --with-newlib --without-headers --disable-shared --with-gnu-as --with-gnu-ld
     make $PARALLEL all-gcc
     make install-gcc
     cd ..
     rm -rf build/* $GCC.tar.bz2
}

 function newlib  {
     wget -c ftp://sources.redhat.com/pub/newlib/$NEWLIB.tar.gz
     tar xfvz $NEWLIB.tar.gz
     cd build
     ../$NEWLIB/configure --target=$TARGET --prefix=$PREFIX --program-prefix=$PROGRAM_PREFIX --enable-interwork --enable-multilib \
	 --with-gnu-as --with-gnu-ld --disable-nls
                      --enable-languages="c" \
                      --with-newlib \
                      --without-headers \
                      --disable-shared \
                      --disable-werror 
     make $PARALLEL
     make install
     cd ..
     rm -rf build/* $NEWLIB $NEWLIB.tar.gz
}

 function gcc_again  {
  # Yes, you need to build gcc again!
     cd build
     ../$GCC/configure --target=$TARGET --prefix=$PREFIX --program-prefix=$PROGRAM_PREFIX --enable-interwork --enable-multilib \
	 --enable-languages="c,c++" --with-newlib --disable-shared --with-gnu-as --with-gnu-ld
     make $PARALLEL
     make install
     cd ..
     rm -rf build/* $GCC
}

 function gdb  {
     wget -c ftp://ftp.gnu.org/gnu/gdb/$GDB.tar.bz2
     tar xfvj $GDB.tar.bz2
     cd build
     ../$GDB/configure --target=$TARGET --prefix=$PREFIX --program-prefix=$PROGRAM_PREFIX --enable-interwork --enable-multilib
     make $PARALLEL
     make install
     cd ..
     rm -rf build $GDB $GDB.tar.bz2
}


binutils
gcc
newlib
gcc_again
#gdb