3 # Silly shorthand, used for source reorganization
4 srcbase
="$(cd $(dirname $0)/src/; pwd)"
11 echo 'Usage: build <target> <version> <options> [charmc-options ...]'
13 echo '<targets>: converse charm++ LIBS AMPI FEM bigemulator pose msa'
14 echo '<targets>: doc ps-doc pdf-doc html-doc'
18 echo ' charm++ compile Charm++ core only'
19 echo ' AMPI compile Adaptive MPI on top of Charm++'
20 echo ' FEM compile FEM framework'
21 echo ' LIBS compile additional parallel libraries with Charm++ core'
22 echo ' bigemulator build additional BigSim libraries'
23 echo ' pose build POSE parallel discrete event simulator'
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 ' everylb compile EveryLB suite of load balancing strategies'
31 ( 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 )
33 echo '<options>: compiler and platform specific options'
34 echo 'icc iccstatic xlc xlc64 gcc clang craycc pgcc pathscale cc cc64 mpcc ecc gcc64 gcc3 mpcc32 mpcc64 mpicxx'
35 echo 'help smp gm tcp scyld clustermatic bigemulator ooc syncft mlogft causalft'
36 echo 'papi pthreads lam'
37 echo '--incdir --libdir --basedir --build-shared --destination --suffix -j'
41 echo 'For platform specific options, use help option:'
42 echo ' help platform specific help, e.g. ./build charm++ net-linux-x86_64 help'
44 echo 'Choose a compiler (only one option is allowed from this section):'
45 echo ' icc, iccstatic Intel compilers (default or static linking)'
46 echo ' xlc, xlc64 IBM XL compilers (with 64-bit option on architectures with 32-bit modes)'
47 echo ' gcc GNU compiler collection (on platforms where the default differs)'
48 echo ' clang Clang C/C++ compiler'
49 echo ' craycc Cray compilers'
50 echo ' pgcc Portland Group compilers'
51 echo ' pathscale Pathscale compiler suite'
52 echo ' cc, cc64 For Sun WorkShop C++ 32/64 bit compilers'
53 echo ' mpcc SUN Solaris C++ compiler for MPI'
54 echo ' ecc Intel C/C++ compiler for Linux IA64 (Itanium)'
55 echo ' gcc3 GNU GCC/G++ version 3'
57 echo 'Choose an alternative fortran compiler (only one option is allowed from this section):'
58 echo ' g95 G95 at http://ww.g95.org'
59 echo " pgf90 Portland Group Fortran compiler"
60 echo ' ifort Intel Fortran compiler'
62 echo 'Platform specific options (choose multiple if apply):'
63 echo ' smp support for SMP, multithreaded charm on each node'
64 echo ' ibverbs use Infiniband Verbs for communication (only for net-linux-x86_64; prefer verbs-*)'
65 echo ' lam Use LAM MPI'
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 ' scyld compile for Scyld Beowulf cluster based on bproc'
70 echo ' clustermatic compile for Clustermatic (support version 3 and 4) '
71 echo ' pthreads compile with pthreads Converse threads'
73 echo 'Advanced options:'
74 echo ' bigemulator compile for BigSim simulator'
75 echo ' ooc compile with out of core support'
76 echo ' syncft compile with Charm++ fault tolerance support'
77 echo ' mlogft compile with Charm++ message logging fault tolerance support'
78 echo ' papi compile with PAPI performance counter support (if any)'
80 echo "Charm++ dynamic libraries:"
81 echo " --no-build-shared don't build Charm++'s shared libraries (default)"
82 echo " --build-shared build Charm++ dynamic libraries (.so) "
84 echo 'Enable/disable features:'
85 $srcbase/scripts
/configure
--help |
grep enable-
86 $srcbase/scripts
/configure
--help |
grep with-
87 echo " --with-production build Charm++ with all optimizations for maximum performance, and disabling all above features"
89 echo 'Miscellaneous options:'
90 echo ' --incdir=DIR specify additional include path for compiler'
91 echo ' --libdir=DIR specify additional lib path for compiler'
92 echo ' --basedir=DIR shortcut for the above two - DIR/include and DIR/lib'
93 echo ' -j[N] parallel make, N is the number of paralle make jobs'
94 echo " --with-romio build AMPI with ROMIO library"
95 echo " --with-lbtime-type specify real type for the load balancing timers"
96 echo " --destination=DIR build Charm++ inside DIR, by default the destination is <version>"
97 echo " --suffix=DIR append DIR to the destination directory of the Charm++ build"
98 echo " --tau-makefile=FILE Specify which TAU stub makefile to use"
101 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
106 echo "1. display all supported options for net-linux-x86_64 using 'help':"
107 echo ' ./build charm++ net-linux-x86_64 help'
108 echo '2. compile Charm++ on Linux with all available tuning:'
109 echo ' ./build charm++ net-linux-x86_64 --with-production'
110 echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler and optimizations:'
111 echo ' ./build charm++ net-linux clustermatic icc -optimize'
112 echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
113 echo ' ./build charm++ mpi-linux-ia64 gm -optimize'
114 echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
115 echo ' ./build charm++ net-win32 -optimize'
116 echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
117 echo ' MAKE=gmake ./build charm++ mpi-sp -j4 -optimize # sh'
118 echo ' setenv MAKE gmake; ./build charm++ mpi-sp -j4 -optimize # csh'
119 echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
120 echo ' ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -optimize'
122 echo ' ./build charm++ mpi-linux --basedir /usr/local/mpich -optimize'
123 echo ' ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
125 echo 'Note: This script:'
126 echo ' 1. Creates directories <destination> and <destination>/tmp'
127 echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
128 echo ' 3. Does a "make basics" in <destination>/tmp.'
129 echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
130 echo "That's all build does. The rest is handled by the Makefile."
132 echo 'Thank you for using Charm++, please send questions or comments to '
133 echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
134 echo '(email: charm@cs.illinois.edu).'
138 echo "To get more detailed help, run ./build --help"
143 [ "x$QUIET" = "x--quiet" ] ||
echo $
*
147 for prefix
in cc conv-mach
149 str
="Supported compilers:"
150 [ "$prefix" = "conv-mach" ] && str
="Supported options:"
154 # echo "Checking for $prefix in $dir"
155 files
=`cd $dir; ls $prefix-*.h 2>/dev/null`
156 opts
="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
159 rm -f $tmp; touch $tmp
164 opts
=`sort $tmp | uniq`
176 echo Error
: cannot
find $d!
185 [ -f $dir/cc-
$1.sh
] && return 1
193 [ -f $dir/conv-mach-
$1.h
] && return 1
196 echo "Error> option: $1 is not supported in this version!";
213 BUILD_SHARED
="" # default no shared lib
218 DESTINATION_SUFFIX
=""
222 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax |
( less ||
more ) && exit 1
223 [ $# -lt 2 ] && .
/smart-build.pl
&& exit 1
227 # find longest prefix of version argument that exists as a directory in $src
235 if [ -z "$testversion" ]; then
238 testversion
="$testversion-$w"
240 if [ -d $src/$testversion ]; then
244 VERSOPTS
="$VERSOPTS $w"
247 if [ $VERSION = $1 ]; then VERSOPTS
=""; fi
249 BASEVERSION
=$VERSION;
250 if test -f $src/$BASEVERSION/vdir_link
252 BASEVERSION
=`cat $src/$BASEVERSION/vdir_link`
254 ARCH
=`echo $BASEVERSION | sed -e 's@-.*@@'`
261 OPT_DIRS
="$src/$BASEVERSION $src/$ARCH $src/common"
263 # process remainder of version argument as options, copied from below
264 for w
in $VERSOPTS; do
265 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
269 # It specifies a compiler:
270 if [ ! -z "$COMPILER" ]
272 echo "Error> Tried to specify two compilers: $COMPILER and $w"
277 # It specifies some other option:
280 [ $w = "bigemulator" ] && BUILD_EMULATOR
=1
281 [ $w = "bigsim" ] && BUILD_EMULATOR
=1
282 [ $w = "cuda" ] && BUILD_CUDA
=1
293 CheckDir
$dir/include
$dir/lib
294 LIBDIR
="$LIBDIR -L$dir/lib";
295 INCDIR
="$INCDIR -I$dir/include"
300 basedir
=`echo $1 | awk -F= '{print $2}'`
303 CheckDir
$dir/include
$dir/lib
304 LIBDIR
="$LIBDIR -L$dir/lib";
305 INCDIR
="$INCDIR -I$dir/include"
313 LIBDIR
="$LIBDIR -L$dir";
318 libdir
=`echo $1 | awk -F= '{print $2}'`
322 LIBDIR
="$LIBDIR -L$dir";
330 INCDIR
="$INCDIR -I$dir";
335 incdir
=`echo $1 | awk -F= '{print $2}'`
339 INCDIR
="$INCDIR -I$dir";
343 --no-build-shared|
--no-shared)
344 #BUILD_SHARED="-no-build-shared";
348 BUILD_SHARED
="-build-shared";
352 WITH_ROMIO
="true"; shift
355 WITH_PRODUCTION
="true"
359 CONFIG_OPTS
="$CONFIG_OPTS $1"
363 CONFIG_OPTS
="$CONFIG_OPTS $1"
372 DESTINATION
="`echo $1 | awk -F= '{print $2}'`"
377 DESTINATION_SUFFIX
="$1"
381 DESTINATION_SUFFIX
="`echo $1 | awk -F= '{print $2}'`"
389 TAU_MAKEFILE
=`echo $1 | awk -F= '{print $2}'`
393 MAKEOPTS
="$MAKEOPTS --quiet"
397 --enable-tracing|
--enable-tracing=*)
398 CONFIG_OPTS
="$CONFIG_OPTS $1"
403 CONFIG_OPTS
="$CONFIG_OPTS $1"
407 CONFIG_OPTS
="$CONFIG_OPTS $1"
411 PMAKENUM
=`echo $1 | awk -Fj '{print $2}'`
412 MAKEOPTS
="$MAKEOPTS -j $PMAKENUM"
416 # We hit a real compiler option (like -g, or -Dfoo),
417 # so just copy over all remaining options
420 OPTS
="$OPTS $1"; shift
427 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
431 # It specifies a compiler:
432 if [ ! -z "$COMPILER" ]
434 echo "Error> Tried to specify two compilers: $COMPILER and $1"
439 # It specifies some other option:
442 [ $1 = "bigemulator" ] && BUILD_EMULATOR
=1
443 [ $1 = "bigsim" ] && BUILD_EMULATOR
=1
444 [ $1 = "cuda" ] && BUILD_CUDA
=1
451 if [ $BUILD_CUDA -eq 1 ]; then
452 echo "checking for CUDA toolkit directory"
453 CUDA_CANDIDATE_DIRS
="$CUDATOOLKIT_HOME /usr/local/cuda /usr/lib/nvidia-cuda-toolkit"
454 for dir
in $CUDA_CANDIDATE_DIRS; do
455 if test -d "$dir"; then
458 echo "CUDA_DIR=$CUDA_DIR"
464 [ "x$VERSION" = "x" ] && syntax
&& exit 1
466 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
468 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
475 MAKE
=`which gmake 2>/dev/null`
476 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE
='make'
479 if [ ! -f $src/$BASEVERSION/conv-mach.h
]
481 if [ "x_$BASEVERSION" = "x_net-rs6k" ]
483 echo "Error> build net-aix-ppc instead of net-rs6k!"
485 echo "Error> build can not find arch: $BASEVERSION!"
490 #generate VERSION name combining all the build-time options.
491 if [ -n "$BOPTS" -o -n "$COMPILER" ]
493 echo "Selected Compiler: $COMPILER"
494 echo "Selected Options: $BOPTS"
495 SORTED
=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
496 BOPTS_WITHCOMPILER
=`echo $SORTED $COMPILER`
497 for i
in $BOPTS_WITHCOMPILER
503 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
505 if [ -z "$DESTINATION" ]
507 DESTINATION
="$VERSION"
510 if [ -n "$DESTINATION_SUFFIX" ]
512 DESTINATION
="$DESTINATION-$DESTINATION_SUFFIX"
515 [ -d $DESTINATION ] || Echo
"Creating dir: $DESTINATION"
516 [ -d $DESTINATION ] || mkdir
$DESTINATION
517 [ -d $DESTINATION/tmp
] || Echo
"Creating dir: $DESTINATION/tmp"
518 [ -d $DESTINATION/tmp
] || mkdir
$DESTINATION/tmp
520 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
521 rm -f $DESTINATION/tmp
/Makefile
522 rm -f $DESTINATION/tmp
/Make.depends
523 rm -f $DESTINATION/tmp
/Make.cidepends
524 rm -f $DESTINATION/tmp
/Make.lb
525 rm -f $DESTINATION/tmp
/Make.machine
526 rm -f $DESTINATION/tmp
/Make.extlib
529 # Create the bin, lib, include, etc. links:
530 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
531 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
533 #Win32/64 version needs special compilers and *copied* (not linked)
535 cp $src/win32
/system_ln
$DESTINATION/tmp
536 cp $src/win32
/unistd.h
$DESTINATION/tmp
537 echo "Compiling createlink.cpp ..."
538 (cd $src/win32
; ..
/$WINNAME/unix2nt_cc
-c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; ..
/$WINNAME/unix2nt_cc createlink.o
)
540 if test ! -x $src/win32
/createlink.exe
542 echo "VC++ is not properly installed!"
545 chmod +x
$DESTINATION/tmp
/system_ln
546 cp $src/win32
/gathertree.
local $DESTINATION/tmp
547 cp $src/win32
/gatherflat.
local $DESTINATION/tmp
549 cat > $DESTINATION/tmp
/system_ln
<<EOF
553 chmod +x
$DESTINATION/tmp
/system_ln
554 for newdir
in `echo bin lib lib_so include tmp`
556 Echo
"Soft-linking over $newdir"
559 rm -fr $newdir ||
exit 1
561 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
564 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
567 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
568 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
569 if test -f "$srcbase/ck-ldb/Make.lb"
571 $DESTINATION/tmp
/system_ln
"$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
573 touch $DESTINATION/tmp
/Make.lb
575 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Makefile" $DESTINATION/tmp
/Makefile
576 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
577 touch $DESTINATION/tmp
/Makefile.machine
578 touch $DESTINATION/tmp
/Make.extlib
580 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
581 Echo
"Generating $ConvUsr"
585 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
586 echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
590 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
591 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
595 # Create conv-mach-opt headers with special build-time options
596 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
597 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
598 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
600 Echo
"Generating $ConvHeader, conv-mach-opt.sh"
601 echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
602 echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
603 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
605 if test -n "$COMPILER"
608 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
609 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
613 # pxshm+smp note: When combining the 'smp' and 'pxshm' directives, it is
614 # important that they be included in $ConvHeader in that
615 # exact order. See bug #717.
620 if [ "$i" = "smp" ]; then
622 elif [ "$i" = "pxshm" ]; then
628 if [ $HAS_PXSHM -eq 1 ]; then
631 if [ $HAS_SMP -eq 1 ]; then
638 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
639 if [ $BUILD_CUDA -eq 1 ]; then
640 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
642 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
646 if test "$BUILD_SHARED" = "-build-shared"
648 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
650 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
653 if test -n "$WITH_ROMIO"
655 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
658 if test -n "$WITH_PRODUCTION"
660 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
661 # Prepend optimize so that an explicit -no-optimize still works
662 OPTS
="-optimize -production $OPTS"
663 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
668 if [ "$PROGRAM" = "Tau" ]
670 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
671 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
673 #Setting up TAU trace library:
674 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
678 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
683 if test $WITH_TAU -eq 1
685 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
686 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
688 sed -e $SED_CHARMC $srcbase/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$
$srcbase/scripts
/Makefile
&& rm -f .Makefile.$$
689 sed -e $SED_CHARMC $srcbase/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$
$srcbase/scripts
/charmc
&& rm -f .charmc.$$
691 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
692 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
693 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
695 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
698 if [ "$PROGRAM" = "ChaNGa" ]
700 #Setting lbuserdata when the build is ChaNGa
701 CONFIG_OPTS
="--enable-lbuserdata $CONFIG_OPTS"
704 echo $BASEVERSION > $DESTINATION/tmp
/.
vdir
705 echo $BASEVERSION |
sed -e 's@-.*@@' > $DESTINATION/tmp
/.gdir
707 if test $BUILD_EMULATOR = 1
709 PROGRAM
="$PROGRAM bigsim"
710 # CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
715 Echo
"-------------------------------------------------"
716 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
717 Echo
"to resolve the problems yourself, visit"
718 Echo
" http://charm.cs.illinois.edu/"
719 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
723 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
724 echo "SRCBASE=$srcbase" > $DESTINATION/tmp
/charmpath.mk
726 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
728 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
729 chmod +x config_opts.sh
730 echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
731 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
733 [ $MAKEEXIT -ne 0 ] && printError
735 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
736 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
738 if [ $MAKEEXIT -eq 0 ]
740 Echo
"-------------------------------------------------"
741 Echo
"$PROGRAM built successfully."
742 Echo
"Next, try out a sample program like" \
743 "$DESTINATION/tests/charm++/simplearrayhello"