public String OWNERSHIPALIASFILE=null;
public boolean OPTIONAL=false;
public boolean ARRAYBOUNDARYCHECK=true;
- public boolean RAW=false;
public boolean SCHEDULING=false;
public boolean USEPROFILE=false;
public boolean THREAD=false;
state.OPTIMIZE=true;
else if (option.equals("-dcopts"))
state.DCOPTS=true;
- else if (option.equals("-raw"))
- state.RAW=true;
else if (option.equals("-scheduling"))
state.SCHEDULING=true;
else if (option.equals("-distributioninfo"))
System.out.println("-mlp build mlp code, report progress and interim results");
System.out.println("-multicore generate multi-core version binary");
System.out.println("-numcore set the number of cores (should be used together with -multicore), defaultly set as 1");
- System.out.println("-raw generate raw version binary (should be used together with -multicore)");
System.out.println("-interrupt generate raw version binary with interruption (should be used togethere with -raw)");
System.out.println("-rawconfig config raw simulator as 4xn (should be used together with -raw)");
System.out.println("-rawpath print out execute path information for raw version (should be used together with -raw)");
void genrehash(struct genhashtable * ht) {
struct genpointerlist **newbins=(struct genpointerlist **) RUNMALLOC(sizeof (struct genpointerlist *)*ht->currentsize);
struct genpointerlist **oldbins=ht->bins;
- long j,i;
+ long i;
for(i=0; i<ht->currentsize; i++) {
struct genpointerlist * tmpptr=oldbins[i];
unsigned int hashkey = (unsigned int)key % thisvar->size;
struct ObjectNode **ptr = &thisvar->bucket[hashkey];
- int i;
while (*ptr) {
if ((*ptr)->key == key) {
#include <raw.h>
#include <raw_compiler_defs.h>
+#define BAMBOO_CACHE_LINE_SIZE (kCacheLineSize)
+#define BAMBOO_CACHE_LINE_MASK (kCacheLineMask)
+
#define BAMBOO_TOTALCORE (raw_get_num_tiles()) // the total # of cores available in the processor
#define BAMBOO_NUM_OF_CORE corenum // the # of current residing core
#define BAMBOO_GET_NUM_OF_CORE() (raw_get_abs_pos_x() + raw_get_array_size_x() * raw_get_abs_pos_y()) // compute the # of current residing core
#include "multicoreruntime.h"
#include "runtime_arch.h"
-inline void initialization() {
+__attribute__((always_inline)) inline void initialization() {
} // initialization()
-inline void initCommunication() {
+__attribute__((always_inline)) inline void initCommunication() {
#ifdef INTERRUPT
if (corenum < NUMCORES) {
// set up interrupts
#endif
}
-inline void fakeExecution() {
+__attribute__((always_inline)) inline void fakeExecution() {
// handle communications
while(true) {
receiveObject();
run(NULL);
}
-inline void terminate() {
+__attribute__((always_inline)) inline void terminate() {
raw_test_done(1);
}
// transfer an object to targetcore
// format: object
-void transferObject(struct transObjInfo * transObj) {
+inline void transferObject(struct transObjInfo * transObj) {// __attribute__((always_inline)){
void * obj = transObj->objptr;
int type=((int *)obj)[0];
int targetcore = transObj->targetcore;
}
}
-inline void send_msg_1 (int targetcore, int n0) {
+__attribute__((always_inline)) inline void send_msg_1 (int targetcore, int n0) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void send_msg_2 (int targetcore, int n0, int n1) {
+__attribute__((always_inline)) inline void send_msg_2 (int targetcore, int n0, int n1) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void send_msg_3 (int targetcore, int n0, int n1, int n2) {
+__attribute__((always_inline)) inline void send_msg_3 (int targetcore, int n0, int n1, int n2) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void send_msg_4 (int targetcore, int n0, int n1, int n2, int n3) {
+__attribute__((always_inline)) inline void send_msg_4 (int targetcore, int n0, int n1, int n2, int n3) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void send_msg_5 (int targetcore, int n0, int n1, int n2, int n3, int n4) {
+__attribute__((always_inline)) inline void send_msg_5 (int targetcore, int n0, int n1, int n2, int n3, int n4) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void send_msg_6 (int targetcore, int n0, int n1, int n2, int n3, int n4, int n5) {
+__attribute__((always_inline)) inline void send_msg_6 (int targetcore, int n0, int n1, int n2, int n3, int n4, int n5) {
// send this msg
unsigned msgHdr;
int self_y, self_x, target_y, target_x;
}
}
-inline void cache_msg_2 (int targetcore, int n0, int n1) {
+__attribute__((always_inline)) inline void cache_msg_2 (int targetcore, int n0, int n1) {
// cache this msg
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xdede);
outmsgdata[outmsglast++] = n1;
}
-inline void cache_msg_3 (int targetcore, int n0, int n1, int n2) {
+__attribute__((always_inline)) inline void cache_msg_3 (int targetcore, int n0, int n1, int n2) {
// cache this msg
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xdede);
outmsgdata[outmsglast++] = n2;
}
-inline void cache_msg_4 (int targetcore, int n0, int n1, int n2, int n3) {
+__attribute__((always_inline)) inline void cache_msg_4 (int targetcore, int n0, int n1, int n2, int n3) {
// cache this msg
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xdede);
outmsgdata[outmsglast++] = n3;
}
-inline void cache_msg_6 (int targetcore, int n0, int n1, int n2, int n3, int n4, int n5) {
+__attribute__((always_inline)) inline void cache_msg_6 (int targetcore, int n0, int n1, int n2, int n3, int n4, int n5) {
// cache this msg
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xdede);
outmsgdata[outmsglast++] = n5;
}
-inline int receiveMsg() {
+__attribute__((always_inline)) inline int receiveMsg() {
if(gdn_input_avail() == 0) {
#ifdef DEBUG
if(corenum < NUMCORES) {
}
#ifdef PROFILE
-inline void profileTaskStart(char * taskname) {
+__attribute__((always_inline)) inline void profileTaskStart(char * taskname) {
if(!taskInfoOverflow) {
TaskInfo* taskInfo = RUNMALLOC(sizeof(struct task_info));
taskInfoArray[taskInfoIndex] = taskInfo;
}
}
-inline void profileTaskEnd() {
+__attribute__((always_inline)) inline void profileTaskEnd() {
if(!taskInfoOverflow) {
taskInfoArray[taskInfoIndex]->endTime = raw_get_cycle();
taskInfoIndex++;
unsigned int hashkey = (unsigned int)key % thisvar->size;
struct RuntimeNode **ptr = &thisvar->bucket[hashkey];
- int i;
while (*ptr) {
if ((*ptr)->key == key) {
unsigned int hashkey = (unsigned int)key % thisvar->size;
struct RuntimeNode **ptr = &thisvar->bucket[hashkey];
- int i;
while (*ptr) {
if ((*ptr)->key == key && (*ptr)->data == data) {
void * mycalloc(int m, int size) {
void * p = NULL;
- int isize = 2*kCacheLineSize-4+(size-1)&(~kCacheLineMask);
+ int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
BAMBOO_START_CRITICAL_SECTION_MEM();
p = BAMBOO_SHARE_MEM_CALLOC(m, isize); // calloc(m, isize);
BAMBOO_CLOSE_CRITICAL_SECTION_MEM();
- return (void *)(kCacheLineSize+((int)p-1)&(~kCacheLineMask));
+ return (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
}
void * mycalloc_i(int m, int size) {
void * p = NULL;
- int isize = 2*kCacheLineSize-4+(size-1)&(~kCacheLineMask);
+ int isize = 2*BAMBOO_CACHE_LINE_SIZE-4+(size-1)&(~BAMBOO_CACHE_LINE_MASK);
p = BAMBOO_SHARE_MEM_CALLOC(m, isize); // calloc(m, isize);
- return (void *)(kCacheLineSize+((int)p-1)&(~kCacheLineMask));
+ return (void *)(BAMBOO_CACHE_LINE_SIZE+((int)p-1)&(~BAMBOO_CACHE_LINE_MASK));
}
void myfree(void * ptr) {
#ifndef RAW
#include <stdio.h>
#endif
+#ifdef MULTICORE
+#include "runtime_arch.h"
+#endif
//#include "option.h"
extern int classsize[];
#include "dmalloc.h"
#endif
-#ifdef RAW
+#ifdef MULTICORE
void initializeexithandler() {
}
#else
/* This function inject failures */
void injectinstructionfailure() {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return;
#else
#ifdef TASK
}
void CALL11(___System______exit____I,int ___status___, int ___status___) {
+#ifdef MULTICORE
+ BAMBOO_EXIT(___status___);
+#else
#ifdef DEBUG
printf("exit in CALL11\n");
#endif
-#ifdef RAW
- raw_test_done(___status___);
-#else
exit(___status___);
#endif
}
void CALL11(___System______printI____I,int ___status___, int ___status___) {
+#ifdef MULTICORE
+ BAMBOO_DEBUGPRINT(0x1111);
+ BAMBOO_DEBUGPRINT_REG(___status___);
+#else
#ifdef DEBUG
printf("printI in CALL11\n");
#endif
-#ifdef RAW
- raw_test_pass(0x1111);
- raw_test_pass_reg(___status___);
-#else
printf("%d\n", ___status___);
#endif
}
long CALL00(___System______currentTimeMillis____) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return -1;
#else
struct timeval tv; long long retval;
}
void CALL01(___System______printString____L___String___,struct ___String___ * ___s___) {
-#ifdef RAW
+#ifdef MULTICORE
#else
struct ArrayObject * chararray=VAR(___s___)->___value___;
int i;
inline void cache_msg_4(int targetcore, int n0, int n1, int n2, int n3) __attribute__((always_inline));
inline void cache_msg_6(int targetcore, int n0, int n1, int n2, int n3, int n4, int n5) __attribute__((always_inline));
inline void transferObject(struct transObjInfo * transObj);
-inline int receiveMsg(void) __attribute__((always_inline)) __attribute__((always_inline));
+inline int receiveMsg(void) __attribute__((always_inline));
#ifdef PROFILE
inline void profileTaskStart(char * taskname) __attribute__((always_inline));
// BAMBOO_CLOSE_CRITICAL_SECTION(): locks for all global data structures //
// BAMBOO_WAITING_FOR_LOCK(): routine executed while waiting for lock request //
// response //
+// BAMBOO_CACHE_LINE_SIZE: the cache line size //
+// BAMBOO_CACHE_LINE_MASK: mask for a cache line //
// BAMBOO_CACHE_FLUSH_RANGE(x, y): flush cache lines started at x with length y //
// BAMBOO_CACHE_FLUSH_ALL(): flush the whole cache of a core if necessary //
// BAMBOO_EXIT(x): exit routine //
#include "runtime.h"
#include "multicoreruntime.h"
#include "runtime_arch.h"
+#include "GenericHashtable.h"
/*
extern int injectfailures;
extern float failurechance;
bool getwritelock(void* ptr);
void releasewritelock(void* ptr);
void releasewritelock_r(void * lock, void * redirectlock);
-inline void run(void * arg);
// specific functions used inside critical sections
void enqueueObject_I(void * ptr, struct parameterwrapper ** queues, int length);
totalexetime = BAMBOO_GET_EXE_TIME();
#else
BAMBOO_DEBUGPRINT(0xbbbbbbbb);
- BAMBOO_DEBUGPRINT(BAMBOO_GET_EXE_TIME());
+ BAMBOO_DEBUGPRINT((int)BAMBOO_GET_EXE_TIME());
#endif
// profile mode, send msgs to other cores to request pouring
// out progiling data
struct ___Object___ *ptr = (struct ___Object___ *)vptr;
{
- struct QueueItem *tmpptr;
+ //struct QueueItem *tmpptr;
struct parameterwrapper * parameter=NULL;
int j;
int i;
if (tagptr==NULL)
goto nextloop; //that means the object has no tag but that param needs tag
else if(tagptr->type==TAGTYPE) { //one tag
- struct ___TagDescriptor___ * tag=(struct ___TagDescriptor___*) tagptr;
+ //struct ___TagDescriptor___ * tag=(struct ___TagDescriptor___*) tagptr;
for(i=0; i<parameter->numbertags; i++) {
//slotid is parameter->tagarray[2*i];
int tagid=parameter->tagarray[2*i+1];
struct ___Object___ *ptr = (struct ___Object___ *)vptr;
{
- struct QueueItem *tmpptr;
+ //struct QueueItem *tmpptr;
struct parameterwrapper * parameter=NULL;
int j;
int i;
if (tagptr==NULL)
goto nextloop; //that means the object has no tag but that param needs tag
else if(tagptr->type==TAGTYPE) { //one tag
- struct ___TagDescriptor___ * tag=(struct ___TagDescriptor___*) tagptr;
+ //struct ___TagDescriptor___ * tag=(struct ___TagDescriptor___*) tagptr;
for(i=0; i<parameter->numbertags; i++) {
//slotid is parameter->tagarray[2*i];
int tagid=parameter->tagarray[2*i+1];
// otherwise -- received msg type
int receiveObject() {
int deny = 0;
- int targetcore = 0;
+ //int targetcore = 0;
msg:
if(receiveMsg() == -1) {
int targetcore = 0;
// for 32 bit machine, the size is always 5 words
- int msgsize = 5;
+ //int msgsize = 5;
lockobj = (int)ptr;
if(((struct ___Object___ *)ptr)->lock == NULL) {
int enqueuetasks(struct parameterwrapper *parameter, struct parameterwrapper *prevptr, struct ___Object___ *ptr, int * enterflags, int numenterflags) {
void * taskpointerarray[MAXTASKPARAMS];
int j;
- int numparams=parameter->task->numParameters;
+ //int numparams=parameter->task->numParameters;
int numiterators=parameter->task->numTotal-1;
int retval=1;
- int addnormal=1;
- int adderror=1;
+ //int addnormal=1;
+ //int adderror=1;
struct taskdescriptor * task=parameter->task;
while(1) {
/* Enqueue current state */
- int launch = 0;
+ //int launch = 0;
struct taskparamdescriptor *tpd=RUNMALLOC(sizeof(struct taskparamdescriptor));
tpd->task=task;
tpd->numParameters=numiterators+1;
int enqueuetasks_I(struct parameterwrapper *parameter, struct parameterwrapper *prevptr, struct ___Object___ *ptr, int * enterflags, int numenterflags) {
void * taskpointerarray[MAXTASKPARAMS];
int j;
- int numparams=parameter->task->numParameters;
+ //int numparams=parameter->task->numParameters;
int numiterators=parameter->task->numTotal-1;
int retval=1;
- int addnormal=1;
- int adderror=1;
+ //int addnormal=1;
+ //int adderror=1;
struct taskdescriptor * task=parameter->task;
while(1) {
/* Enqueue current state */
- int launch = 0;
+ //int launch = 0;
struct taskparamdescriptor *tpd=RUNMALLOC_I(sizeof(struct taskparamdescriptor));
tpd->task=task;
tpd->numParameters=numiterators+1;
#define OFFSET 0
#endif
+int containstag(struct ___Object___ *ptr, struct ___TagDescriptor___ *tag);
+
void executetasks() {
void * taskpointerarray[MAXTASKPARAMS+OFFSET];
int numparams=0;
#endif
#endif // #if 0: for recovery
if (x=setjmp(error_handler)) {
- int counter;
+ //int counter;
/* Recover */
#ifdef DEBUG
#ifndef RAW
for(i=0; i<pd->numbertags; i++) {
int slotid=pd->tagarray[2*i];
- int tagid=pd->tagarray[2*i+1];
+ //int tagid=pd->tagarray[2*i+1];
if (statusarray[slotid+numparams]!=0) {
/* This tag has already been enqueued, use it to narrow search */
parameter->iterators[*iteratorcount].tagbindings[tagcount]=slotid+numparams;
#include "object.h"
-#ifdef RAW
-#include <raw.h>
+#ifdef MULTICORE
+#include "runtime_arch.h"
#else
#include "stdio.h"
#endif
pthread_cond_broadcast(&objcond);
pthread_mutex_unlock(&objlock);
} else {
-#ifdef RAW
- raw_test_done(-1);
+#ifdef MULTICORE
+ BAMBOO_EXIT(-1);
#else
printf("ERROR...UNLOCKING LOCK WE DON'T HAVE\n");
exit(-1);
#ifdef TASK
#include "SimpleHash.h"
-#include "chash.h"
#ifndef MULTICORE
+#include "chash.h"
#include "ObjectHash.h"
#include "structdefs.h"
#endif
#endif
#ifdef MULTICORE
-inline int receiveObject(void);
+inline void run(void * arg);
+int receiveObject(void);
void flagorand(void * ptr, int ormask, int andmask, struct parameterwrapper ** queues, int length);
void flagorandinit(void * ptr, int ormask, int andmask);
void enqueueObject(void * ptr, struct parameterwrapper ** queues, int length);
#include "runtime.h"
#include "structdefs.h"
#include <fcntl.h>
-#ifndef RAW
+#ifndef MULTICORE
#include <sys/socket.h>
#include <arpa/inet.h>
#include <strings.h>
struct RuntimeHash *fdtoobject;
int CALL24(___Socket______nativeConnect____I__AR_B_I, int ___fd___, int ___port___, struct ___Socket___ * ___this___, int ___fd___, struct ArrayObject * ___address___,int ___port___) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return -1;
#else
struct sockaddr_in sin;
#ifdef TASK
int CALL12(___Socket______nativeBindFD____I, int ___fd___, struct ___Socket___ * ___this___, int ___fd___) {
+#ifdef MULTICORE
+#else
if (RuntimeHashcontainskey(fdtoobject, ___fd___))
RuntimeHashremovekey(fdtoobject, ___fd___);
RuntimeHashadd(fdtoobject, ___fd___, (int) VAR(___this___));
addreadfd(___fd___);
+#endif
+ return 0;
}
#endif
int CALL12(___Socket______nativeBind_____AR_B_I, int ___port___, struct ArrayObject * ___address___, int ___port___) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return -1;
#else
int fd;
}
struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ArrayObject * ___hostname___) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return NULL;
#else
//struct ArrayObject * CALL01(___InetAddress______getHostByName_____AR_B, struct ___ArrayObject___ * ___hostname___) {
int CALL12(___ServerSocket______createSocket____I, int port, struct ___ServerSocket___ * ___this___, int port) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return -1;
#else
int fd;
}
int CALL02(___ServerSocket______nativeaccept____L___Socket___,struct ___ServerSocket___ * ___this___, struct ___Socket___ * ___s___) {
-#ifdef RAW
- // not supported in RAW version
+#ifdef MULTICORE
+ // not supported in MULTICORE version
return -1;
#else
struct sockaddr_in sin;
#ifdef MULTICORE
flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
enqueueObject(VAR(___this___), NULL, 0);
- //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
- //enqueueObject(VAR(___this___), objq4socketobj[corenum], numqueues4socketobj[corenum]);
#else
flagorand(VAR(___this___),0,0xFFFFFFFE);
enqueueObject(VAR(___this___));
}
if (length!=0) {
-#ifndef RAW
+#ifndef MULTICORE
perror("ERROR IN NATIVEWRITE");
printf("error=%d remaining bytes %d\n",errno, length);
#endif
if (byteread<0) {
-#ifndef RAW
+#ifndef MULTICORE
printf("ERROR IN NATIVEREAD\n");
perror("");
#endif
#ifdef MULTICORE
flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
enqueueObject(VAR(___this___), NULL, 0);
- //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
- //enqueueObject(VAR(___this___),objq4socketobj[corenum],numqueues4socketobj[corenum]);
#else
flagorand(VAR(___this___),0,0xFFFFFFFE);
enqueueObject(VAR(___this___));
}
void CALL01(___Socket______nativeClose____, struct ___Socket___ * ___this___) {
+#ifdef MULTICORE
+#else
int fd=VAR(___this___)->___fd___;
int data;
#ifdef TASK
RuntimeHashget(fdtoobject, fd, &data);
RuntimeHashremove(fdtoobject, fd, data);
removereadfd(fd);
-#ifdef MULTICORE
- flagorand(VAR(___this___),0,0xFFFFFFFE,NULL,0);
- enqueueObject(VAR(___this___), NULL, 0);
- //flagorand(VAR(___this___),0,0xFFFFFFFE,objq4socketobj[corenum],numqueues4socketobj[corenum]);
- //enqueueObject(VAR(___this___),objq4socketobj[corenum],numqueues4socketobj[corenum]);
-#else
flagorand(VAR(___this___),0,0xFFFFFFFE);
enqueueObject(VAR(___this___));
-#endif
#endif
close(fd);
+#endif
}
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 "-cacheflush enable cache flush in raw version binary (should be used togethere with -raw)"
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 "-rawpath print out execute path information for raw version (should be used together with -raw)"
echo "-useprofile use profiling data for scheduling (should be used together with -raw)"
-echo -threadsimulate generate multi-thread simulate version binary
echo -printscheduling print out scheduling graphs
echo -printschedulesim print out scheduling simulator result graphs
echo -abcclose close the array boundary check
+echo "-tilera generate tilera version binary (should be used together with -multicore"
+echo "-raw generate raw version binary (should be used together with -multicore)"
+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
MLPDEBUG=false
MULTICOREFLAG=false
RAWFLAG=false
+TILERAFLAG=false
CACHEFLUSHFLAG=false
RAWCONFIG=''
DEBUGFLAG=false
elif [[ $1 = '-raw' ]]
then
RAWFLAG=true
-JAVAOPTS="$JAVAOPTS -raw"
+elif [[ $1 = '-tilera' ]]
+then
+TILERAFLAG=true
elif [[ $1 = '-cacheflush' ]]
then
CACHEFLUSHFLAG=true
make
-else #!RAWFLAG
+elif $TILERAFLAG
+then # TILERAFLAG
+TILERADIR="$CURDIR/tilera"
+MAKEFILE="Makefile.tilera"
+mkdir $TILERADIR
+cd $TILERADIR
+make clean
+rm ./*
+
+export TILERACFLAGS="-DTASK -DMULTICORE"
+
+if $CACHEFLUSHFLAG
+then # print path
+TILERACFLAGS="${TILERACFLAGS} -DCACHEFLUSH"
+fi
+
+if $RAWPATHFLAG
+then # print path
+TILERACFLAGS="${TILERACFLAGS} -DRAWPATH"
+fi
+
+if $DEBUGFLAG
+then #debug version
+TILERACFLAGS="${TILERACFLAGS} -DDEBUG"
+fi
+
+if $PROFILEFLAG
+then # profile version
+TILERACFLAGS="${TILERACFLAGS} -DPROFILE"
+fi
+
+if $USEIOFLAG
+then # useio version
+TILERACFLAGS="${TILERACFLAGS} -DUSEIO"
+fi
+
+if $INTERRUPTFLAG
+then #INTERRUPT version
+TILERACFLAGS="${TILERACFLAGS} -DINTERRUPT"
+fi #INTERRUPT version
+
+cp $ROBUSTROOT/Runtime/Tilera/$MAKEFILE ./Makefile
+cp ../Runtime/multicoretask.c ./
+cp ../Runtime/multicoreruntime.c ./
+cp ../Runtime/Queue.c ./
+cp ../Runtime/file.c ./
+cp ../Runtime/math.c ./
+cp ../Runtime/object.c ./
+cp ../Runtime/GenericHashtable.c ./
+cp ../Runtime/SimpleHash.c ./
+cp ../Runtime/ObjectHash.c ./
+cp ../Runtime/socket.c ./
+cp ../Runtime/taskdefs.c ./
+cp ../Runtime/methods.c ./
+cp ../Runtime/mem.c ./
+cp ../Runtime/GenericHashtable.h ./
+cp ../Runtime/mem.h ./
+cp ../Runtime/multicoreruntime.h ./
+cp ../Runtime/object.h ./
+cp ../Runtime/ObjectHash.h ./
+cp ../Runtime/Queue.h ./
+cp ../Runtime/runtime.h ./
+cp ../Runtime/SimpleHash.h ./
+cp ../Runtime/Tilera/*.c ./
+cp ../Runtime/Tilera/*.h ./
+cp ../tmpbuilddirectory/*.c ./
+cp ../tmpbuilddirectory/*.h ./
+
+else #!RAWFLAG && !TILERAFLAG
cd $CURDIR
INCLUDES="$INCLUDES -I$ROBUSTROOT/Runtime -I. -IRuntime/include \