#!/bin/bash printhelp() { echo -robustroot set up the ROBUSTROOT to directory other than default one echo -dsm distributed shared memory echo -trueprob double - probabiltiy of true branch echo -mac distributed shared memory mac support echo -check generate check code echo -dmalloc link in dmalloc echo -recover compile task code echo -specdir directory echo -printflat print out flat representation echo -selfloop task - this task cannot self loop forever echo "-excprefetch methoddescriptor - exclude prefetches for this method (specified as class.method)" echo -taskstate do task state analysis echo -tagstate do tag state analysis echo -scheduling do task scheduling echo -multicore generate multi-core version binary echo "-numcore set the number of cores (should be used together with -multicore), defaultly set as 1" echo "-raw generate raw version binary (should be used together with -multicore)" echo "-interrupt generate raw version binary with interruption (should be used togethere with -raw)" echo "-rawconfig config raw simulator as 4xn (should be used together with -raw)" echo -threadsimulate generate multi-thread simulate version binary echo -optional enable optional echo -debug generate debug symbols echo -prefetch do prefetch analysis echo -transstats generates transaction stats on commits and aborts echo -webinterface enable web interface echo -runtimedebug printout runtime debug messages echo "-thread use support for multiple threads" echo "-optimize call gcc with -O9 (optimize)" echo "-nooptimize call gcc with -O0 (do not optimize)" echo -curdir directory echo -mainclass class with main method echo -o binary echo -nojava do not run bristlecone compiler echo -instructionfailures inject code for instructionfailures echo -profile build with profile options echo "-enable-assertions execute assert statements during compilation" echo -help help } ROBUSTROOT=~/research/Robust/src DSMRUNTIME=$ROBUSTROOT/Runtime/DSTM/interface/ REPAIRROOT=~/research/Repair/RepairCompiler/ CURDIR=`pwd` DSMFLAG=false NOJAVA=false CHECKFLAG=false RECOVERFLAG=false MULTICOREFLAG=false TRANSSTATSFLAG=false RAWFLAG=false RAWCONFIG='' INTERRUPTFLAG=false THREADSIMULATEFLAG=false; USEDMALLOC=false THREADFLAG=false SPECDIR=`pwd` SRCFILES='' EXTRAOPTIONS='' MAINFILE='a' JAVAFORWARDOPTS='' JAVAOPTS='' OPTIONALFLAG=false if [[ -z $1 ]] then printhelp exit fi while [[ -n $1 ]] do if [[ $1 = '-help' ]] then printhelp exit elif [[ $1 = '-robustroot' ]] then ROBUSTROOT="$2" shift elif [[ $1 = '-nojava' ]] then NOJAVA=true elif [[ $1 = '-o' ]] then MAINFILE="$2" shift elif [[ $1 = '-mainclass' ]] then JAVAOPTS="$JAVAOPTS -mainclass $2" shift elif [[ $1 = '-selfloop' ]] then JAVAOPTS="$JAVAOPTS -selfloop $2" shift elif [[ $1 = '-excprefetch' ]] then JAVAOPTS="$JAVAOPTS -excprefetch $2" shift elif [[ $1 = '-dsm' ]] then JAVAOPTS="$JAVAOPTS -dsm" DSMFLAG=true elif [[ $1 = '-prefetch' ]] then JAVAOPTS="$JAVAOPTS -prefetch" elif [[ $1 = '-transstats' ]] then TRANSSTATSFLAG=true elif [[ $1 = '-printflat' ]] then JAVAOPTS="$JAVAOPTS -printflat" elif [[ $1 = '-trueprob' ]] then JAVAOPTS="$JAVAOPTS -trueprob $2" shift elif [[ $1 = '-mac' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -DMAC" elif [[ $1 = '-profile' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -pg" elif [[ $1 = '-taskstate' ]] then JAVAOPTS="$JAVAOPTS -taskstate" elif [[ $1 = '-tagstate' ]] then JAVAOPTS="$JAVAOPTS -tagstate" elif [[ $1 = '-scheduling' ]] then JAVAOPTS="$JAVAOPTS -scheduling" elif [[ $1 = '-multicore' ]] then MULTICOREFLAG=true JAVAOPTS="$JAVAOPTS -multicore" elif [[ $1 = '-numcore' ]] then JAVAOPTS="$JAVAOPTS -numcore $2" shift elif [[ $1 = '-raw' ]] then RAWFLAG=true JAVAOPTS="$JAVAOPTS -raw" elif [[ $1 = '-rawconfig' ]] then RAWCONFIG="$2" shift elif [[ $1 = '-interrupt' ]] then INTERRUPTFLAG=true elif [[ $1 = '-threadsimulate' ]] then THREADSIMULATEFLAG=true elif [[ $1 = '-optional' ]] then JAVAOPTS="$JAVAOPTS -optional" OPTIONALFLAG=true elif [[ $1 = '-dmalloc' ]] then USEDMALLOC=true elif [[ $1 = '-recover' ]] then RECOVERFLAG=true JAVAOPTS="$JAVAOPTS -task" elif [[ $1 = '-webinterface' ]] then JAVAOPTS="$JAVAOPTS -webinterface" elif [[ $1 = '-instructionfailures' ]] then JAVAOPTS="$JAVAOPTS -instructionfailures" elif [[ $1 = '-check' ]] then CHECKFLAG=true JAVAOPTS="$JAVAOPTS -conscheck" elif [[ $1 = '-enable-assertions' ]] then JAVAFORWARDOPTS="$JAVAFORWARDOPTS -ea" elif [[ $1 = '-specdir' ]] then cd $2 SPECDIR=`pwd` cd $CURDIR shift elif [[ $1 = '-debug' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -g" elif [[ $1 = '-runtimedebug' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -DDEBUG" elif [[ $1 = '-nooptimize' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -O0" elif [[ $1 = '-optimize' ]] then EXTRAOPTIONS="$EXTRAOPTIONS -O9" elif [[ $1 = '-thread' ]] then JAVAOPTS="$JAVAOPTS -thread" EXTRAOPTIONS="$EXTRAOPTIONS -DTHREADS -lpthread" THREADFLAG=true elif [[ $1 = '-curdir' ]] then CURDIR=$2 shift else SRCFILES="$SRCFILES $1" fi shift done BUILDDIR="$CURDIR/tmpbuilddirectory" cd $1 cd $CURDIR shift mkdir $BUILDDIR if $CHECKFLAG #Generate structure files for repair tool then JAVAOPTS="$JAVAOPTS -struct structfile" fi # Build bristlecone/java sources if $MULTICOREFLAG then if ! java $JAVAFORWARDOPTS -classpath $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary \ $ROBUSTROOT/ClassLibrary/ -dir $BUILDDIR \ $JAVAOPTS $SRCFILES then exit $? fi else #if ! java -Xms5m -Xmx100m $JAVAFORWARDOPTS -classpath $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary \ if ! $NOJAVA then if ! java -Xms5m -Xmx100m $JAVAFORWARDOPTS -classpath $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary \ $ROBUSTROOT/ClassLibrary/ -dir $BUILDDIR -precise \ $JAVAOPTS $SRCFILES then exit $? fi fi fi # Build all of the consistency specs if $CHECKFLAG # CHECKFLAG then cd $SPECDIR mkdir $BUILDDIR/specdir cp $REPAIRROOT/MCC/CRuntime/* $BUILDDIR/specdir echo > $BUILDDIR/specs # compile specs into C code for i in * # iterate over all directories do if [[ "$i" != "CVS" ]] # CVSDIR CHECK then cd $SPECDIR/$i cat $BUILDDIR/structfile.struct $i.label > $i.struct java -cp $REPAIRROOT/:. MCC.Compiler -name $i -checkonly $i cp size.[c,h] $BUILDDIR/specdir cp $i.c $i\_aux.[c,h] $BUILDDIR/specdir echo $i >> $BUILDDIR/specs fi # CVSDIR CHECK done # iterate over all directories #compile C code cd $BUILDDIR/specdir ./buildrobust echo > $BUILDDIR/checkers.h for i in `cat $BUILDDIR/specs` do gcc -O0 -g -fbounds-check -c $i\_aux.c echo \#include \"specdir\/$i\_aux.h\" >> $BUILDDIR/checkers.h done fi # CHECKFLAG #build and link everything if $RAWFLAG then # RAWFLAG RAWDIR="$CURDIR/raw" MAKEFILE="../Makefile.raw" mkdir $RAWDIR cd $RAWDIR make clean rm ./* if $INTERRUPTFLAG then #INTERRUPT version MAKEFILE="$MAKEFILE.i" fi #INTERRUPT version MAKEFILE="$MAKEFILE.$RAWCONFIG" cp $MAKEFILE ./Makefile cp ../Runtime/*.c ./ cp ../Runtime/*.h ./ cp ../Runtime/*.S ./ cp ../Runtime/*.s ./ cp ../tmpbuilddirectory/*.c ./ cp ../tmpbuilddirectory/*.h ./ make else #!RAWFLAG cd $CURDIR INCLUDES="$INCLUDES -I$ROBUSTROOT/Runtime -I. -IRuntime/include \ -I$BUILDDIR" if $MULTICOREFLAG then RUNTIMEFILE="$ROBUSTROOT/Runtime/multicoreruntime.c $ROBUSTROOT/Runtime/multicoretask.c" else RUNTIMEFILE="$ROBUSTROOT/Runtime/runtime.c $ROBUSTROOT/Runtime/task.c" fi FILES="$RUNTIMEFILE \ $ROBUSTROOT/Runtime/file.c $ROBUSTROOT/Runtime/Queue.c \ $ROBUSTROOT/Runtime/SimpleHash.c $ROBUSTROOT/Runtime/option.c \ $ROBUSTROOT/Runtime/ObjectHash.c \ $ROBUSTROOT/Runtime/garbage.c $ROBUSTROOT/Runtime/socket.c \ $ROBUSTROOT/Runtime/math.c \ $ROBUSTROOT/Runtime/signal.c \ $ROBUSTROOT/Runtime/GenericHashtable.c $ROBUSTROOT/Runtime/object.c" if $DSMFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -lpthread -DCOMPILER -DDSTM -I$DSMRUNTIME" if $TRANSSTATSFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -lpthread -DTRANSSTATS -DCOMPILER -DDSTM -I$DSMRUNTIME" fi FILES="$FILES $DSMRUNTIME/trans.c $DSMRUNTIME/mcpileq.c $DSMRUNTIME/objstr.c $DSMRUNTIME/dstm.c $DSMRUNTIME/mlookup.c $DSMRUNTIME/clookup.c $DSMRUNTIME/llookup.c $DSMRUNTIME/threadnotify.c $DSMRUNTIME/dstmserver.c $DSMRUNTIME/plookup.c $DSMRUNTIME/ip.c $DSMRUNTIME/queue.c $DSMRUNTIME/prelookup.c $DSMRUNTIME/machinepile.c $DSMRUNTIME/localobjects.c $ROBUSTROOT/Runtime/thread.c $DSMRUNTIME/sockpool.c $DSMRUNTIME/addUdpEnhance.c" fi if $RECOVERFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -DTASK" if $MULTICOREFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -DMULTICORE" fi FILES="$FILES tmpbuilddirectory/taskdefs.c $ROBUSTROOT/Runtime/checkpoint.c" if $RAWFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -DRAW" fi if $THREADSIMULATEFLAG then # -lpthread for pthread functions, -lrt for message queue functions EXTRAOPTIONS="$EXTRAOPTIONS -DTHREADSIMULATE -lpthread -lrt" fi fi if $OPTIONALFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -DOPTIONAL" FILES="$FILES tmpbuilddirectory/optionalarrays.c" fi if $THREADFLAG then FILES="$FILES $ROBUSTROOT/Runtime/thread.c" fi if $CHECKFLAG then EXTRAOPTIONS="$EXTRAOPTIONS -DCONSCHECK $BUILDDIR/specdir/*.o" INCLUDES="$INCLUDES -I$BUILDDIR/specdir" fi if $USEDMALLOC then EXTRAOPTIONS="$EXTRAOPTIONS -ldmalloc -DDMALLOC" fi if $MULTICOREFLAG then gcc $INCLUDES $EXTRAOPTIONS \ tmpbuilddirectory/methods.c $FILES -lm -o $MAINFILE.bin else gcc $INCLUDES $EXTRAOPTIONS -DPRECISE_GC \ tmpbuilddirectory/methods.c $FILES -lm -o $MAINFILE.bin fi fi #!RAWFLAG exit