Merge last phase of static array optimization branch
[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                 BUILD_SHARED="-build-shared"; 
303                 shift
304                 ;;
305     --with-romio)
306                 WITH_ROMIO="true"; shift
307                 ;;
308     --with-production)
309                 WITH_PRODUCTION="true" 
310                 shift
311                 ;;
312     --with-*)
313                 CONFIG_OPTS="$CONFIG_OPTS $1"
314                 shift
315                 ;;
316     --without-*)
317                 CONFIG_OPTS="$CONFIG_OPTS $1"
318                 shift
319                 ;;
320     --destination)
321                 shift
322                 DESTINATION="$1"
323                 shift
324                 ;;
325     --destination=*)
326                 DESTINATION="`echo $1 | awk -F= '{print $2}'`"
327                 shift
328                 ;;
329     --suffix)
330                 shift
331                 DESTINATION_SUFFIX="$1"
332                 shift
333                 ;;
334     --suffix=*)
335                 DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
336                 shift
337                 ;;
338     --tau-makefile)
339                 TAU_MAKEFILE=$1
340                 shift
341                 ;;
342     --tau-makefile=*)
343                 TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
344                 shift
345                 ;;
346     --quiet)
347                 MAKEOPTS="$MAKEOPTS --quiet"
348                 QUIET="--quiet"
349                 shift;
350                 ;;
351     --enable-tracing|--enable-tracing=*)
352                 CONFIG_OPTS="$CONFIG_OPTS $1"
353                 ENABLE_TRACING=yes
354                 shift
355                 ;;
356     --enable-*)
357                 CONFIG_OPTS="$CONFIG_OPTS $1"
358                 shift
359                 ;;
360     --disable-*)
361                 CONFIG_OPTS="$CONFIG_OPTS $1"
362                 shift
363                 ;;
364     -j*)
365                 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
366                 MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
367                 shift;
368                 ;;
369     -*) 
370 # We hit a real compiler option (like -g, or -Dfoo),
371 # so just copy over all remaining options
372           while [ ! $# -eq 0 ]
373           do
374             OPTS="$OPTS $1"; shift
375           done
376           ;;
377     "help")
378         printOption
379         ;;
380     *)
381 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
382         TestIfCompiler $1
383         if [ $? -eq 1 ] 
384         then
385 # It specifies a compiler:
386           if [ ! -z "$COMPILER" ] 
387           then
388               echo "Error> Tried to specify two compilers: $COMPILER and $1"
389               printOption
390           fi
391           COMPILER=$1
392         else
393 # It specifies some other option:
394           TestIfOption $1
395           BOPTS="$BOPTS $1"
396           [ $1 =  "bigemulator" ] && BUILD_EMULATOR=1
397           [ $1 =  "bigsim" ] && BUILD_EMULATOR=1
398         fi
399         shift
400         ;;
401   esac
402 done
403
404 [ "x$VERSION" = "x" ] && syntax && exit 1
405
406 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
407 then
408   echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
409   exit 1
410 fi
411
412 if [ -z "$MAKE" ] 
413 then
414   # prefer gmake
415   MAKE=`which gmake 2>/dev/null`
416   [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
417 fi
418
419 if [ ! -f $src/$BASEVERSION/conv-mach.h ] 
420 then
421   if [ "x_$BASEVERSION" = "x_net-rs6k" ]
422   then
423     echo "Error> build net-aix-ppc instead of net-rs6k!" 
424   else
425     echo "Error> build can not find arch: $BASEVERSION!" 
426   fi
427   exit 1
428 fi
429
430 #generate VERSION name combining all the build-time options.
431 if [ -n "$BOPTS" -o -n "$COMPILER" ]
432 then
433   echo "Selected Compiler: $COMPILER"
434   echo "Selected Options: $BOPTS"
435   SORTED=`echo $BOPTS | awk  '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
436   BOPTS_WITHCOMPILER=`echo $SORTED $COMPILER`
437   for i in $BOPTS_WITHCOMPILER
438   do
439     VERSION=$VERSION-$i
440   done
441 fi
442
443 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
444
445 if [ -z "$DESTINATION" ]
446 then
447   DESTINATION="$VERSION"
448 fi
449
450 if [ -n "$DESTINATION_SUFFIX" ]
451 then
452   DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
453 fi
454
455 [ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
456 [ -d $DESTINATION ] || mkdir $DESTINATION
457 [ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
458 [ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
459
460 Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
461 rm -f $DESTINATION/tmp/Makefile
462 rm -f $DESTINATION/tmp/Make.depends
463 rm -f $DESTINATION/tmp/Make.cidepends
464 rm -f $DESTINATION/tmp/Make.lb
465 rm -f $DESTINATION/tmp/Make.machine
466
467
468 # Create the bin, lib, include, etc. links:
469 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
470 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
471 then
472 #Win32/64 version needs special compilers and *copied* (not linked)
473 # source files.
474         echo "Copying compilers for $WINNAME into cygwin /bin directory"
475         cp -f $src/$WINNAME/unix2nt* /bin
476         cp $src/win32/system_ln $DESTINATION/tmp
477         cp $src/win32/unistd.h $DESTINATION/tmp
478         echo "Compiling createlink.cpp ..."
479         (cd $src/win32; unix2nt_cc  -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o)
480         if test ! -x $src/win32/createlink.exe
481         then
482                 echo "VC++ is not properly installed!"
483                 exit 1
484         fi
485         echo "Copying $src/win32/createlink.exe to /bin directory"
486         cp $src/win32/createlink.exe /bin
487         chmod +x $DESTINATION/tmp/system_ln
488         cp $src/win32/gathertree.local   $DESTINATION/tmp
489         cp $src/win32/gatherflat.local   $DESTINATION/tmp
490 else
491         cat > $DESTINATION/tmp/system_ln <<EOF
492 #!/bin/sh
493 ln -f -s \$@
494 EOF
495   chmod +x $DESTINATION/tmp/system_ln
496   for newdir in `echo bin lib lib_so include tmp`
497   do
498     Echo "Soft-linking over $newdir"
499     if [ -r $newdir ]
500     then
501       rm -fr $newdir || exit 1
502     fi
503     $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
504   done
505   rm -f VERSION
506   $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
507 fi
508
509 $DESTINATION/tmp/system_ln "../../src/scripts/Make.depends" $DESTINATION/tmp/Make.depends
510 $DESTINATION/tmp/system_ln "../../src/scripts/Make.cidepends" $DESTINATION/tmp/Make.cidepends
511 $DESTINATION/tmp/system_ln "../../src/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
512 $DESTINATION/tmp/system_ln "../../src/scripts/Makefile" $DESTINATION/tmp/Makefile
513 $DESTINATION/tmp/system_ln "../../src/scripts/Make.tau" $DESTINATION/tmp/Make.tau
514 touch $DESTINATION/tmp/Makefile.machine
515
516 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
517 Echo "Generating $ConvUsr"
518 echo > $ConvUsr
519 if test -n "$LIBDIR" 
520 then
521   echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
522   echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
523 fi
524 if test -n "$INCDIR" 
525 then
526   echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
527   echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
528 fi
529 chmod +x $ConvUsr
530
531 # Create conv-mach-opt headers with special build-time options
532 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
533 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
534 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
535 then
536   Echo "Generating $ConvHeader, conv-mach-opt.sh"
537   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
538   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
539   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
540 fi
541 if test -n "$COMPILER"
542 then
543       i="$COMPILER"
544       echo '#include "'cc-$i.h'"' >> $ConvHeader
545       echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
546 fi
547 if test -n "$BOPTS"
548 then
549     for i in $BOPTS
550     do
551       echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
552       echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
553     done
554 fi
555
556 if test  "$BUILD_SHARED"  = "-build-shared"
557 then
558     echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
559 else
560     echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
561 fi
562
563 if test  -n "$WITH_ROMIO" 
564 then
565     echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
566 fi
567
568 if test -n "$WITH_PRODUCTION"
569 then
570     echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
571     # Prepend optimize so that an explicit -no-optimize still works
572     OPTS="-optimize -production $OPTS"
573     CONFIG_OPTS="--disable-controlpoint --disable-tracing --disable-charmdebug --disable-replay --disable-error-checking $CONFIG_OPTS"
574 fi
575
576 # build with Tau
577 WITH_TAU=0
578 if [ "$PROGRAM" = "Tau" ]
579 then
580         Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
581         if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
582         then
583           #Setting up TAU trace library:
584           Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
585
586           WITH_TAU=1
587         else
588           Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
589           TAU_MAKEFILE=""
590         fi
591 fi
592 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
593 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
594
595 sed -e $SED_CHARMC src/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ src/scripts/Makefile && rm -f  .Makefile.$$
596 sed -e $SED_CHARMC src/scripts/charmc > .charmc.$$ && cp .charmc.$$ src/scripts/charmc && rm -f .charmc.$$
597
598 if test $WITH_TAU -eq 1
599 then
600     echo "#define CMK_WITH_TAU               1" >> $ConvHeader
601     echo "#define pthread_create             tau_pthread_create" >> $ConvHeader
602     echo "#define pthread_exit               tau_pthread_exit" >> $ConvHeader
603
604     echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
605 fi
606
607
608 echo $BASEVERSION > $DESTINATION/tmp/.vdir
609 echo $VERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
610
611 if test $BUILD_EMULATOR = 1
612 then
613   PROGRAM="$PROGRAM bigsim"
614 #  CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
615 fi
616
617 printError()
618 {
619         Echo "-------------------------------------------------"
620         Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
621         Echo "to resolve the problems yourself, visit"
622         Echo "    http://charm.cs.uiuc.edu/"
623         Echo "for more information. Otherwise, email the developers at charm@cs.uiuc.edu"
624         exit $MAKEEXIT
625 }
626
627 echo 'BUILDOPTS="'$OPTS'"'  >> $ConvSh
628
629 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
630 cd $DESTINATION/tmp 
631 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
632 chmod +x config_opts.sh
633 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
634 MAKEEXIT=$?
635 [ $MAKEEXIT -ne 0 ] && printError
636
637 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
638 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
639 MAKEEXIT=$?
640 if [ $MAKEEXIT -eq 0 ]
641 then
642         Echo "-------------------------------------------------"
643         Echo "$PROGRAM built successfully."
644         Echo "Next, try out a sample program like" \
645              "$DESTINATION/tests/charm++/simplearrayhello"
646 else
647         printError
648 fi