Merge branch 'charm' into virtualDebug
[charm.git] / build
1 #!/bin/sh
2
3 # Silly shorthand, used for source reorganization
4 src="src/arch"
5
6 more=0
7
8 syntax() {
9   echo ''
10   echo 'Usage: build <target> <version> <options> [charmc-options ...]'
11   echo ''
12   echo '<targets>: converse charm++ LIBS AMPI FEM bigemulator pose jade msa'
13   echo '<targets>: doc ps-doc pdf-doc html-doc'
14   if test $more = 1
15   then
16   echo ''
17   echo '  charm++         compile Charm++ core only'
18   echo '  AMPI            compile Adaptive MPI on top of Charm++'
19   echo '  FEM             compile FEM framework'
20   echo '  LIBS            compile additional parallel libraries with Charm++ core'
21   echo '  bigemulator     build additional BigSim libraries'
22   echo '  pose            build POSE parallel discrete event simulator'
23   echo '  jade            build Jade compiler (auto-builds charm++, msa)'
24   echo '  msa             build Multiphase Shared Arrays(MSA) library'
25   echo '  Tau             build the TAU tracing library for generating TAU performance data' 
26   echo '  ChaNGa          compile Charm++ core and necessary libraries for ChaNGa'
27   echo ''
28   fi
29   echo '<versions>: ' 
30   ( cd $src ; ls -1 | egrep -v '(^CVS)|(^shmem$)|(^mpi$)|(^sim$)|(^net$)|(^multicore$)|(^elan$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win32$)|(^win64$)|(^paragon$)|(^vmi$)|(^lapi$)|(^cell$)|(^template$)|(^cuda$)' | pr -3 -t )
31   echo ''
32   echo '<options>: compiler and platform specific options'
33   echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 gcc4 mpcc pathscale'
34   echo 'help smp gm tcp vmi scyld clustermatic bigemulator ooc syncft mlogft causalft papi'
35   echo 'pthreads lam'
36   echo '--incdir --libdir --basedir --no-build-shared --destination --suffix -j'
37   if test $more = 1
38   then
39   echo ''
40   echo 'For platform specific options, use help option:'
41   echo '  help            platform specific help, e.g. ./build charm++ net-linux-x86_64 help'
42   echo ''
43   echo 'Choose a compiler (only one option is allowed from this section):'
44   echo '  cc, cc64        For Sun WorkShop C++ 32/64 bit compilers'
45   echo '  cxx             DIGITAL C++ compiler (DEC Alpha)'
46   echo '  kcc             KAI C++ compiler'
47   echo "  pgcc            Portland Group's C++ compiler"
48   echo '  acc             HP aCC compiler'
49   echo '  icc             Intel C/C++ compiler for Linux IA32'
50   echo '  ecc             Intel C/C++ compiler for Linux IA64'
51   echo '  gcc3            use gcc3 - GNU GCC/G++ version 3'
52   echo '  gcc4            use gcc4 - GNU GCC/G++ version 4 (only mpi-crayxt3)'
53   echo '  mpcc            SUN Solaris C++ compiler for MPI'
54   echo '  pathscale       use pathscale compiler suite'
55   echo ''
56   echo 'Choose a fortran compile (only one option is allowed from this section):'
57   echo '  g95             G95 at http://ww.g95.org'
58   echo '  absoft          Absoft fortran compiler'
59   echo "  pgf90           Portland Group\'s Fortran compiler"
60   echo '  ifc             Intel Fortran compiler (older versions)'
61   echo '  ifort           Intel Fortran compiler (newer versions)'
62   echo ''
63   echo 'Platform specific options (choose multiple if apply):'
64   echo '  lam             Use LAM MPI'
65   echo '  smp             support for SMP, multithreaded charm on each node'
66   echo '  mpt             use SGI Message Passing Toolkit (only for mpi version)'
67   echo '  gm              use Myrinet for communication'
68   echo '  tcp             use TCP sockets for communication (only for net version)'
69   echo '  ibverbs         use the Infiniband OpenIB layer for communication (only for net-linux-x86_64 currently)'
70   echo "  vmi             use NCSA's VMI for communication (only for mpi version)"
71   echo '  scyld           compile for Scyld Beowulf cluster based on bproc'
72   echo '  clustermatic    compile for Clustermatic (support version 3 and 4) '
73   echo '  pthreads        compile with pthreads Converse threads'
74   echo ''
75   echo 'Advanced options:'
76   echo '  bigemulator     compile for BigSim simulator'
77   echo '  ooc             compile with out of core support'
78   echo '  syncft          compile with Charm++ fault tolerance support'
79   echo '  mlogft          compile with Charm++ message logging fault tolerance support'
80   echo '  papi            compile with PAPI performance counter support (if any)'
81   echo ''
82   echo "Charm++ dynamic libraries:"
83   echo "  --build-shared     build Charm++ dynamic libraries (.so) (default)"
84   echo "  --no-build-shared  don't build Charm++'s shared libraries"
85   echo ''
86   echo 'Miscellaneous options:'
87   echo '  --incdir=DIR       specify additional include path for compiler'
88   echo '  --libdir=DIR       specify additional lib path for compiler'
89   echo '  --basedir=DIR      shortcut for the above two - DIR/include and DIR/lib'
90   echo '  -j[N]              parallel make, N is the number of paralle make jobs'
91   echo "  --with-romio       build AMPI with ROMIO library"
92   echo "  --with-production  build Charm++ with all optimizations for maximum performance"
93   echo "  --destination=DIR  build Charm++ inside DIR, by default the destination is <version>"
94   echo "  --suffix=DIR       append DIR to the destination directory of the Charm++ build"
95   echo "  --tau-makefile=FILE Specify which TAU stub makefile to use"
96   fi
97   echo ''
98   echo '<charmc-options>: normal compiler options e.g. -g -O -save -verbose'
99   if test $more = 1
100   then
101   echo ''
102   echo 'Examples:'
103   echo "1. display all supported options for net-linux-x86_64 using 'help':"
104   echo '  ./build charm++ net-linux-x86_64 help'
105   echo '2. compile Charm++ on Linux with optimizations:'
106   echo '  ./build charm++ net-linux-x86_64 -O -DCMK_OPTIMIZE'
107   echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler:'
108   echo '  ./build charm++ net-linux clustermatic icc -O'
109   echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
110   echo '  ./build charm++ mpi-linux-ia64 gm -O'
111   echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
112   echo '  ./build charm++ net-win32 -O'
113   echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
114   echo '  MAKE=gmake  ./build charm++ mpi-sp -j4 -O            # sh'
115   echo '  setenv MAKE gmake;  ./build charm++ mpi-sp -j4 -O    # csh'
116   echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
117   echo '  ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -O'
118   echo '   or in short,'
119   echo '  ./build charm++ mpi-linux --basedir /usr/local/mpich -O'
120   echo '  ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
121   echo ''
122   echo 'Note: This script:'
123   echo ' 1. Creates directories <destination> and <destination>/tmp'
124   echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
125   echo ' 3. Does a "make basics" in <destination>/tmp.'
126   echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
127   echo "That's all build does.  The rest is handled by the Makefile."
128   echo ''
129   echo 'Thank you for using Charm++, please send questions or comments to '
130   echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
131   echo '(email: charm@cs.uiuc.edu).'
132
133   else
134   echo ''
135   echo "To get more detailed help, run ./build --help"
136   fi
137 }
138
139 Echo() {
140     [ "x$QUIET" = "x--quiet" ] || echo $*
141 }
142
143 printOption() {
144   for prefix in cc conv-mach
145   do
146     str="Supported compilers:"
147     [ "$prefix" = "conv-mach" ] && str="Supported options:"
148     opts=""
149     for dir in $OPT_DIRS
150     do
151 #         echo "Checking for $prefix in $dir"
152           files=`cd $dir; ls $prefix-*.h 2>/dev/null`
153           opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
154     done 
155     tmp=.tmp.$$
156     rm -f $tmp; touch $tmp
157     for o in $opts
158     do
159       echo $o >> $tmp
160     done
161     opts=`sort $tmp | uniq`
162     rm -f $tmp
163     echo $str $opts
164   done
165   exit 1
166 }
167
168 CheckDir() {
169   for d in $*
170   do
171     if test ! -d $d
172     then
173       echo Error: cannot find $d!
174       exit 1
175     fi
176   done
177 }
178
179 TestIfCompiler() {
180   for dir in $OPT_DIRS
181   do
182     [ -f $dir/cc-$1.sh ] && return 1
183   done  
184   return 0
185 }
186
187 TestIfOption() {
188   for dir in $OPT_DIRS
189   do
190     [ -f $dir/conv-mach-$1.h ] && return 1 
191   done
192   
193   echo "Error> option: $1 is not supported in this version!"; 
194   printOption
195 }
196
197
198 # start
199
200 MAKEOPTS=""
201 OPTS=""
202 BOPTS=""
203 MORE=""
204 COMPILER=""
205 BASEDIR=
206 LIBDIR=
207 INCDIR=
208 ARCH=
209 BUILD_SHARED=
210 WITH_ROMIO=
211 WITH_PRODUCTION=
212 BUILD_EMULATOR=0
213 DESTINATION=""
214 DESTINATION_SUFFIX=""
215 TAU_MAKEFILE=""
216 QUIET=""
217
218 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | more && exit 1
219 [ $# -lt 2 ] && ./smart-build.pl && exit 1
220 PROGRAM=$1
221 shift
222 VERSION=$1; BASEVERSION=$1; 
223 if test -f $src/$BASEVERSION/vdir_link
224 then
225   BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
226 fi
227 ARCH=`echo $1 | sed -e 's@-.*@@'`
228 shift
229
230 #echo $src
231 #echo $BASEVERSION
232 #echo $ARCH
233
234 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
235
236 while [ ! $# -eq 0 ]
237 do
238   case "$1" in
239     "--basedir")
240                 shift; 
241                 for dir in $1
242                 do
243                   CheckDir $dir/include $dir/lib
244                   LIBDIR="$LIBDIR -L$dir/lib";
245                   INCDIR="$INCDIR -I$dir/include"
246                 done
247                 shift
248                 ;;
249     --basedir=*)
250                 basedir=`echo $1 | awk -F= '{print $2}'`
251                 for dir in $basedir
252                 do
253                   CheckDir $dir/include $dir/lib
254                   LIBDIR="$LIBDIR -L$dir/lib";
255                   INCDIR="$INCDIR -I$dir/include"
256                 done
257                 shift
258                 ;;
259     "--libdir")
260                 shift; CheckDir $1
261                 for dir in $1
262                 do
263                   LIBDIR="$LIBDIR -L$dir"; 
264                 done
265                 shift
266                 ;;
267     --libdir=*)
268                 libdir=`echo $1 | awk -F= '{print $2}'`
269                 CheckDir $libdir
270                 for dir in $libdir
271                 do
272                   LIBDIR="$LIBDIR -L$dir"; 
273                 done
274                 shift
275                 ;;
276     "--incdir")
277                 shift; CheckDir $1
278                 for dir in $1
279                 do
280                   INCDIR="$INCDIR -I$dir"; 
281                 done
282                 shift
283                 ;;
284     --incdir=*)
285                 incdir=`echo $1 | awk -F= '{print $2}'`
286                 CheckDir $incdir
287                 for dir in $incdir
288                 do
289                   INCDIR="$INCDIR -I$dir"; 
290                 done
291                 shift
292                 ;;
293     --no-build-shared|-nobs|--no-shared)
294                 BUILD_SHARED="-nobs"; shift
295                 ;;
296     --with-romio)
297                 WITH_ROMIO="true"; shift
298                 ;;
299     --with-production)
300                 WITH_PRODUCTION="true" 
301                 shift
302                 ;;
303     --build-shared|-bs)
304                 # obsolete, do nothing
305                 shift
306                 ;;
307     --destination)
308                 shift
309                 DESTINATION="$1"
310                 shift
311                 ;;
312     --destination=*)
313                 DESTINATION="`echo $1 | awk -F= '{print $2}'`"
314                 shift
315                 ;;
316     --suffix)
317                 shift
318                 DESTINATION_SUFFIX="$1"
319                 shift
320                 ;;
321     --suffix=*)
322                 DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
323                 shift
324                 ;;
325     --tau-makefile)
326                 TAU_MAKEFILE=$1
327                 shift
328                 ;;
329     --tau-makefile=*)
330                 TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
331                 shift
332                 ;;
333     --quiet)
334                 MAKEOPTS="$MAKEOPTS --quiet"
335                 QUIET="--quiet"
336                 shift;
337                 ;;
338     --enable-tracing|--enable-tracing=*)
339                 CONFIG_OPTS="$CONFIG_OPTS $1"
340                 ENABLE_TRACING=yes
341                 shift
342                 ;;
343     --enable-*)
344                 CONFIG_OPTS="$CONFIG_OPTS $1"
345                 shift
346                 ;;
347     -j*)
348                 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
349                 MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
350                 shift;
351                 ;;
352     -*) 
353 # We hit a real compiler option (like -g, or -Dfoo),
354 # so just copy over all remaining options
355           while [ ! $# -eq 0 ]
356           do
357             OPTS="$OPTS $1"; shift
358           done
359           ;;
360     "help")
361         printOption
362         ;;
363     *)
364 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
365         TestIfCompiler $1
366         if [ $? -eq 1 ] 
367         then
368 # It specifies a compiler:
369           if [ ! -z "$COMPILER" ] 
370           then
371               echo "Error> Tried to specify two compilers: $COMPILER and $1"
372               printOption
373           fi
374           COMPILER=$1
375         else
376 # It specifies some other option:
377           TestIfOption $1
378           BOPTS="$BOPTS $1"
379           [ $1 =  "bigemulator" ] && BUILD_EMULATOR=1
380           [ $1 =  "bigsim" ] && BUILD_EMULATOR=1
381         fi
382         shift
383         ;;
384   esac
385 done
386
387 [ "x$VERSION" = "x" ] && syntax && exit 1
388
389 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
390 then
391   echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
392   exit 1
393 fi
394
395 if [ -z "$MAKE" ] 
396 then
397   # prefer gmake
398   MAKE=`which gmake 2>/dev/null`
399   [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
400 fi
401
402 if [ ! -f $src/$BASEVERSION/conv-mach.h ] 
403 then
404   if [ "x_$BASEVERSION" = "x_net-rs6k" ]
405   then
406     echo "Error> build net-aix-ppc instead of net-rs6k!" 
407   else
408     echo "Error> build can not find arch: $BASEVERSION!" 
409   fi
410   exit 1
411 fi
412
413 #generate VERSION name combining all the build-time options.
414 if [ -n "$BOPTS" -o -n "$COMPILER" ]
415 then
416   echo "Selected Compiler: $COMPILER"
417   echo "Selected Options: $BOPTS"
418   SORTED=`echo $BOPTS | awk  '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
419   BOPTS_WITHCOMPILER=`echo $SORTED $COMPILER`
420   for i in $BOPTS_WITHCOMPILER
421   do
422     VERSION=$VERSION-$i
423   done
424 fi
425
426 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
427
428 if [ -z "$DESTINATION" ]
429 then
430   DESTINATION="$VERSION"
431 fi
432
433 if [ -n "$DESTINATION_SUFFIX" ]
434 then
435   DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
436 fi
437
438 [ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
439 [ -d $DESTINATION ] || mkdir $DESTINATION
440 [ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
441 [ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
442
443 Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
444 rm -f $DESTINATION/tmp/Makefile
445 rm -f $DESTINATION/tmp/Make.depends
446 rm -f $DESTINATION/tmp/Make.lb
447 rm -f $DESTINATION/tmp/Make.machine
448
449
450 # Create the bin, lib, include, etc. links:
451 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
452 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
453 then
454 #Win32/64 version needs special compilers and *copied* (not linked)
455 # source files.
456         echo "Copying compilers for $WINNAME into cygwin /bin directory"
457         cp -f $src/$WINNAME/unix2nt* /bin
458         cp $src/win32/system_ln $DESTINATION/tmp
459         cp $src/win32/unistd.h $DESTINATION/tmp
460         echo "Compiling createlink.cpp ..."
461         (cd $src/win32; unix2nt_cc  -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o)
462         if test ! -x $src/win32/createlink.exe
463         then
464                 echo "VC++ is not properly installed!"
465                 exit 1
466         fi
467         echo "Copying $src/win32/createlink.exe to /bin directory"
468         cp $src/win32/createlink.exe /bin
469         chmod +x $DESTINATION/tmp/system_ln
470 else
471         cat > $DESTINATION/tmp/system_ln <<EOF
472 #!/bin/sh
473 ln -f -s \$@
474 EOF
475   chmod +x $DESTINATION/tmp/system_ln
476   for newdir in `echo bin lib lib_so include tmp`
477   do
478     Echo "Soft-linking over $newdir"
479     if [ -r $newdir ]
480     then
481       rm -fr $newdir || exit 1
482     fi
483     $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
484   done
485   rm -f VERSION
486   $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
487 fi
488
489 $DESTINATION/tmp/system_ln "../../src/scripts/Make.depends" $DESTINATION/tmp/Make.depends
490 $DESTINATION/tmp/system_ln "../../src/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
491 $DESTINATION/tmp/system_ln "../../src/scripts/Makefile" $DESTINATION/tmp/Makefile
492 $DESTINATION/tmp/system_ln "../../src/scripts/Make.tau" $DESTINATION/tmp/Make.tau
493 touch $DESTINATION/tmp/Makefile.machine
494
495 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
496 Echo "Generating $ConvUsr"
497 echo > $ConvUsr
498 if test -n "$LIBDIR" 
499 then
500   echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
501   echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
502 fi
503 if test -n "$INCDIR" 
504 then
505   echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
506   echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
507 fi
508 chmod +x $ConvUsr
509
510 # Create conv-mach-opt headers with special build-time options
511 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
512 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
513 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
514 then
515   Echo "Generating $ConvHeader, conv-mach-opt.sh"
516   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
517   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
518   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
519 fi
520 if test -n "$COMPILER"
521 then
522       i="$COMPILER"
523       echo '#include "'cc-$i.h'"' >> $ConvHeader
524       echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
525 fi
526 if test -n "$BOPTS"
527 then
528     for i in $BOPTS
529     do
530       echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
531       echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
532     done
533 fi
534
535 if test  -n "$BUILD_SHARED" 
536 then
537     echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
538 fi
539
540 if test  -n "$WITH_ROMIO" 
541 then
542     echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
543 fi
544
545 if test -n "$WITH_PRODUCTION"
546 then
547     echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
548     # Prepend optimize so that an explicit -no-optimize still works
549     OPTS="-optimize $OPTS"
550     CONFIG_OPTS="--disable-tracing --disable-replay $CONFIG_OPTS"
551 fi
552
553 # build with Tau
554 WITH_TAU=0
555 if [ "$PROGRAM" = "Tau" ]
556 then
557         Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
558         if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
559         then
560           #Setting up TAU trace library:
561           Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
562
563           WITH_TAU=1
564         else
565           Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
566           TAU_MAKEFILE=""
567         fi
568 fi
569 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
570 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
571
572 sed -e $SED_CHARMC src/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ src/scripts/Makefile && rm -f  .Makefile.$$
573 sed -e $SED_CHARMC src/scripts/charmc > .charmc.$$ && cp .charmc.$$ src/scripts/charmc && rm -f .charmc.$$
574
575 if test $WITH_TAU -eq 1
576 then
577     echo "#define CMK_WITH_TAU               1" >> $ConvHeader
578     echo "#define pthread_create             tau_pthread_create" >> $ConvHeader
579     echo "#define pthread_exit               tau_pthread_exit" >> $ConvHeader
580
581     echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
582 fi
583
584
585 echo $BASEVERSION > $DESTINATION/tmp/.vdir
586 echo $VERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
587
588 if test $BUILD_EMULATOR = 1
589 then
590   PROGRAM="$PROGRAM bigsim"
591 fi
592
593 printError()
594 {
595         Echo "-------------------------------------------------"
596         Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
597         Echo "to resolve the problems yourself, visit"
598         Echo "    http://charm.cs.uiuc.edu/"
599         Echo "for more information. Otherwise, email the developers at charm@cs.uiuc.edu"
600         exit $MAKEEXIT
601 }
602
603 echo 'BUILDOPTS="'$OPTS'"'  >> $ConvSh
604
605 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
606 cd $DESTINATION/tmp 
607 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
608 chmod +x config_opts.sh
609 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
610 MAKEEXIT=$?
611 [ $MAKEEXIT -ne 0 ] && printError
612
613 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
614 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
615 MAKEEXIT=$?
616 if [ $MAKEEXIT -eq 0 ]
617 then
618         Echo "-------------------------------------------------"
619         Echo "$PROGRAM built successfully."
620         Echo "Next, try out a sample program like" \
621              "$DESTINATION/tests/charm++/simplearrayhello"
622 else
623         printError
624 fi