added a new option --with-production, it add #define CMK_OPTIMIZE into ocnv-mach...
[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 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 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-amd64 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 "  --destination=DIR  build Charm++ inside DIR, by default the destination is <version>"
93   echo "  --suffix=DIR       append DIR to the destination directory of the Charm++ build"
94   echo "  --tau-makefile=FILE Specify which TAU stub makefile to use"
95   fi
96   echo ''
97   echo '<charmc-options>: normal compiler options e.g. -g -O -save -verbose'
98   if test $more = 1
99   then
100   echo ''
101   echo 'Examples:'
102   echo "1. display all supported options for net-linux using 'help':"
103   echo '  ./build charm++ net-linux help'
104   echo '2. compile Charm++ on Linux with optimizations:'
105   echo '  ./build charm++ net-linux -O -DCMK_OPTIMIZE'
106   echo '3. compile Charm++ for Linux clustermatic Beowulf cluster with Intel compiler:'
107   echo '  ./build charm++ net-linux clustermatic icc -O'
108   echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
109   echo '  ./build charm++ mpi-linux-ia64 gm -O'
110   echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
111   echo '  ./build charm++ net-win32 -O'
112   echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
113   echo '  MAKE=gmake  ./build charm++ mpi-sp -j4 -O            # sh'
114   echo '  setenv MAKE gmake;  ./build charm++ mpi-sp -j4 -O    # csh'
115   echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
116   echo '  ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -O'
117   echo '   or in short,'
118   echo '  ./build charm++ mpi-linux --basedir /usr/local/mpich -O'
119   echo '  ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
120   echo ''
121   echo 'Note: This script:'
122   echo ' 1. Creates directories <destination> and <destination>/tmp'
123   echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
124   echo ' 3. Does a "make basics" in <destination>/tmp.'
125   echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
126   echo "That's all build does.  The rest is handled by the Makefile."
127   echo ''
128   echo 'Thank you for using Charm++, please send questions or comments to '
129   echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
130   echo '(email: charm@cs.uiuc.edu).'
131
132   else
133   echo ''
134   echo "To get more detailed help, run ./build --help"
135   fi
136 }
137
138 Echo() {
139     [ "x$QUIET" = "x--quiet" ] || echo $*
140 }
141
142 printOption() {
143   for prefix in cc conv-mach
144   do
145     str="Supported compilers:"
146     [ "$prefix" = "conv-mach" ] && str="Supported options:"
147     opts=""
148     for dir in $OPT_DIRS
149     do
150 #         echo "Checking for $prefix in $dir"
151           files=`cd $dir; ls $prefix-*.h 2>/dev/null`
152           opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
153     done 
154     tmp=.tmp.$$
155     rm -f $tmp; touch $tmp
156     for o in $opts
157     do
158       echo $o >> $tmp
159     done
160     opts=`sort $tmp | uniq`
161     rm -f $tmp
162     echo $str $opts
163   done
164   exit 1
165 }
166
167 CheckDir() {
168   for d in $*
169   do
170     if test ! -d $d
171     then
172       echo Error: cannot find $d!
173       exit 1
174     fi
175   done
176 }
177
178 TestIfCompiler() {
179   for dir in $OPT_DIRS
180   do
181     [ -f $dir/cc-$1.sh ] && return 1
182   done  
183   return 0
184 }
185
186 TestIfOption() {
187   for dir in $OPT_DIRS
188   do
189     [ -f $dir/conv-mach-$1.h ] && return 1 
190   done
191   
192   echo "Error> option: $1 is not supported in this version!"; 
193   printOption
194 }
195
196
197 # start
198
199 MAKEOPTS=""
200 OPTS=""
201 BOPTS=""
202 MORE=""
203 COMPILER=""
204 BASEDIR=
205 LIBDIR=
206 INCDIR=
207 ARCH=
208 BUILD_SHARED=
209 WITH_ROMIO=
210 WITH_PRODUCTION=
211 BUILD_EMULATOR=0
212 DESTINATION=""
213 DESTINATION_SUFFIX=""
214 TAU_MAKEFILE=""
215 QUIET=""
216
217 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | more && exit 1
218 [ $# -lt 2 ] && ./smart-build.pl && exit 1
219 PROGRAM=$1
220 shift
221 VERSION=$1; BASEVERSION=$1; 
222 if test -f $src/$BASEVERSION/vdir_link
223 then
224   BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
225 fi
226 ARCH=`echo $1 | sed -e 's@-.*@@'`
227 shift
228
229 #echo $src
230 #echo $BASEVERSION
231 #echo $ARCH
232
233 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
234
235 while [ ! $# -eq 0 ]
236 do
237   case "$1" in
238     "--basedir")
239                 shift; 
240                 for dir in $1
241                 do
242                   CheckDir $dir/include $dir/lib
243                   LIBDIR="$LIBDIR -L$dir/lib";
244                   INCDIR="$INCDIR -I$dir/include"
245                 done
246                 shift
247                 ;;
248     --basedir=*)
249                 basedir=`echo $1 | awk -F= '{print $2}'`
250                 for dir in $basedir
251                 do
252                   CheckDir $dir/include $dir/lib
253                   LIBDIR="$LIBDIR -L$dir/lib";
254                   INCDIR="$INCDIR -I$dir/include"
255                 done
256                 shift
257                 ;;
258     "--libdir")
259                 shift; CheckDir $1
260                 for dir in $1
261                 do
262                   LIBDIR="$LIBDIR -L$dir"; 
263                 done
264                 shift
265                 ;;
266     --libdir=*)
267                 libdir=`echo $1 | awk -F= '{print $2}'`
268                 CheckDir $libdir
269                 for dir in $libdir
270                 do
271                   LIBDIR="$LIBDIR -L$dir"; 
272                 done
273                 shift
274                 ;;
275     "--incdir")
276                 shift; CheckDir $1
277                 for dir in $1
278                 do
279                   INCDIR="$INCDIR -I$dir"; 
280                 done
281                 shift
282                 ;;
283     --incdir=*)
284                 incdir=`echo $1 | awk -F= '{print $2}'`
285                 CheckDir $incdir
286                 for dir in $incdir
287                 do
288                   INCDIR="$INCDIR -I$dir"; 
289                 done
290                 shift
291                 ;;
292     --no-build-shared|-nobs|--no-shared)
293                 BUILD_SHARED="-nobs"; shift
294                 ;;
295     --with-romio)
296                 WITH_ROMIO="true"; shift
297                 ;;
298     --with-production)
299                 WITH_PRODUCTION="true" 
300                 shift
301                 ;;
302     --build-shared|-bs)
303                 # obsolete, do nothing
304                 shift
305                 ;;
306     --destination)
307                 shift
308                 DESTINATION="$1"
309                 shift
310                 ;;
311     --destination=*)
312                 DESTINATION="`echo $1 | awk -F= '{print $2}'`"
313                 shift
314                 ;;
315     --suffix)
316                 shift
317                 DESTINATION_SUFFIX="$1"
318                 shift
319                 ;;
320     --suffix=*)
321                 DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
322                 shift
323                 ;;
324     --tau-makefile)
325                 TAU_MAKEFILE=$1
326                 shift
327                 ;;
328     --tau-makefile=*)
329                 TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
330                 shift
331                 ;;
332     --quiet)
333                 MAKEOPTS="$MAKEOPTS --quiet"
334                 QUIET="--quiet"
335                 shift;
336                 ;;
337     -j*)
338                 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
339                 MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
340                 shift;
341                 ;;
342     -*) 
343 # We hit a real compiler option (like -g, or -Dfoo),
344 # so just copy over all remaining options
345           while [ ! $# -eq 0 ]
346           do
347             OPTS="$OPTS $1"; shift
348           done
349           ;;
350     "help")
351         printOption
352         ;;
353     *)
354 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
355         TestIfCompiler $1
356         if [ $? -eq 1 ] 
357         then
358 # It specifies a compiler:
359           if [ ! -z "$COMPILER" ] 
360           then
361               echo "Error> Tried to specify two compilers: $COMPILER and $1"
362               printOption
363           fi
364           COMPILER=$1
365         else
366 # It specifies some other option:
367           TestIfOption $1
368           BOPTS="$BOPTS $1"
369           [ $1 =  "bigemulator" ] && BUILD_EMULATOR=1
370         fi
371         shift
372         ;;
373   esac
374 done
375
376 [ "x$VERSION" = "x" ] && syntax && exit 1
377
378 if [ -z "$MAKE" ] 
379 then
380   # prefer gmake
381   MAKE=`which gmake 2>/dev/null`
382   [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
383 fi
384
385 if [ ! -f $src/$BASEVERSION/conv-mach.h ] 
386 then
387   if [ "x_$BASEVERSION" = "x_net-rs6k" ]
388   then
389     echo "Error> build net-aix-ppc instead of net-rs6k!" 
390   else
391     echo "Error> build can not find arch: $BASEVERSION!" 
392   fi
393   exit 1
394 fi
395
396 #generate VERSION name combining all the build-time options.
397 if [ -n "$BOPTS" -o -n "$COMPILER" ]
398 then
399   echo "Selected Compiler: $COMPILER"
400   echo "Selected Options: $BOPTS"
401   SORTED=`echo $BOPTS | awk  '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
402   BOPTS_WITHCOMPILER=`echo $SORTED $COMPILER`
403   for i in $BOPTS_WITHCOMPILER
404   do
405     VERSION=$VERSION-$i
406   done
407 fi
408
409 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
410
411 if [ -z "$DESTINATION" ]
412 then
413   DESTINATION="$VERSION"
414 fi
415
416 if [ -n "$DESTINATION_SUFFIX" ]
417 then
418   DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
419 fi
420
421 [ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
422 [ -d $DESTINATION ] || mkdir $DESTINATION
423 [ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
424 [ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
425
426 Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
427 rm -f $DESTINATION/tmp/Makefile
428 rm -f $DESTINATION/tmp/Make.depends
429 rm -f $DESTINATION/tmp/Make.lb
430 rm -f $DESTINATION/tmp/Make.machine
431
432
433 # Create the bin, lib, include, etc. links:
434 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
435 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
436 then
437 #Win32/64 version needs special compilers and *copied* (not linked)
438 # source files.
439         echo "Copying compilers for $WINNAME into cygwin /bin directory"
440         cp -f $src/$WINNAME/unix2nt* /bin
441         cp $src/win32/system_ln $DESTINATION/tmp
442         cp $src/win32/unistd.h $DESTINATION/tmp
443         echo "Compiling createlink.cpp ..."
444         (cd $src/win32; unix2nt_cc  -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o)
445         if test ! -x $src/win32/createlink.exe
446         then
447                 echo "VC++ is not properly installed!"
448                 exit 1
449         fi
450         echo "Copying $src/win32/createlink.exe to /bin directory"
451         cp $src/win32/createlink.exe /bin
452         chmod +x $DESTINATION/tmp/system_ln
453 else
454         cat > $DESTINATION/tmp/system_ln <<EOF
455 #!/bin/sh
456 ln -f -s \$@
457 EOF
458   chmod +x $DESTINATION/tmp/system_ln
459   for newdir in `echo bin lib lib_so include tmp`
460   do
461     Echo "Soft-linking over $newdir"
462     if [ -r $newdir ]
463     then
464       rm -fr $newdir || exit 1
465     fi
466     $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
467   done
468   rm -f VERSION
469   $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
470 fi
471
472 $DESTINATION/tmp/system_ln "../../src/scripts/Make.depends" $DESTINATION/tmp/Make.depends
473 $DESTINATION/tmp/system_ln "../../src/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
474 $DESTINATION/tmp/system_ln "../../src/scripts/Makefile" $DESTINATION/tmp/Makefile
475 $DESTINATION/tmp/system_ln "../../src/scripts/Make.tau" $DESTINATION/tmp/Make.tau
476 touch $DESTINATION/tmp/Makefile.machine
477
478 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
479 Echo "Generating $ConvUsr"
480 echo > $ConvUsr
481 if test -n "$LIBDIR" 
482 then
483   echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
484   echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
485 fi
486 if test -n "$INCDIR" 
487 then
488   echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
489   echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
490 fi
491 chmod +x $ConvUsr
492
493 # Create conv-mach-opt headers with special build-time options
494 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
495 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
496 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
497 then
498   Echo "Generating $ConvHeader, conv-mach-opt.sh"
499   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
500   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
501   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
502 fi
503 if test -n "$COMPILER"
504 then
505       i="$COMPILER"
506       echo '#include "'cc-$i.h'"' >> $ConvHeader
507       echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
508 fi
509 if test -n "$BOPTS"
510 then
511     for i in $BOPTS
512     do
513       echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
514       echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
515     done
516 fi
517
518 if test  -n "$BUILD_SHARED" 
519 then
520     echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
521 fi
522
523 if test  -n "$WITH_ROMIO" 
524 then
525     echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
526 fi
527
528 if test -n "$WITH_PRODUCTION"
529 then
530     echo '#define CMK_OPTIMIZE' >> $ConvHeader
531 fi
532
533 # build with Tau
534 WITH_TAU=0
535 if [ "$PROGRAM" = "Tau" ]
536 then
537         Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
538         if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
539         then
540           #Setting up TAU trace library:
541           Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
542
543           WITH_TAU=1
544         else
545           Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
546           TAU_MAKEFILE=""
547         fi
548 fi
549 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
550 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
551
552 sed -e $SED_CHARMC src/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ src/scripts/Makefile && rm -f  .Makefile.$$
553 sed -e $SED_CHARMC src/scripts/charmc > .charmc.$$ && cp .charmc.$$ src/scripts/charmc && rm -f .charmc.$$
554
555 if test $WITH_TAU -eq 1
556 then
557     echo "#define CMK_WITH_TAU               1" >> $ConvHeader
558     echo "#define pthread_create             tau_pthread_create" >> $ConvHeader
559     echo "#define pthread_exit               tau_pthread_exit" >> $ConvHeader
560
561     echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
562 fi
563
564
565 echo $BASEVERSION > $DESTINATION/tmp/.vdir
566 echo $VERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
567
568 if test $BUILD_EMULATOR = 1
569 then
570   PROGRAM="$PROGRAM bigsim"
571 fi
572
573 printError()
574 {
575         Echo "-------------------------------------------------"
576         Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
577         Echo "to resolve the problems yourself, visit"
578         Echo "    http://charm.cs.uiuc.edu/"
579         Echo "for more information. Otherwise, email the developers at charm@cs.uiuc.edu"
580         exit $MAKEEXIT
581 }
582
583 echo 'BUILDOPTS="'$OPTS'"'  >> $ConvSh
584
585 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET"' in $VERSION/tmp"
586 cd $DESTINATION/tmp 
587 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
588 MAKEEXIT=$?
589 [ $MAKEEXIT -ne 0 ] && printError
590
591 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $VERSION/tmp"
592 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
593 MAKEEXIT=$?
594 if [ $MAKEEXIT -eq 0 ]
595 then
596         Echo "-------------------------------------------------"
597         Echo "$PROGRAM built successfully."
598         Echo "Next, try out a sample program like" \
599              "$DESTINATION/tests/charm++/simplearrayhello"
600 else
601         printError
602 fi