#!/bin/bash -x

cd examples/omnetpp/cpu2006-redhat-ia32

# Contains the optimization flags.
flags=''

# The index of the parameter.
i=1

# Indicate whether it is parsing the gcc param.
in_gcc_param=false

for parameter in "$@"
  do
    #  The last parameter is the file name.
    if [ "$i" == "$#" ]; then
      file=$parameter
      break
    fi

    # The param is not a flag, it combines with the flag that comes right after.
    # For example, --param max-inline-insns-single 
    if [ "$parameter" == "-param" ]; then
      in_gcc_param=true
      flags+=-$parameter' '
      let i++
      continue
    fi

    # In in_gcc_param section, this flag follows the key word '--param'.
    if [ $in_gcc_param == true ]; then
      flags+=$parameter' '
      let i++
      in_gcc_param=false
      continue
    fi

    # Normal flags.
    flags+=-$parameter' '
    let i++
  done

# Change the configuration file.
content=$(sed s/amd64-m64-gcc41-kk/test$file/ config/linux64-amd64-pgi.cfg)
echo "$content" | sed s/-O2/-O1\ "$flags"/ >config/linux64-amd64-pgi$file.cfg
. ./shrc
/usr/bin/time -o temp$file runspec --config linux64-amd64-pgi$file -D --action=build  471.omnetpp

state=$?

outfile="./benchspec/CPU2006/471.omnetpp/run/build_base_test$file.0000/omnetpp"

if [ $state -eq 0 ];then
  user_time=$(cat build_timer$file | grep "user" | cut -d "u" -f 1)
  output_file="$file"

  checksum=$(readelf -x .text $outfile | md5sum | cut -d " " -f 1)
  file_size=$(ls -l $outfile | cut -d " " -f 5)
  text_section=$(readelf -SW $outfile | grep ".text")
  size_hex=$(echo $text_section | sed "s/\s\{1,\}/\ /g" | cut -d ' ' -f 6)
  size=$(echo $size_hex | ( echo "ibase=16" ; tr '[:lower:]' '[:upper:]') | bc)

  echo $checksum $user_time $output_file $file_size $size
else
  echo "error" "error" "error" "error" "error"
fi

return $state