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