1) bug fix to guard generateOptionalArrays
[IRC.git] / Robust / src / buildscript
1 #!/bin/bash
2
3 printhelp() {
4 echo -dsm distributed shared memory
5 echo -check generate check code
6 echo -dmalloc link in dmalloc
7 echo -recover compile task code
8 echo -specdir directory
9 echo -taskstate do task state analysis
10 echo -optional enable optional
11 echo -debug generate debug symbols
12 echo -webinterface enable web interface
13 echo -runtimedebug printout runtime debug messages
14 echo "-thread use support for multiple threads"
15 echo "-optimize call gcc with -O9 (optimize)"
16 echo "-nooptimize call gcc with -O0 (do not optimize)"
17 echo -curdir directory 
18 echo -mainclass class with main method
19 echo -o binary
20 echo -instructionfailures inject code for instructionfailures
21 echo -help help
22 }
23
24 ROBUSTROOT=~/research/Robust/src
25 REPAIRROOT=~/research/Repair/RepairCompiler/
26 CURDIR=`pwd`
27 CHECKFLAG=false
28 RECOVERFLAG=false
29 USEDMALLOC=false
30 THREADFLAG=false
31 SPECDIR=`pwd`
32 SRCFILES=''
33 EXTRAOPTIONS=''
34 MAINFILE='a'
35 JAVAOPTS=''
36
37 if [[ -z $1 ]]
38 then
39 printhelp
40 exit
41 fi
42
43 while [[ -n $1 ]]
44 do
45 if [[ $1 = '-help' ]]
46 then
47 printhelp
48 exit
49 elif [[ $1 = '-o' ]]
50 then
51 MAINFILE="$2"
52 shift
53 elif [[ $1 = '-mainclass' ]]
54 then
55 JAVAOPTS="$JAVAOPTS -mainclass $2"
56 shift
57 elif [[ $1 = '-dsm' ]]
58 then
59 JAVAOPTS="$JAVAOPTS -dsm"
60 elif [[ $1 = '-taskstate' ]]
61 then
62 JAVAOPTS="$JAVAOPTS -taskstate"
63 elif [[ $1 = '-optional' ]]
64 then
65 JAVAOPTS="$JAVAOPTS -optional"
66 elif [[ $1 = '-dmalloc' ]]
67 then
68 USEDMALLOC=true
69 elif [[ $1 = '-recover' ]]
70 then
71 RECOVERFLAG=true
72 JAVAOPTS="$JAVAOPTS -task"
73 elif [[ $1 = '-webinterface' ]]
74 then
75 JAVAOPTS="$JAVAOPTS -webinterface"
76 elif [[ $1 = '-instructionfailures' ]]
77 then
78 JAVAOPTS="$JAVAOPTS -instructionfailures"
79 elif [[ $1 = '-check' ]]
80 then
81 CHECKFLAG=true
82 JAVAOPTS="$JAVAOPTS -conscheck"
83 elif [[ $1 = '-specdir' ]]
84 then
85 cd $2
86 SPECDIR=`pwd`
87 cd $CURDIR
88 shift
89 elif [[ $1 = '-debug' ]]
90 then
91 EXTRAOPTIONS="$EXTRAOPTIONS -g"
92 elif [[ $1 = '-runtimedebug' ]]
93 then
94 EXTRAOPTIONS="$EXTRAOPTIONS -DDEBUG"
95 elif [[ $1 = '-nooptimize' ]]
96 then
97 EXTRAOPTIONS="$EXTRAOPTIONS -O0"
98 elif [[ $1 = '-optimize' ]]
99 then
100 EXTRAOPTIONS="$EXTRAOPTIONS -O9"
101 elif [[ $1 = '-thread' ]]
102 then
103 JAVAOPTS="$JAVAOPTS -thread"
104 EXTRAOPTIONS="$EXTRAOPTIONS -DTHREADS -lpthread"
105 THREADFLAG=true
106 elif [[ $1 = '-curdir' ]]
107 then
108 CURDIR=$2
109 shift
110 else
111 SRCFILES="$SRCFILES $1"
112 fi
113 shift
114 done
115
116 BUILDDIR="$CURDIR/tmpbuilddirectory"
117
118 cd $1
119 cd $CURDIR
120 shift
121
122 mkdir $BUILDDIR
123
124 if $CHECKFLAG #Generate structure files for repair tool
125 then
126 JAVAOPTS="$JAVAOPTS -struct structfile"
127 fi
128
129 # Build bristlecone/java sources
130
131 java -cp $ROBUSTROOT/../cup/:$ROBUSTROOT Main.Main -classlibrary \
132 $ROBUSTROOT/ClassLibrary/ -dir $BUILDDIR -precise \
133 $JAVAOPTS $SRCFILES
134
135 # Build all of the consistency specs
136
137 if $CHECKFLAG # CHECKFLAG
138 then
139 cd $SPECDIR
140 mkdir $BUILDDIR/specdir
141 cp $REPAIRROOT/MCC/CRuntime/* $BUILDDIR/specdir
142
143 echo > $BUILDDIR/specs
144
145 # compile specs into C code
146 for i in * # iterate over all directories
147 do
148 if [[ "$i" != "CVS" ]] # CVSDIR CHECK
149 then
150 cd $SPECDIR/$i
151 cat $BUILDDIR/structfile.struct $i.label > $i.struct
152 java -cp $REPAIRROOT/:. MCC.Compiler -name $i -checkonly $i
153 cp size.[c,h] $BUILDDIR/specdir
154 cp $i.c $i\_aux.[c,h] $BUILDDIR/specdir
155 echo $i >> $BUILDDIR/specs
156 fi # CVSDIR CHECK
157 done # iterate over all directories
158
159 #compile C code
160
161 cd $BUILDDIR/specdir
162 ./buildrobust
163 echo > $BUILDDIR/checkers.h
164 for i in `cat $BUILDDIR/specs`
165 do
166 gcc -O0 -g -c $i\_aux.c
167 echo \#include \"specdir\/$i\_aux.h\" >> $BUILDDIR/checkers.h
168 done
169 fi # CHECKFLAG
170
171 #build and link everything
172
173 cd $CURDIR 
174
175 INCLUDES="$INCLUDES -I$ROBUSTROOT/Runtime -I. -IRuntime/include \
176 -I$BUILDDIR"
177
178 FILES="$ROBUSTROOT/Runtime/runtime.c $ROBUSTROOT/Runtime/task.c \
179 $ROBUSTROOT/Runtime/file.c $ROBUSTROOT/Runtime/Queue.c \
180 $ROBUSTROOT/Runtime/SimpleHash.c $ROBUSTROOT/Runtime/option.c \
181 $ROBUSTROOT/Runtime/garbage.c $ROBUSTROOT/Runtime/socket.c \
182 $ROBUSTROOT/Runtime/GenericHashtable.c $ROBUSTROOT/Runtime/object.c"
183
184 if $RECOVERFLAG
185 then
186 EXTRAOPTIONS="$EXTRAOPTIONS -DTASK"
187 FILES="$FILES tmpbuilddirectory/taskdefs.c $ROBUSTROOT/Runtime/checkpoint.c"
188 fi
189
190 if $THREADFLAG
191 then
192 FILES="$FILES $ROBUSTROOT/Runtime/thread.c"
193 fi
194
195 if $CHECKFLAG
196 then
197 EXTRAOPTIONS="$EXTRAOPTIONS -DCONSCHECK $BUILDDIR/specdir/*.o"
198 INCLUDES="$INCLUDES -I$BUILDDIR/specdir"
199 fi
200
201 if $USEDMALLOC
202 then
203 EXTRAOPTIONS="$EXTRAOPTIONS -ldmalloc -DDMALLOC"
204 fi
205
206 gcc $INCLUDES $EXTRAOPTIONS -DPRECISE_GC \
207 tmpbuilddirectory/methods.c $FILES -o $MAINFILE.bin
208
209 exit
210