doc: Add serial to list of ci file reserved words
[charm.git] / build
diff --git a/build b/build
index a8c1e0b816fbf0c5a9be3440d21dcd1a35406e61..97e692ddab14927dec5367658e7ce2778fdfc289 100755 (executable)
--- a/build
+++ b/build
@@ -27,18 +27,18 @@ syntax() {
   echo ''
   fi
   echo '<versions>: ' 
-  ( 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$)' | 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 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 gcc4 mpcc pathscale'
-  echo 'help smp gm tcp vmi scyld clustermatic bigemulator ooc syncft papi'
-  echo 'pthreads lam'
-  echo '--incdir --libdir --basedir --no-build-shared --destination --suffix -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:'
-  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'
@@ -48,10 +48,11 @@ 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 '  gcc3            use gcc3 - GNU GCC/G++ version 3'
-  echo '  gcc4            use gcc4 - GNU GCC/G++ version 4 (only mpi-crayxt3)'
+  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 '  pathscale       use pathscale compiler suite'
+  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'
@@ -66,7 +67,7 @@ syntax() {
   echo '  mpt             use SGI Message Passing Toolkit (only for mpi version)'
   echo '  gm              use Myrinet for communication'
   echo '  tcp             use TCP sockets for communication (only for net version)'
-  echo '  ibverbs         use the Infiniband OpenIB layer for communication (only for net-linux-amd64 currently)'
+  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) '
@@ -76,20 +77,27 @@ syntax() {
   echo '  bigemulator    compile for BigSim simulator'
   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 "  --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 '  --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 "  --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 '  --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 ''
@@ -98,11 +106,11 @@ syntax() {
   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 '  ./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'
@@ -118,14 +126,15 @@ syntax() {
   echo '  ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
   echo ''
   echo 'Note: This script:'
-  echo ' 1. Creates directories <destination> and <destination>/tmp';
-  echo ' 2. Copies src/scripts/Makefile into <destination>/tmp';
-  echo ' 3. Does a "make <target> <version> OPTS=<charmc-options>" in <destination>/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 '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 ''
@@ -133,6 +142,10 @@ syntax() {
   fi
 }
 
+Echo() {
+    [ "x$QUIET" = "x--quiet" ] || echo $*
+}
+
 printOption() {
   for prefix in cc conv-mach
   do
@@ -199,11 +212,14 @@ BASEDIR=
 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
 [ $# -lt 2 ] && ./smart-build.pl && exit 1
@@ -280,14 +296,27 @@ do
                done
                shift
                ;;
-    --no-build-shared|-nobs|--no-shared)
-               BUILD_SHARED="-nobs"; 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
                ;;
-    --build-shared|-bs)
-               # obsolete, do nothing
+    --with-production)
+               WITH_PRODUCTION="true" 
+               shift
+               ;;
+    --with-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
+               shift
+               ;;
+    --without-*)
+               CONFIG_OPTS="$CONFIG_OPTS $1"
                shift
                ;;
     --destination)
@@ -316,6 +345,24 @@ do
                TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
                shift
                ;;
+    --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"
@@ -349,42 +396,21 @@ do
           TestIfOption $1
           BOPTS="$BOPTS $1"
           [ $1 =  "bigemulator" ] && BUILD_EMULATOR=1
+          [ $1 =  "bigsim" ] && BUILD_EMULATOR=1
         fi
         shift
        ;;
   esac
 done
-if [ "$PROGRAM" = "Tau" ]
-then
-       echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
-       if [ -f $TAU_MAKEFILE ]
-       then
-       #Setting up TAU trace library:
-       echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
 
-       SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
+[ "x$VERSION" = "x" ] && syntax && exit 1
 
-       echo $SED_CHARMC
-       sed -i -e $SED_CHARMC src/scripts/Makefile 
-       echo $SED_CHARMC
-       sed -i -e $SED_CHARMC src/scripts/charmc  
-       else
-       echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE"
-       fi
-else
-    # Still need to set the variables in Makefile and charmc to ""
-    # even in the non-Tau case.
-    TAU_MAKEFILE=""
-    SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
-
-    echo $SED_CHARMC
-    sed -i -e $SED_CHARMC src/scripts/Makefile
-    echo $SED_CHARMC
-    sed -i -e $SED_CHARMC src/scripts/charmc
+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
 
-[ "x$VERSION" = "x" ] && syntax && exit 1
-
 if [ -z "$MAKE" ] 
 then
   # prefer gmake
@@ -394,7 +420,12 @@ fi
 
 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
 
@@ -423,16 +454,18 @@ then
   DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
 fi
 
-[ -d $DESTINATION ] || echo "Creating dir: $DESTINATION" 
+[ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
 [ -d $DESTINATION ] || mkdir $DESTINATION
-[ -d $DESTINATION/tmp ] || echo "Creating dir: $DESTINATION/tmp" 
+[ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
 [ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
 
-echo "Copying src/scripts/Makefile to $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:
@@ -442,7 +475,7 @@ then
 #Win32/64 version needs special compilers and *copied* (not linked)
 # source files.
        echo "Copying compilers for $WINNAME into cygwin /bin directory"
-       cp $src/$WINNAME/unix2nt* /bin
+       cp -f $src/$WINNAME/unix2nt* /bin
        cp $src/win32/system_ln $DESTINATION/tmp
        cp $src/win32/unistd.h $DESTINATION/tmp
        echo "Compiling createlink.cpp ..."
@@ -452,8 +485,11 @@ 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
+        chmod +x $DESTINATION/tmp/system_ln
+       cp $src/win32/gathertree.local   $DESTINATION/tmp
+       cp $src/win32/gatherflat.local   $DESTINATION/tmp
 else
        cat > $DESTINATION/tmp/system_ln <<EOF
 #!/bin/sh
@@ -462,7 +498,7 @@ EOF
   chmod +x $DESTINATION/tmp/system_ln
   for newdir in `echo bin lib lib_so include tmp`
   do
-    echo "Soft-linking over $newdir"
+    Echo "Soft-linking over $newdir"
     if [ -r $newdir ]
     then
       rm -fr $newdir || exit 1
@@ -474,12 +510,20 @@ EOF
 fi
 
 $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="$DESTINATION/tmp/conv-mach-pre.sh"
-echo "Generating $ConvUsr"
+Echo "Generating $ConvUsr"
 echo > $ConvUsr
 if test -n "$LIBDIR" 
 then
@@ -498,7 +542,7 @@ ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
 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
@@ -518,8 +562,10 @@ then
     done
 fi
 
-if test  -n "$BUILD_SHARED" 
+if test  "$BUILD_SHARED"  = "-build-shared"
 then
+    echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
+else
     echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
 fi
 
@@ -528,31 +574,85 @@ then
     echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
 fi
 
+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
+
+# 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
 
-echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS"' in $VERSION/tmp"
+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 
-$MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED"
-$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED"
+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
-       echo "-------------------------------------------------"
-       echo "$PROGRAM built successfully."
-       echo "Next, try out a sample program like" \
-            "tests/charm++/simplearrayhello"
+       Echo "-------------------------------------------------"
+       Echo "$PROGRAM built successfully."
+       Echo "Next, try out a sample program like" \
+            "$DESTINATION/tests/charm++/simplearrayhello"
 else
-       echo "-------------------------------------------------"
-       echo "Charm++ NOT BUILT. Either cd into $DESTINATION/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