#!/bin/sh

TARGET=lm32-elf
PROGPREFIX=lm32-none-embed-
RELDIR=~/lm32bisect/install
GCCSRC=~/lm32bisect/gcc
TESTSRC=~/lm32bisect/test/test.i


#This fixes a bug in wide-int.h in recent compilers:
#   It replaces all definitions "template <>\n  template"    by "template"
cd $GCCSRC/gcc/
sed -i ':a;N;$!ba;s/template <>\n  template/template/g' wide-int.h

#Cleans Previous build and compiler installation dir
cd ~/lm32bisect
rm -rf build
rm -rf $RELDIR
mkdir build
mkdir $RELDIR
cd build

#Builds new Compiler
echo 
echo ----------------------------------------------------------------------
echo Making build-gcc-newlib
echo ----------------------------------------------------------------------
date
echo 
$GCCSRC/configure \
	--target=$TARGET \
	--prefix=$RELDIR \
	--program-prefix=$PROGPREFIX\
	--disable-nls \
	--disable-shared \
	--disable-threads \
	--disable-libssp \
	--disable-libquadmath \
	--disable-libgomp \
	--disable-libatomic \
	--disable-libcilkrts \
	--disable-libitm \
	--disable-libsanitizer \
	--disable-libvtv \
	--disable-libstdc++-v3 \
	--disable-libada \
	--disable-libffi \
   --disable-libgcc \
	--without-newlib \
	--without-headers \
	--enable-languages=c \
	MAKEINFO=missing; \
make; \
make install;

#Restores gcc/wide-int.h (this is needed if running git bissect)
cd $GCCSRC
git restore gcc/wide-int.h


# Runs Testcase 
if test -f $RELDIR/bin/lm32-none-embed-gcc; then  
  cd ~/lm32bisect 
  $RELDIR/bin/lm32-none-embed-gcc -O2 -S -fomit-frame-pointer $TESTSRC;
  var=t_$(date +"%Y-%m-%d_%H-%MS")
  mkdir $var
  $RELDIR/bin/lm32-none-embed-gcc -v 2> $var/gcc-version.log
  cp test.* $var
  if grep -q 'lbu      r9, (r1+0)' test.s; then
    echo "SUCCESS!"
    return 0;
  else
    echo "FAIL!"
    return 1;
  fi
else
  return 1;
fi
