change charm to not build shared library form by default. build with --build-shared...
[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 'Enable/disable features:'
87   src/scripts/configure --help | grep enable-
88   src/scripts/configure --help | grep with-
89   echo "  --with-production       build Charm++ with all optimizations for maximum performance, and disabling all above features"
90   echo ''
91   echo 'Miscellaneous options:'
92   echo '  --incdir=DIR       specify additional include path for compiler'
93   echo '  --libdir=DIR       specify additional lib path for compiler'
94   echo '  --basedir=DIR      shortcut for the above two - DIR/include and DIR/lib'
95   echo '  -j[N]              parallel make, N is the number of paralle make jobs'
96   echo "  --with-romio       build AMPI with ROMIO library"
97   echo "  --destination=DIR  build Charm++ inside DIR, by default the destination is <version>"
98   echo "  --suffix=DIR       append DIR to the destination directory of the Charm++ build"
99   echo "  --tau-makefile=FILE Specify which TAU stub makefile to use"
100   fi
101   echo ''
102   echo '<charmc-options>: normal compiler options e.g. -g -O -save -verbose'
103   if test $more = 1
104   then
105   echo ''
106   echo 'Examples:'
107   echo "1. display all supported options for net-linux-x86_64 using 'help':"
108   echo '  ./build charm++ net-linux-x86_64 help'
109   echo '2. compile Charm++ on Linux with optimizations:'
110   echo '  ./build charm++ net-linux-x86_64 -O -DCMK_OPTIMIZE'
111   echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler:'
112   echo '  ./build charm++ net-linux clustermatic icc -O'
113   echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
114   echo '  ./build charm++ mpi-linux-ia64 gm -O'
115   echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
116   echo '  ./build charm++ net-win32 -O'
117   echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
118   echo '  MAKE=gmake  ./build charm++ mpi-sp -j4 -O            # sh'
119   echo '  setenv MAKE gmake;  ./build charm++ mpi-sp -j4 -O    # csh'
120   echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
121   echo '  ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -O'
122   echo '   or in short,'
123   echo '  ./build charm++ mpi-linux --basedir /usr/local/mpich -O'
124   echo '  ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
125   echo ''
126   echo 'Note: This script:'
127   echo ' 1. Creates directories <destination> and <destination>/tmp'
128   echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
129   echo ' 3. Does a "make basics" in <destination>/tmp.'
130   echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
131   echo "That's all build does.  The rest is handled by the Makefile."
132   echo ''
133   echo 'Thank you for using Charm++, please send questions or comments to '
134   echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
135   echo '(email: charm@cs.uiuc.edu).'
136
137   else
138   echo ''
139   echo "To get more detailed help, run ./build --help"
140   fi
141 }
142
143 Echo() {
144     [ "x$QUIET" = "x--quiet" ] || echo $*
145 }
146
147 printOption() {
148   for prefix in cc conv-mach
149   do
150     str="Supported compilers:"
151     [ "$prefix" = "conv-mach" ] && str="Supported options:"
152     opts=""
153     for dir in $OPT_DIRS
154     do
155 #         echo "Checking for $prefix in $dir"
156           files=`cd $dir; ls $prefix-*.h 2>/dev/null`
157           opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
158     done 
159     tmp=.tmp.$$
160     rm -f $tmp; touch $tmp
161     for o in $opts
162     do
163       echo $o >> $tmp
164     done
165     opts=`sort $tmp | uniq`
166     rm -f $tmp
167     echo $str $opts
168   done
169   exit 1
170 }
171
172 CheckDir() {
173   for d in $*
174   do
175     if test ! -d $d
176     then
177       echo Error: cannot find $d!
178       exit 1
179     fi
180   done
181 }
182
183 TestIfCompiler() {
184   for dir in $OPT_DIRS
185   do
186     [ -f $dir/cc-$1.sh ] && return 1
187   done  
188   return 0
189 }
190
191 TestIfOption() {
192   for dir in $OPT_DIRS
193   do
194     [ -f $dir/conv-mach-$1.h ] && return 1 
195   done
196   
197   echo "Error> option: $1 is not supported in this version!"; 
198   printOption
199 }
200
201
202 # start
203
204 MAKEOPTS=""
205 OPTS=""
206 BOPTS=""
207 MORE=""
208 COMPILER=""
209 BASEDIR=
210 LIBDIR=
211 INCDIR=
212 ARCH=
213 BUILD_SHARED=""             # default no shared lib
214 WITH_ROMIO=
215 WITH_PRODUCTION=
216 BUILD_EMULATOR=0
217 DESTINATION=""
218 DESTINATION_SUFFIX=""
219 TAU_MAKEFILE=""
220 QUIET=""
221
222 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | more && exit 1
223 [ $# -lt 2 ] && ./smart-build.pl && exit 1
224 PROGRAM=$1
225 shift
226 VERSION=$1; BASEVERSION=$1; 
227 if test -f $src/$BASEVERSION/vdir_link
228 then
229   BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
230 fi
231 ARCH=`echo $1 | sed -e 's@-.*@@'`
232 shift
233
234 #echo $src
235 #echo $BASEVERSION
236 #echo $ARCH
237
238 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
239
240 while [ ! $# -eq 0 ]
241 do
242   case "$1" in
243     "--basedir")
244                 shift; 
245                 for dir in $1
246                 do
247                   CheckDir $dir/include $dir/lib
248                   LIBDIR="$LIBDIR -L$dir/lib";
249                   INCDIR="$INCDIR -I$dir/include"
250                 done
251                 shift
252                 ;;
253     --basedir=*)
254                 basedir=`echo $1 | awk -F= '{print $2}'`
255                 for dir in $basedir
256                 do
257                   CheckDir $dir/include $dir/lib
258                   LIBDIR="$LIBDIR -L$dir/lib";
259                   INCDIR="$INCDIR -I$dir/include"
260                 done
261                 shift
262                 ;;
263     "--libdir")
264                 shift; CheckDir $1
265                 for dir in $1
266                 do
267                   LIBDIR="$LIBDIR -L$dir"; 
268                 done
269                 shift
270                 ;;
271     --libdir=*)
272                 libdir=`echo $1 | awk -F= '{print $2}'`
273                 CheckDir $libdir
274                 for dir in $libdir
275                 do
276                   LIBDIR="$LIBDIR -L$dir"; 
277                 done
278                 shift
279                 ;;
280     "--incdir")
281                 shift; CheckDir $1
282                 for dir in $1
283                 do
284                   INCDIR="$INCDIR -I$dir"; 
285                 done
286                 shift
287                 ;;
288     --incdir=*)
289                 incdir=`echo $1 | awk -F= '{print $2}'`
290                 CheckDir $incdir
291                 for dir in $incdir
292                 do
293                   INCDIR="$INCDIR -I$dir"; 
294                 done
295                 shift
296                 ;;
297     --no-build-shared|--no-shared)
298                 #BUILD_SHARED="-no-build-shared"; 
299                 shift
300                 ;;
301     --build-shared)
302                 # obsolete, do nothing
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
468
469 # Create the bin, lib, include, etc. links:
470 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
471 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
472 then
473 #Win32/64 version needs special compilers and *copied* (not linked)
474 # source files.
475         echo "Copying compilers for $WINNAME into cygwin /bin directory"
476         cp -f $src/$WINNAME/unix2nt* /bin
477         cp $src/win32/system_ln $DESTINATION/tmp
478         cp $src/win32/unistd.h $DESTINATION/tmp
479         echo "Compiling createlink.cpp ..."
480         (cd $src/win32; unix2nt_cc  -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o)
481         if test ! -x $src/win32/createlink.exe
482         then
483                 echo "VC++ is not properly installed!"
484                 exit 1
485         fi
486         echo "Copying $src/win32/createlink.exe to /bin directory"
487         cp $src/win32/createlink.exe /bin
488         chmod +x $DESTINATION/tmp/system_ln
489         cp $src/win32/gathertree.local   $DESTINATION/tmp
490         cp $src/win32/gatherflat.local   $DESTINATION/tmp
491 else
492         cat > $DESTINATION/tmp/system_ln <<EOF
493 #!/bin/sh
494 ln -f -s \$@
495 EOF
496   chmod +x $DESTINATION/tmp/system_ln
497   for newdir in `echo bin lib lib_so include tmp`
498   do
499     Echo "Soft-linking over $newdir"
500     if [ -r $newdir ]
501     then
502       rm -fr $newdir || exit 1
503     fi
504     $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
505   done
506   rm -f VERSION
507   $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
508 fi
509
510 $DESTINATION/tmp/system_ln "../../src/scripts/Make.depends" $DESTINATION/tmp/Make.depends
511 $DESTINATION/tmp/system_ln "../../src/scripts/Make.cidepends" $DESTINATION/tmp/Make.cidepends
512 $DESTINATION/tmp/system_ln "../../src/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
513 $DESTINATION/tmp/system_ln "../../src/scripts/Makefile" $DESTINATION/tmp/Makefile
514 $DESTINATION/tmp/system_ln "../../src/scripts/Make.tau" $DESTINATION/tmp/Make.tau
515 touch $DESTINATION/tmp/Makefile.machine
516
517 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
518 Echo "Generating $ConvUsr"
519 echo > $ConvUsr
520 if test -n "$LIBDIR" 
521 then
522   echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
523   echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
524 fi
525 if test -n "$INCDIR" 
526 then
527   echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
528   echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
529 fi
530 chmod +x $ConvUsr
531
532 # Create conv-mach-opt headers with special build-time options
533 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
534 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
535 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
536 then
537   Echo "Generating $ConvHeader, conv-mach-opt.sh"
538   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
539   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
540   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
541 fi
542 if test -n "$COMPILER"
543 then
544       i="$COMPILER"
545       echo '#include "'cc-$i.h'"' >> $ConvHeader
546       echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
547 fi
548 if test -n "$BOPTS"
549 then
550     for i in $BOPTS
551     do
552       echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
553       echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
554     done
555 fi
556
557 if test  "$BUILD_SHARED"  = "-build-shared"
558 then
559     echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
560 else
561     echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
562 fi
563
564 if test  -n "$WITH_ROMIO" 
565 then
566     echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
567 fi
568
569 if test -n "$WITH_PRODUCTION"
570 then
571     echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
572     # Prepend optimize so that an explicit -no-optimize still works
573     OPTS="-optimize -production $OPTS"
574     CONFIG_OPTS="--disable-controlpoint --disable-tracing --disable-charmdebug --disable-replay --disable-error-checking $CONFIG_OPTS"
575 fi
576
577 # build with Tau
578 WITH_TAU=0
579 if [ "$PROGRAM" = "Tau" ]
580 then
581         Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
582         if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
583         then
584           #Setting up TAU trace library:
585           Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
586
587           WITH_TAU=1
588         else
589           Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
590           TAU_MAKEFILE=""
591         fi
592 fi
593 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
594 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
595
596 sed -e $SED_CHARMC src/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ src/scripts/Makefile && rm -f  .Makefile.$$
597 sed -e $SED_CHARMC src/scripts/charmc > .charmc.$$ && cp .charmc.$$ src/scripts/charmc && rm -f .charmc.$$
598
599 if test $WITH_TAU -eq 1
600 then
601     echo "#define CMK_WITH_TAU               1" >> $ConvHeader
602     echo "#define pthread_create             tau_pthread_create" >> $ConvHeader
603     echo "#define pthread_exit               tau_pthread_exit" >> $ConvHeader
604
605     echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
606 fi
607
608
609 echo $BASEVERSION > $DESTINATION/tmp/.vdir
610 echo $VERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
611
612 if test $BUILD_EMULATOR = 1
613 then
614   PROGRAM="$PROGRAM bigsim"
615 #  CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
616 fi
617
618 printError()
619 {
620         Echo "-------------------------------------------------"
621         Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
622         Echo "to resolve the problems yourself, visit"
623         Echo "    http://charm.cs.uiuc.edu/"
624         Echo "for more information. Otherwise, email the developers at charm@cs.uiuc.edu"
625         exit $MAKEEXIT
626 }
627
628 echo 'BUILDOPTS="'$OPTS'"'  >> $ConvSh
629
630 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
631 cd $DESTINATION/tmp 
632 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
633 chmod +x config_opts.sh
634 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
635 MAKEEXIT=$?
636 [ $MAKEEXIT -ne 0 ] && printError
637
638 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
639 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
640 MAKEEXIT=$?
641 if [ $MAKEEXIT -eq 0 ]
642 then
643         Echo "-------------------------------------------------"
644         Echo "$PROGRAM built successfully."
645         Echo "Next, try out a sample program like" \
646              "$DESTINATION/tests/charm++/simplearrayhello"
647 else
648         printError
649 fi