#!/bin/bash
# This is the script for running SPECcpu
###SHELLPACK preamble speccpu-bench 1.2

SPECCPU_DATA_SIZE=ref
SPECCPU_ITERATIONS=3
SPECCPU_TESTS=all

install-depends dmidecode gcc gcc-c++ gcc-fortran

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
###SHELLPACK parseargParam --input-data-size	SPECCPU_DATA_SIZE
###SHELLPACK parseargParam --iterations		SPECCPU_ITERATIONS
###SHELLPACK parseargParam --tests		SPECCPU_TESTS
###SHELLPACK parseargParam --pagesize		SPECCPU_PAGESIZE
###SHELLPACK parseargEnd
###SHELLPACK monitor_hooks

# Detect bitness
case `uname -m` in
	i?86)
		RUNBITS=32
		;;
	*)
		RUNBITS=64
		;;
esac

# Detect whether it is reportable
REPORTABLE=--reportable
if [ "$TESTS" != "all" -o "$SPECCPU_ITERATIONS" = "1" -o "$SPECCPU_DATA_SIZE" != "ref" ]; then
	REPORTABLE=--noreportable
fi

###SHELLPACK check_install_required speccpu-${VERSION}
###SHELLPACK init_complete

# Prepare system
cd $SHELLPACK_SOURCES/speccpu-${VERSION}-installed > /dev/null || die Failed to cd to speccpu
[ ! -e shrc ] && die No speccpu2006 shrc script
rm -f /tmp/OPiter.*
[ -e result ] && rm -rf result
export MALLOC_CHECK_=0
GENSPECSH="generate-speccpu.sh --bitness ${RUNBITS}"

# Generate SPEC configurations
. shrc
HLINK=--hugepages-newrelink

mkdir -p config
$GENSPECSH > config/gen-m${RUNBITS}base.cfg || die Failed to generate base spec config file
$GENSPECSH > config/gen-m${RUNBITS}default.cfg || die Failed to generate default spec config file
$GENSPECSH > config/gen-m${RUNBITS}transhuge || die Failed to generate transhuge spec config file
$GENSPECSH --hugepages-heaponly > config/gen-m${RUNBITS}huge-heap.cfg || die Failed to generate huge-heap spec config file
$GENSPECSH $HLINK > config/gen-m${RUNBITS}huge-all.cfg || die Failed to generate huge-all spec config file
cp config/gen-m${RUNBITS}base.cfg config/gen-m${RUNBITS}huge-*.cfg $LOGDIR_RESULTS/

monitor_pre_hook $LOGDIR_RESULTS $P
$MMTESTS_HUGECTL runspec -c gen-m${RUNBITS}${SPECCPU_PAGESIZE}.cfg \
	$REPORTABLE \
	--tune base \
	--size $SPECCPU_DATA_SIZE \
	--iterations $SPECCPU_ITERATIONS \
	$SPECCPU_TESTS
RETVAL=$?
monitor_post_hook $LOGDIR_RESULTS $P
rm -rf /tmp/OPiter*
mv result/* $LOGDIR_RESULTS/
gzip $LOGDIR_RESULTS/*.log

exit $RETVAL
