
#!/bin/bash

# {YES|NO}
UNINSTALL_MACHINES="NO"

# # {YES|NO}
INSTALL_SPEC_BENCHMARK="NO"
INSTALL_DACAPO_BENCHMARK="NO"
INSTALLPACKAGES="NO"

RUNSPECBENCHMARK="YES"
RUNDACAPOBENCHMARK="YES"

# If already installed
SPECBENCHLOCATION=/usr/share/SPECjvm2008.jar
SPECBENCHARKDIR=/usr/share/

SPECRESULTDIR=SPEC
DACAPORESULTDIR=DACAPO



isPackageInstalled(){
	packageName=$1;
	if dpkg -s $packageName 2>1 >/dev/null; then return 0; else return 1; fi
}

installBenchmarks() {
  if [ $INSTALL_SPEC_BENCHMARK == "YES" ]; then
	  echo "Installing Spec 2008 benchmark"
	  echo "##############################"
	  echo ""

	  echo "Please, install it to /usr/share..."
	  wget http://spec.it.miami.edu/downloads/osg/java/SPECjvm2008_1_01_setup.jar
	  sudo java -jar SPECjvm2008_1_01_setup.jar
	  rm   java -jar SPECjvm2008_1_01_setup.jar
	  cp /usr/share/SPECjvm2008.jar ./
	  
  fi

  if [ -f $SPECBENCHLOCATION ]; then 
	  echo "SPEC BENCHMARK FOUND...."
  else
	  echo "SPEC BENCHMARK LOCATION IS WRONG!" >&2
	  echo "PLEAS, SET UP CORRECT PATH!" >&2
	  exit
  fi


  if [ $INSTALL_DACAPO_BENCHMARK == "YES" ]; then

    echo "Installing DACAPO BENCHMARK..."
    echo "##############################"
    echo ""

    wget http://sourceforge.net/project/showfiles.php?group_id=172498
  fi;
}

# Opnen JDK specific configuration
runBenchmark() {
  VMNAME=$1

  if [ $# -lt 1 ]; then
    echo "need vm name parameter";
    exit;
  fi;

  echo ""
  echo "Testing $VMNAME"
  echo "====================================="

  if [ $RUNSPECBENCHMARK == "YES" ] ; then
  echo -n "SPEC BENCHMARK ( on $VMNAME )..."
 
  if $JAVACOMMAND  -jar $SPECBENCHLOCATION -Dspecjvm.home.dir=$SPECBENCHARKDIR -wt 5s -it 5s -bt 2 compress > /dev/null; then
	  echo "[ INSTALLED ]"
	  echo -en "Creating dir for results...("$SPECRESULTDIR/$VMNAME").."
	  if [ ! -d $SPECRESULTDIR ]; then
	      mkdir -p $SPECRESULTDIR
	      if mkdir -p "$SPECRESULTDIR/$VMNAME"; then 
		  echo " [ OK ]";
	      else
		  echo " [ FAIL ]";
	      fi
	  else
	      echo " [ FAIL ]";
	  fi

	  echo "Running SPEC benchmark (Can take a while):"
	  touch "$SPECRESULTDIR/$VMNAME/output.txt"
	  touch "$SPECRESULTDIR/$VMNAME/errors.txt"
	  $JAVACOMMAND -jar $SPECBENCHLOCATION -Dspecjvm.home.dir=$SPECBENCHARKDIR -Dspecjvm.result.dir=`pwd`"/$SPECRESULTDIR/$VMNAME" 1>"$SPECRESULTDIR/$VMNAME/output.txt"2>"$SPECRESULTDIR/$VMNAME/errors.txt"
  else
	  echo "[ NOT INSTALLED ]"
  fi
  fi

  if [ $RUNDACAPOBENCHMARK == "YES" ] ; then
  echo -n "DACAPO BENCHMARK ( on $VMNAME )..."
  
  if $JAVACOMMAND -jar dacapo-9.12-bach.jar avrora 1>/dev/null; then
	  echo "[ INSTALLED ]"

	  echo -en "creating dir for results...($DACAPORESULTDIR/$VMNAME).."
	  if mkdir -p "$DACAPORESULTDIR/$VMNAME"; then
	      echo " [ OK ]";
	      touch "$DACAPORESULTDIR/$VMNAME/output.txt"
	      touch "$DACAPORESULTDIR/$VMNAME/errors.txt"
	  else
	      echo " [ FAIL ]";
	  fi

	  echo "Running DACAPO benchmark (Can take a while):"
	  $JAVACOMMAND -jar dacapo-9.12-bach.jar -l |tr ' ' '\n' | xargs -I% -n1 $JAVACOMMAND -jar dacapo-9.12-bach.jar %  >> "$DACAPORESULTDIR/$VMNAME/output.txt" 2>> "$DACAPORESULTDIR/$VMNAME/errors.txt" 
	  
  else
	  echo "[ NOT INSTALLED ]"
  fi
  fi
}


#####################
###  MAIN
#####################

ARCH=`uname -p`


installBenchmarks

if [ $INSTALLPACKAGES == "YES" ]; then
  # openJDK, zero, cacao 
  sudo add-apt-repository 'deb http://ubuntu.mirror.cambrium.nl/ubuntu/ lucid main universe' 
  sudo apt-get install openjdk-7-jre openjdk-6-jre icedtea-6-jre-cacao openjdk-6-jre-zero openjdk-7-jre-zero
  
  #avian
  sudo dpkg -i jvm-7-avian-jre*
  
  # Oracle Embedded Java SE
  tar xzf ./ejre*
  if [ ! -d /opt/oracle ]; then
    sudo mkdir /opt/oracle
  fi
  sudo cp  -r ejre* /opt/oracle/ejre-7
  rm -rf ./ejre1.7.0_21/

  # IBM J9, v7 a v6
  sudo sh ibm-java-i386-jre-7*.bin # /opt/ibm/java-i386-70
  sudo sh ibm-java-i386-jre-6*.bin # /opt/ibm/java-i386-60
fi




# V 6 machines

JAVACOMMANDBASE=`dpkg-query -L openjdk-6-jre | grep bin$ | head -n 1`/java
JAVACOMMAND=$JAVACOMMANDBASE
runBenchmark OpenJDK-6-$ARCH-openjdk-VM

JAVACOMMAND="$JAVACOMMANDBASE -jamvm"
runBenchmark OpenJDK-6-$ARCH-jamvm-VM

JAVACOMMAND="$JAVACOMMANDBASE -zero"
runBenchmark OpenJDK-6-$ARCH-jamvm-VM

JAVACOMMAND="$JAVACOMMANDBASE -cacao"
runBenchmark OpenJDK-6-$ARCH-cacao-VM

JAVACOMMAND="$JAVACOMMANDBASE -zero"
runBenchmark OpenJDK-6-$ARCH-zero-VM

JAVACOMMAND="$JAVACOMMANDBASE -hotspot"
runBenchmark OpenJDK-6-$ARCH-hotspot-VM


JAVACOMMAND=/opt/ibm/java-i386-60/jre/bin/java
runBenchmark IBM-J9-v6-$ARCH


# V 7 machines
# E.g., avian is not available for java 6
JAVACOMMANDBASE=`dpkg-query -L openjdk-7-jre | grep bin$ | head -n 1`/java
JAVACOMMAND=$JAVACOMMANDBASE
runBenchmark OpenJDK-7-$ARCH-openjdk-VM

JAVACOMMAND="$JAVACOMMANDBASE -jamvm"
runBenchmark OpenJDK-7-$ARCH-jamvm-VM

JAVACOMMAND="$JAVACOMMANDBASE -cacao"
runBenchmark OpenJDK-7-$ARCH-cacao-VM

JAVACOMMAND="$JAVACOMMANDBASE -zero"
runBenchmark OpenJDK-7-$ARCH-zero-VM

JAVACOMMAND="$JAVACOMMANDBASE -hotspot"
runBenchmark OpenJDK-7-$ARCH-hotsot-VM

JAVACOMMAND="$JAVACOMMANDBASE -avian"
runBenchmark OpenJDK-7-$ARCH-avian-VM

JAVACOMMAND="$JAVACOMMANDBASE -hotspot"
runBenchmark OpenJDK-7-$ARCH-hotspot-VM

JAVACOMMAND=/opt/ibm/java-i386-70/jre/bin/java
runBenchmark IBM-J9-v7-$ARCH

JAVACOMMAND=/opt/oracle/ejre-7/bin/java
runBenchmark Oracle-embedded-SE-v7-$ARCH

if [ $UNINSTALL_MACHINES == "YES" ]; then
     sudo apt-get -qq --force-yes  remove openjdk-6-jre icedtea-6-jre-cacao openjdk-6-jre-zero openjdk-7-jre-zero jvm-7-avian-jre
     sudo /opt/ibm/java-i386-60/_uninstall/uninstall
     sudo /opt/ibm/java-i386-70/_uninstall/uninstall
fi