doc: Add serial to list of ci file reserved words
[charm.git] / build
diff --git a/build b/build
index f1fb7ab78232b4d57be115c69ffc193e02caeeee..97e692ddab14927dec5367658e7ce2778fdfc289 100755 (executable)
--- a/build
+++ b/build
@@ -9,7 +9,7 @@ syntax() {
   echo ''
   echo 'Usage: build <target> <version> <options> [charmc-options ...]'
   echo ''
   echo ''
   echo 'Usage: build <target> <version> <options> [charmc-options ...]'
   echo ''
-  echo '<targets>: converse charm++ LIBS AMPI FEM bluegene pose'
+  echo '<targets>: converse charm++ LIBS AMPI FEM bigemulator pose jade msa'
   echo '<targets>: doc ps-doc pdf-doc html-doc'
   if test $more = 1
   then
   echo '<targets>: doc ps-doc pdf-doc html-doc'
   if test $more = 1
   then
@@ -18,22 +18,27 @@ syntax() {
   echo '  AMPI            compile Adaptive MPI on top of Charm++'
   echo '  FEM             compile FEM framework'
   echo '  LIBS            compile additional parallel libraries with Charm++ core'
   echo '  AMPI            compile Adaptive MPI on top of Charm++'
   echo '  FEM             compile FEM framework'
   echo '  LIBS            compile additional parallel libraries with Charm++ core'
-  echo '  bluegene        build additional BigSim libraries'
+  echo '  bigemulator     build additional BigSim libraries'
   echo '  pose            build POSE parallel discrete event simulator'
   echo '  pose            build POSE parallel discrete event simulator'
+  echo '  jade            build Jade compiler (auto-builds charm++, msa)'
+  echo '  msa             build Multiphase Shared Arrays(MSA) library'
+  echo '  Tau             build the TAU tracing library for generating TAU performance data' 
+  echo '  ChaNGa          compile Charm++ core and necessary libraries for ChaNGa'
   echo ''
   fi
   echo '<versions>: ' 
   echo ''
   fi
   echo '<versions>: ' 
-  ( cd $src ; ls -1 | egrep -v '(^CVS)|(^shmem$)|(^mpi$)|(^sim$)|(^net$)|(^elan$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win32$)|(^paragon$)|(^vmi$)' | pr -3 -t )
+  ( 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 )
   echo ''
   echo '<options>: compiler and platform specific options'
   echo ''
   echo '<options>: compiler and platform specific options'
-  echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 mpcc'
-  echo 'help smp gm tcp vmi scyld clustermatic opteron bluegene ooc syncft'
-  echo '--incdir --libdir --basedir --no-build-shared -j'
+  echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 gcc4 mpcc pathscale clang'
+  echo 'help smp gm tcp vmi scyld clustermatic bigemulator ooc syncft mlogft causalft'
+  echo 'papi pthreads lam'
+  echo '--incdir --libdir --basedir --build-shared --destination --suffix -j'
   if test $more = 1
   then
   echo ''
   echo 'For platform specific options, use help option:'
   if test $more = 1
   then
   echo ''
   echo 'For platform specific options, use help option:'
-  echo '  help           platform specific help, e.g. ./build charm++ net-linux help'
+  echo '  help           platform specific help, e.g. ./build charm++ net-linux-x86_64 help'
   echo ''
   echo 'Choose a compiler (only one option is allowed from this section):'
   echo '  cc, cc64        For Sun WorkShop C++ 32/64 bit compilers'
   echo ''
   echo 'Choose a compiler (only one option is allowed from this section):'
   echo '  cc, cc64        For Sun WorkShop C++ 32/64 bit compilers'
@@ -43,32 +48,57 @@ syntax() {
   echo '  acc             HP aCC compiler'
   echo '  icc             Intel C/C++ compiler for Linux IA32'
   echo '  ecc             Intel C/C++ compiler for Linux IA64'
   echo '  acc             HP aCC compiler'
   echo '  icc             Intel C/C++ compiler for Linux IA32'
   echo '  ecc             Intel C/C++ compiler for Linux IA64'
-  echo '  gcc3            use gcc3 - GNU GCC/G++ version 3'
+  echo '  gcc3            GNU GCC/G++ version 3'
+  echo '  gcc4            GNU GCC/G++ version 4 (only mpi-crayxt3)'
   echo '  mpcc            SUN Solaris C++ compiler for MPI'
   echo '  mpcc            SUN Solaris C++ compiler for MPI'
+  echo '  pathscale       Pathscale compiler suite'
+  echo '  clang           Clang C/C++ compuler'
+  echo ''
+  echo 'Choose a fortran compile (only one option is allowed from this section):'
+  echo '  g95             G95 at http://ww.g95.org'
+  echo '  absoft          Absoft fortran compiler'
+  echo "  pgf90           Portland Group\'s Fortran compiler"
+  echo '  ifc             Intel Fortran compiler (older versions)'
+  echo '  ifort           Intel Fortran compiler (newer versions)'
   echo ''
   echo 'Platform specific options (choose multiple if apply):'
   echo ''
   echo 'Platform specific options (choose multiple if apply):'
-  echo '  opteron         compile for AMD Opteron'
+  echo '  lam             Use LAM MPI'
   echo '  smp             support for SMP, multithreaded charm on each node'
   echo '  smp             support for SMP, multithreaded charm on each node'
+  echo '  mpt             use SGI Message Passing Toolkit (only for mpi version)'
   echo '  gm              use Myrinet for communication'
   echo '  gm              use Myrinet for communication'
-  echo '  tcp             use TCP sockets for communication (ony for net version)'
+  echo '  tcp             use TCP sockets for communication (only for net version)'
+  echo '  ibverbs         use the Infiniband OpenIB layer for communication (only for net-linux-x86_64 currently)'
   echo "  vmi             use NCSA's VMI for communication (only for mpi version)"
   echo '  scyld           compile for Scyld Beowulf cluster based on bproc'
   echo '  clustermatic    compile for Clustermatic (support version 3 and 4) '
   echo "  vmi             use NCSA's VMI for communication (only for mpi version)"
   echo '  scyld           compile for Scyld Beowulf cluster based on bproc'
   echo '  clustermatic    compile for Clustermatic (support version 3 and 4) '
+  echo '  pthreads        compile with pthreads Converse threads'
   echo ''
   echo 'Advanced options:'
   echo ''
   echo 'Advanced options:'
-  echo '  bluegene       compile for BigSim (Blue Gene) simulator'
+  echo '  bigemulator    compile for BigSim simulator'
   echo '  ooc            compile with out of core support'
   echo '  syncft         compile with Charm++ fault tolerance support'
   echo '  ooc            compile with out of core support'
   echo '  syncft         compile with Charm++ fault tolerance support'
+  echo '  mlogft         compile with Charm++ message logging fault tolerance support'
+  echo '  papi            compile with PAPI performance counter support (if any)'
   echo ''
   echo "Charm++ dynamic libraries:"
   echo ''
   echo "Charm++ dynamic libraries:"
-  echo "  --build-shared     build Charm++ dynamic libraries (.so) (default)"
-  echo "  --no-build-shared  don't build Charm++'s shared libraries"
+  echo "  --no-build-shared  don't build Charm++'s shared libraries (default)"
+  echo "  --build-shared     build Charm++ dynamic libraries (.so) "
+  echo ''
+  echo 'Enable/disable features:'
+  src/scripts/configure --help | grep enable-
+  src/scripts/configure --help | grep with-
+  echo "  --with-production       build Charm++ with all optimizations for maximum performance, and disabling all above features"
   echo ''
   echo 'Miscellaneous options:'
   echo ''
   echo 'Miscellaneous options:'
-  echo '  --incdir=DIR   specify additional include path for compiler'
-  echo '  --libdir=DIR   specify additional lib path for compiler'
-  echo '  --basedir=DIR          shortcut for the above two - DIR/include and DIR/lib'
-  echo '  -j[N]           parallel make, N is the number of paralle make jobs'
+  echo '  --incdir=DIR        specify additional include path for compiler'
+  echo '  --libdir=DIR       specify additional lib path for compiler'
+  echo '  --basedir=DIR              shortcut for the above two - DIR/include and DIR/lib'
+  echo '  -j[N]               parallel make, N is the number of paralle make jobs'
+  echo "  --with-romio        build AMPI with ROMIO library"
+  echo "  --with-lbtime-type  specify real type for the load balancing timers"
+  echo "  --destination=DIR   build Charm++ inside DIR, by default the destination is <version>"
+  echo "  --suffix=DIR        append DIR to the destination directory of the Charm++ build"
+  echo "  --tau-makefile=FILE Specify which TAU stub makefile to use"
   fi
   echo ''
   echo '<charmc-options>: normal compiler options e.g. -g -O -save -verbose'
   fi
   echo ''
   echo '<charmc-options>: normal compiler options e.g. -g -O -save -verbose'
@@ -76,11 +106,11 @@ syntax() {
   then
   echo ''
   echo 'Examples:'
   then
   echo ''
   echo 'Examples:'
-  echo "1. display all supported options for net-linux using 'help':"
-  echo '  ./build charm++ net-linux help'
+  echo "1. display all supported options for net-linux-x86_64 using 'help':"
+  echo '  ./build charm++ net-linux-x86_64 help'
   echo '2. compile Charm++ on Linux with optimizations:'
   echo '2. compile Charm++ on Linux with optimizations:'
-  echo '  ./build charm++ net-linux -O -DCMK_OPTIMIZE'
-  echo '3. compile Charm++ for Linux clustermatic Beowulf cluster with Intel compiler:'
+  echo '  ./build charm++ net-linux-x86_64 -O -DCMK_OPTIMIZE'
+  echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler:'
   echo '  ./build charm++ net-linux clustermatic icc -O'
   echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
   echo '  ./build charm++ mpi-linux-ia64 gm -O'
   echo '  ./build charm++ net-linux clustermatic icc -O'
   echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
   echo '  ./build charm++ mpi-linux-ia64 gm -O'
@@ -89,20 +119,22 @@ syntax() {
   echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
   echo '  MAKE=gmake  ./build charm++ mpi-sp -j4 -O            # sh'
   echo '  setenv MAKE gmake;  ./build charm++ mpi-sp -j4 -O    # csh'
   echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
   echo '  MAKE=gmake  ./build charm++ mpi-sp -j4 -O            # sh'
   echo '  setenv MAKE gmake;  ./build charm++ mpi-sp -j4 -O    # csh'
+  echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
+  echo '  ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -O'
+  echo '   or in short,'
+  echo '  ./build charm++ mpi-linux --basedir /usr/local/mpich -O'
+  echo '  ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
   echo ''
   echo 'Note: This script:'
   echo ''
   echo 'Note: This script:'
-  echo ' 1. Creates directories <version> and <version>/tmp';
-  echo ' 2. Copies src/scripts/Makefile into <version>/tmp';
-  echo ' 3. Does a "make <target> <version> OPTS=<charmc-options>" in <version>/tmp.'
+  echo ' 1. Creates directories <destination> and <destination>/tmp'
+  echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
+  echo ' 3. Does a "make basics" in <destination>/tmp.'
+  echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
   echo "That's all build does.  The rest is handled by the Makefile."
   echo ''
   echo "That's all build does.  The rest is handled by the Makefile."
   echo ''
-  echo 'You should register your copy of Charm++ with us by sending email'
-  echo 'to tms@charm.cs.uiuc.edu containing the message "subscribe charm-users"'
-  echo 'This will allow us to notify you of new releases of Charm++.'
-  echo ''
   echo 'Thank you for using Charm++, please send questions or comments to '
   echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
   echo 'Thank you for using Charm++, please send questions or comments to '
   echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
-  echo '(email: ppl@cs.uiuc.edu).'
+  echo '(email: charm@cs.illinois.edu).'
 
   else
   echo ''
 
   else
   echo ''
@@ -110,6 +142,10 @@ syntax() {
   fi
 }
 
   fi
 }
 
+Echo() {
+    [ "x$QUIET" = "x--quiet" ] || echo $*
+}
+
 printOption() {
   for prefix in cc conv-mach
   do
 printOption() {
   for prefix in cc conv-mach
   do
@@ -122,17 +158,25 @@ printOption() {
           files=`cd $dir; ls $prefix-*.h 2>/dev/null`
           opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
     done 
           files=`cd $dir; ls $prefix-*.h 2>/dev/null`
           opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
     done 
+    tmp=.tmp.$$
+    rm -f $tmp; touch $tmp
+    for o in $opts
+    do
+      echo $o >> $tmp
+    done
+    opts=`sort $tmp | uniq`
+    rm -f $tmp
     echo $str $opts
   done
   exit 1
 }
 
 CheckDir() {
     echo $str $opts
   done
   exit 1
 }
 
 CheckDir() {
-  for dir in $*
+  for d in $*
   do
   do
-    if test ! -d $dir
+    if test ! -d $d
     then
     then
-      echo Error: cannot find $1!
+      echo Error: cannot find $d!
       exit 1
     fi
   done
       exit 1
     fi
   done
@@ -168,58 +212,158 @@ BASEDIR=
 LIBDIR=
 INCDIR=
 ARCH=
 LIBDIR=
 INCDIR=
 ARCH=
-BUILD_SHARED=
+BUILD_SHARED=""             # default no shared lib
+WITH_ROMIO=
+WITH_PRODUCTION=
+BUILD_EMULATOR=0
+DESTINATION=""
+DESTINATION_SUFFIX=""
+TAU_MAKEFILE=""
+QUIET=""
 
 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | more && exit 1
 
 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | more && exit 1
-[ $# -lt 2 ] && syntax && exit 1
+[ $# -lt 2 ] && ./smart-build.pl && exit 1
 PROGRAM=$1
 shift
 PROGRAM=$1
 shift
-VERSION=$1; BASEVERSION=$1; ARCH=`echo $1 | sed -e 's@-.*@@'`
+VERSION=$1; BASEVERSION=$1; 
+if test -f $src/$BASEVERSION/vdir_link
+then
+  BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
+fi
+ARCH=`echo $1 | sed -e 's@-.*@@'`
 shift
 
 shift
 
+#echo $src
+#echo $BASEVERSION
+#echo $ARCH
+
 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
 
 while [ ! $# -eq 0 ]
 do
   case "$1" in
 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
 
 while [ ! $# -eq 0 ]
 do
   case "$1" in
-           "--basedir")
-               shift; CheckDir $1/include $1/lib
-               LIBDIR="$LIBDIR -L$1/lib";
-               INCDIR="$INCDIR -I$1/include"; shift
+    "--basedir")
+               shift; 
+               for dir in $1
+               do
+                 CheckDir $dir/include $dir/lib
+                 LIBDIR="$LIBDIR -L$dir/lib";
+                 INCDIR="$INCDIR -I$dir/include"
+               done
+               shift
                ;;
                ;;
-           --basedir=*)
+    --basedir=*)
                 basedir=`echo $1 | awk -F= '{print $2}'`
                 basedir=`echo $1 | awk -F= '{print $2}'`
-               CheckDir $basedir/include $basedir/lib
-               LIBDIR="$LIBDIR -L$basedir/lib";
-               INCDIR="$INCDIR -I$basedir/include"; shift
+               for dir in $basedir
+               do
+                 CheckDir $dir/include $dir/lib
+                 LIBDIR="$LIBDIR -L$dir/lib";
+                 INCDIR="$INCDIR -I$dir/include"
+               done
+               shift
                ;;
                ;;
-           "--libdir")
+    "--libdir")
                shift; CheckDir $1
                shift; CheckDir $1
-               LIBDIR="$LIBDIR -L$1"; shift
+               for dir in $1
+               do
+                 LIBDIR="$LIBDIR -L$dir"; 
+               done
+                shift
                ;;
                ;;
-           --libdir=*)
+    --libdir=*)
                 libdir=`echo $1 | awk -F= '{print $2}'`
                CheckDir $libdir
                 libdir=`echo $1 | awk -F= '{print $2}'`
                CheckDir $libdir
-               LIBDIR="$LIBDIR -L$libdir"; shift
+               for dir in $libdir
+               do
+                 LIBDIR="$LIBDIR -L$dir"; 
+               done
+               shift
                ;;
                ;;
-           "--incdir")
+    "--incdir")
                shift; CheckDir $1
                shift; CheckDir $1
-               INCDIR="$INCDIR -I$1"; shift
+               for dir in $1
+               do
+                 INCDIR="$INCDIR -I$dir"; 
+               done
+               shift
                ;;
                ;;
-           --incdir=*)
+    --incdir=*)
                 incdir=`echo $1 | awk -F= '{print $2}'`
                CheckDir $incdir
                 incdir=`echo $1 | awk -F= '{print $2}'`
                CheckDir $incdir
-               INCDIR="$INCDIR -I$incdir"; shift
+               for dir in $incdir
+               do
+                 INCDIR="$INCDIR -I$dir"; 
+               done
+               shift
                ;;
                ;;
-           --no-build-shared|-nobs|--build-shared|-bs)
-               # obsolete
-               BUILD_SHARED="$1"; shift
+    --no-build-shared|--no-shared)
+               #BUILD_SHARED="-no-build-shared"; 
+               shift
+               ;;
+    --build-shared)
+               BUILD_SHARED="-build-shared"; 
+               shift
+               ;;
+    --with-romio)
+               WITH_ROMIO="true"; shift
+               ;;
+    --with-production)
+               WITH_PRODUCTION="true" 
+               shift
+               ;;
+    --with-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               shift
+               ;;
+    --without-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               shift
+               ;;
+    --destination)
+               shift
+               DESTINATION="$1"
+               shift
+               ;;
+    --destination=*)
+               DESTINATION="`echo $1 | awk -F= '{print $2}'`"
+               shift
+               ;;
+    --suffix)
+               shift
+               DESTINATION_SUFFIX="$1"
+               shift
+               ;;
+    --suffix=*)
+               DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
+               shift
+               ;;
+    --tau-makefile)
+               TAU_MAKEFILE=$1
+               shift
                ;;
                ;;
-           --no-shared)
-               # obsolete
-               BUILD_SHARED="-nobs"; shift
+    --tau-makefile=*)
+               TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
+               shift
                ;;
                ;;
-           -j*)
+    --quiet)
+               MAKEOPTS="$MAKEOPTS --quiet"
+               QUIET="--quiet"
+               shift;
+               ;;
+    --enable-tracing|--enable-tracing=*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               ENABLE_TRACING=yes
+               shift
+               ;;
+    --enable-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               shift
+               ;;
+    --disable-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               shift
+               ;;
+    -j*)
                 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
                MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
                shift;
                 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
                MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
                shift;
@@ -251,6 +395,8 @@ do
 # It specifies some other option:
           TestIfOption $1
           BOPTS="$BOPTS $1"
 # It specifies some other option:
           TestIfOption $1
           BOPTS="$BOPTS $1"
+          [ $1 =  "bigemulator" ] && BUILD_EMULATOR=1
+          [ $1 =  "bigsim" ] && BUILD_EMULATOR=1
         fi
         shift
        ;;
         fi
         shift
        ;;
@@ -259,11 +405,27 @@ done
 
 [ "x$VERSION" = "x" ] && syntax && exit 1
 
 
 [ "x$VERSION" = "x" ] && syntax && exit 1
 
-[ -z "$MAKE" ] && MAKE='make'
+if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
+then
+  echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
+  exit 1
+fi
+
+if [ -z "$MAKE" ] 
+then
+  # prefer gmake
+  MAKE=`which gmake 2>/dev/null`
+  [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
+fi
 
 if [ ! -f $src/$BASEVERSION/conv-mach.h ] 
 then
 
 if [ ! -f $src/$BASEVERSION/conv-mach.h ] 
 then
-  echo "Error> build can not find arch: $BASEVERSION!" 
+  if [ "x_$BASEVERSION" = "x_net-rs6k" ]
+  then
+    echo "Error> build net-aix-ppc instead of net-rs6k!" 
+  else
+    echo "Error> build can not find arch: $BASEVERSION!" 
+  fi
   exit 1
 fi
 
   exit 1
 fi
 
@@ -280,56 +442,107 @@ then
   done
 fi
 
   done
 fi
 
-[ -d $VERSION ] || echo "Creating dir: $VERSION" 
-[ -d $VERSION ] || mkdir $VERSION
-[ -d $VERSION/tmp ] || echo "Creating dir: $VERSION/tmp" 
-[ -d $VERSION/tmp ] || mkdir $VERSION/tmp
+#echo "|$DESTINATION|$DESTINATION_SUFFIX|"
 
 
-echo "Copying src/scripts/Makefile to $VERSION/tmp"
-rm -f $VERSION/tmp/Makefile
-rm -f $VERSION/tmp/Make.depends
+if [ -z "$DESTINATION" ]
+then
+  DESTINATION="$VERSION"
+fi
 
 
-if [ "x_`echo $VERSION | awk -F- '{print $2}'`" = "x_win32" ]
+if [ -n "$DESTINATION_SUFFIX" ]
 then
 then
-#Win32 version needs special compilers and *copied* (not linked)
+  DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
+fi
+
+[ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
+[ -d $DESTINATION ] || mkdir $DESTINATION
+[ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
+[ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
+
+Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
+rm -f $DESTINATION/tmp/Makefile
+rm -f $DESTINATION/tmp/Make.depends
+rm -f $DESTINATION/tmp/Make.cidepends
+rm -f $DESTINATION/tmp/Make.lb
+rm -f $DESTINATION/tmp/Make.machine
+rm -f $DESTINATION/tmp/Make.extlib
+
+
+# Create the bin, lib, include, etc. links:
+WINNAME=`echo $VERSION | awk -F- '{print $2}'`
+if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
+then
+#Win32/64 version needs special compilers and *copied* (not linked)
 # source files.
 # source files.
-       echo "Copying compilers for win32 into cygwin /bin directory"
-       cp $src/win32/unix2nt* /bin
-       cp $src/win32/system_ln $VERSION/tmp
-  chmod +x $VERSION/tmp/system_ln
+       echo "Copying compilers for $WINNAME into cygwin /bin directory"
+       cp -f $src/$WINNAME/unix2nt* /bin
+       cp $src/win32/system_ln $DESTINATION/tmp
+       cp $src/win32/unistd.h $DESTINATION/tmp
+       echo "Compiling createlink.cpp ..."
+        (cd $src/win32; unix2nt_cc  -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o)
+       if test ! -x $src/win32/createlink.exe
+       then
+               echo "VC++ is not properly installed!"
+               exit 1
+       fi
+       echo "Copying $src/win32/createlink.exe to /bin directory"
+       cp $src/win32/createlink.exe /bin
+        chmod +x $DESTINATION/tmp/system_ln
+       cp $src/win32/gathertree.local   $DESTINATION/tmp
+       cp $src/win32/gatherflat.local   $DESTINATION/tmp
 else
 else
-       cat > $VERSION/tmp/system_ln <<EOF
+       cat > $DESTINATION/tmp/system_ln <<EOF
 #!/bin/sh
 ln -f -s \$@
 EOF
 #!/bin/sh
 ln -f -s \$@
 EOF
-  chmod +x $VERSION/tmp/system_ln
-       for newdir in `echo bin lib lib_so include tmp`
-       do
-               echo "Soft-linking over $newdir"
+  chmod +x $DESTINATION/tmp/system_ln
+  for newdir in `echo bin lib lib_so include tmp`
+  do
+    Echo "Soft-linking over $newdir"
     if [ -r $newdir ]
     then
     if [ -r $newdir ]
     then
-      rm -f $newdir
+      rm -fr $newdir || exit 1
     fi
     fi
-               $VERSION/tmp/system_ln $VERSION/$newdir $newdir
-       done
+    $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
+  done
+  rm -f VERSION
+  $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
 fi
 
 fi
 
-$VERSION/tmp/system_ln "../../src/scripts/Makefile" $VERSION/tmp/Makefile
-$VERSION/tmp/system_ln "../../src/scripts/Make.depends" $VERSION/tmp/Make.depends
+$DESTINATION/tmp/system_ln "../../src/scripts/Make.depends" $DESTINATION/tmp/Make.depends
+$DESTINATION/tmp/system_ln "../../src/scripts/Make.cidepends" $DESTINATION/tmp/Make.cidepends
+if test -f src/ck-ldb/Make.lb
+then
+$DESTINATION/tmp/system_ln "../../src/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
+else
+touch $DESTINATION/tmp/Make.lb
+fi
+$DESTINATION/tmp/system_ln "../../src/scripts/Makefile" $DESTINATION/tmp/Makefile
+$DESTINATION/tmp/system_ln "../../src/scripts/Make.tau" $DESTINATION/tmp/Make.tau
+touch $DESTINATION/tmp/Makefile.machine
+touch $DESTINATION/tmp/Make.extlib
 
 
-ConvUsr="$VERSION/tmp/conv-mach-pre.sh"
-echo "Generating $ConvUsr"
+ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
+Echo "Generating $ConvUsr"
 echo > $ConvUsr
 echo > $ConvUsr
-test -n "$LIBDIR" && echo "CMK_LIBDIR=\"$LIBDIR\"" >> $ConvUsr
-test -n "$INCDIR" && echo "CMK_INCDIR=\"$INCDIR\"" >> $ConvUsr
+if test -n "$LIBDIR" 
+then
+  echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
+  echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
+fi
+if test -n "$INCDIR" 
+then
+  echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
+  echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
+fi
 chmod +x $ConvUsr
 
 # Create conv-mach-opt headers with special build-time options
 chmod +x $ConvUsr
 
 # Create conv-mach-opt headers with special build-time options
-ConvHeader="$VERSION/tmp/conv-mach-opt.h"
-ConvSh="$VERSION/tmp/conv-mach-opt.sh"
+ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
+ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
 then
 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
 then
-  echo "Generating $ConvHeader, conv-mach-opt.sh"
+  Echo "Generating $ConvHeader, conv-mach-opt.sh"
   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
   echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
   echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
   echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
@@ -349,25 +562,97 @@ then
     done
 fi
 
     done
 fi
 
+if test  "$BUILD_SHARED"  = "-build-shared"
+then
+    echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
+else
+    echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
+fi
+
+if test  -n "$WITH_ROMIO" 
+then
+    echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
+fi
 
 
-echo $BASEVERSION > $VERSION/tmp/.vdir
+if test -n "$WITH_PRODUCTION"
+then
+    echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
+    # Prepend optimize so that an explicit -no-optimize still works
+    OPTS="-optimize -production $OPTS"
+    CONFIG_OPTS="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
+fi
 
 
-echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS"' in $VERSION/tmp"
-cd $VERSION/tmp 
-$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED"
+# build with Tau
+WITH_TAU=0
+if [ "$PROGRAM" = "Tau" ]
+then
+       Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
+       if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
+       then
+         #Setting up TAU trace library:
+         Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
 
 
+          WITH_TAU=1
+       else
+         Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
+          TAU_MAKEFILE=""
+       fi
+fi
+[ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
+SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
+
+sed -e $SED_CHARMC src/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ src/scripts/Makefile && rm -f  .Makefile.$$
+sed -e $SED_CHARMC src/scripts/charmc > .charmc.$$ && cp .charmc.$$ src/scripts/charmc && rm -f .charmc.$$
+
+if test $WITH_TAU -eq 1
+then
+    echo "#define CMK_WITH_TAU               1" >> $ConvHeader
+    echo "#define pthread_create             tau_pthread_create" >> $ConvHeader
+    echo "#define pthread_exit               tau_pthread_exit" >> $ConvHeader
+
+    echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
+fi
+
+
+echo $BASEVERSION > $DESTINATION/tmp/.vdir
+echo $VERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
+
+if test $BUILD_EMULATOR = 1
+then
+  PROGRAM="$PROGRAM bigsim"
+#  CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
+fi
+
+printError()
+{
+       Echo "-------------------------------------------------"
+       Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
+       Echo "to resolve the problems yourself, visit"
+       Echo "    http://charm.cs.illinois.edu/"
+       Echo "for more information. Otherwise, email the developers at charm@cs.illinois.edu"
+       exit $MAKEEXIT
+}
+
+echo 'BUILDOPTS="'$OPTS'"'  >> $ConvSh
+
+Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
+cd $DESTINATION/tmp 
+echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
+chmod +x config_opts.sh
+echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
+$MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
+MAKEEXIT=$?
+[ $MAKEEXIT -ne 0 ] && printError
+
+Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
+$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
 MAKEEXIT=$?
 if [ $MAKEEXIT -eq 0 ]
 then
 MAKEEXIT=$?
 if [ $MAKEEXIT -eq 0 ]
 then
-       echo "-------------------------------------------------"
-       echo "$PROGRAM built successfully."
-       echo "Next, try out a sample program like" \
-            "pgms/charm++/simplearrayhello"
+       Echo "-------------------------------------------------"
+       Echo "$PROGRAM built successfully."
+       Echo "Next, try out a sample program like" \
+            "$DESTINATION/tests/charm++/simplearrayhello"
 else
 else
-       echo "-------------------------------------------------"
-       echo "Charm++ NOT BUILT. Either cd into $VERSION/tmp and try"
-       echo "to resolve the problems yourself, visit"
-       echo "    http://charm.cs.uiuc.edu/"
-       echo "for more information. Otherwise, email the developers at ppl@cs.uiuc.edu"
-       exit $MAKEEXIT
+        printError
 fi
 fi