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