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