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