#!/bin/sh
# OasisVM launch script

BootClasspathParts()
{
# Note: order matters here

cat << DATA
	$VMHOME/lib/rt.jar
	$HYBOOTJAR/luni.jar
	$HYBOOTJAR/nio.jar
	$HYBOOTJAR/nio_char.jar
	$HYBOOTJAR/security.jar
	$HYBOOTJAR/archive.jar
	$HYBOOTJAR/logging.jar
	$HYBOOTJAR/text.jar
	$HYBOOTJAR/icu4j_3.8/icu4j-3_8.jar
	$HYBOOTJAR/icu4j_3.8/icu4j-charsets-3_8.jar
	$HYJRE/lib/ext/icu4jni.jar
	$HYBOOTJAR/sql.jar
	$HYBOOTJAR/regex.jar
	$HYBOOTJAR/math.jar
	$HYBOOTJAR/auth.jar
	$HYBOOTJAR/crypto.jar
	$HYBOOTJAR/x-net.jar
	$HYBOOTJAR/annotation.jar
	$HYJRE/lib/ext/bcprov.jar
DATA
}

GetClasspath()
{
	BCP=
	for i in $(BootClasspathParts) ; do
		if [ "$BCP" == "" ] ; then
			BCP=$i
		else
			BCP="$BCP:$i"
		fi
	done
	echo $BCP
}

DEFAULT_MEM="10M"

VMHOME="${VMHOME:-/usr/lib/jvm/java-1.5-palm}"
HYJRE="${VMHOME}/jre"
HYBOOTJAR="${HYJRE}/lib/boot"
JAVA="${JAVA:-$VMHOME/bin/java}"
MEM="${MEM:-$DEFAULT_MEM}"

BOOTCLASSPATH=$(GetClasspath)

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VMHOME/bin:$HYJRE/bin:/usr/lib"

PREFIX="exec"
ARGS=""

saveconsole () {
	$@ 2>&1 | tee -a "/var/log/vm.$$.`date +%h%k-%R%p`.log"
}

PRELOAD="$LD_PRELOAD"

MALLOC="jemalloc"

# parse arguments
for arg in $@; do
	if [ "$arg" == "-gdbserver" ]; then
		PREFIX="gdbserver host:5555"
	elif [ "$arg" == "-gdb" ]; then
		PREFIX="gdb --args"
	elif [ "$arg" == "-strace" ]; then
		PREFIX="strace"
	elif [ "$arg" == "-malloc" ]; then
		MALLOC="malloc"
	elif [ "$arg" == "-jemalloc" ]; then
		MALLOC="jemalloc"
	elif [ "$arg" == "-saveconsole" ]; then
		PREFIX="saveconsole"
	elif [ "$arg" == "-oomdump" ]; then
		ARGS="$ARGS -XX:+HeapDumpOnOutOfMemoryError"
	elif [ "$arg" == "-debug" ] || [ "$arg" == "-debugsuspend" ]; then	
		DEBUGARGS="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=0.0.0.0:8000"
	elif [ "$arg" == "-debugnosuspend" ]; then
		DEBUGARGS="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8000"
	else
		# all other arguments get copied to the command line
		ARGS="$ARGS $arg"
	fi
done

if [ "$MALLOC" == "jemalloc" ]; then
	PRELOAD="$PRELOAD:/usr/lib/libjemalloc_mt.so"
fi

VMARGS="-Xexact -m $MEM \
	-Djava.library.path=$VMHOME/bin:$HYJRE/bin:/usr/lib \
	-Dvm.boot.library.path=$HYJRE/bin \
	-bootclasspath $BOOTCLASSPATH $DEBUGARGS -Djava.home=$HYJRE \
	-Djava.security.properties=$HYJRE/lib/security/java.security \
	-Xstackdump=/var/log/stackdump.txt \
	${JAVA_OPTS:-}"

LD_PRELOAD="$PRELOAD" $PREFIX $JAVA $VMARGS $ARGS
