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
292 CheckDir
$dir/include
$dir/lib
293 LIBDIR
="$LIBDIR -L$dir/lib";
294 INCDIR
="$INCDIR -I$dir/include"
299 basedir
=`echo $1 | awk -F= '{print $2}'`
302 CheckDir
$dir/include
$dir/lib
303 LIBDIR
="$LIBDIR -L$dir/lib";
304 INCDIR
="$INCDIR -I$dir/include"
312 LIBDIR
="$LIBDIR -L$dir";
317 libdir
=`echo $1 | awk -F= '{print $2}'`
321 LIBDIR
="$LIBDIR -L$dir";
329 INCDIR
="$INCDIR -I$dir";
334 incdir
=`echo $1 | awk -F= '{print $2}'`
338 INCDIR
="$INCDIR -I$dir";
342 --no-build-shared|
--no-shared)
343 #BUILD_SHARED="-no-build-shared";
347 BUILD_SHARED
="-build-shared";
351 WITH_ROMIO
="true"; shift
354 WITH_PRODUCTION
="true"
358 CONFIG_OPTS
="$CONFIG_OPTS $1"
362 CONFIG_OPTS
="$CONFIG_OPTS $1"
371 DESTINATION
="`echo $1 | awk -F= '{print $2}'`"
376 DESTINATION_SUFFIX
="$1"
380 DESTINATION_SUFFIX
="`echo $1 | awk -F= '{print $2}'`"
388 TAU_MAKEFILE
=`echo $1 | awk -F= '{print $2}'`
392 MAKEOPTS
="$MAKEOPTS --quiet"
396 --enable-tracing|
--enable-tracing=*)
397 CONFIG_OPTS
="$CONFIG_OPTS $1"
402 CONFIG_OPTS
="$CONFIG_OPTS $1"
406 CONFIG_OPTS
="$CONFIG_OPTS $1"
410 PMAKENUM
=`echo $1 | awk -Fj '{print $2}'`
411 MAKEOPTS
="$MAKEOPTS -j $PMAKENUM"
415 # We hit a real compiler option (like -g, or -Dfoo),
416 # so just copy over all remaining options
419 OPTS
="$OPTS $1"; shift
426 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
430 # It specifies a compiler:
431 if [ ! -z "$COMPILER" ]
433 echo "Error> Tried to specify two compilers: $COMPILER and $1"
438 # It specifies some other option:
441 [ $1 = "bigemulator" ] && BUILD_EMULATOR
=1
442 [ $1 = "bigsim" ] && BUILD_EMULATOR
=1
443 [ $1 = "cuda" ] && BUILD_CUDA
=1
450 if [ $BUILD_CUDA -eq 1 ]; then
451 echo "checking for CUDA toolkit directory"
452 CUDA_CANDIDATE_DIRS
="$CUDATOOLKIT_HOME /usr/local/cuda /usr/lib/nvidia-cuda-toolkit"
453 for dir
in $CUDA_CANDIDATE_DIRS; do
454 if test -d "$dir"; then
457 echo "CUDA_DIR=$CUDA_DIR"
463 [ "x$VERSION" = "x" ] && syntax
&& exit 1
465 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
467 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
474 MAKE
=`which gmake 2>/dev/null`
475 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE
='make'
478 if [ ! -f $src/$BASEVERSION/conv-mach.h
]
480 if [ "x_$BASEVERSION" = "x_net-rs6k" ]
482 echo "Error> build net-aix-ppc instead of net-rs6k!"
484 echo "Error> build can not find arch: $BASEVERSION!"
489 #generate VERSION name combining all the build-time options.
490 if [ -n "$BOPTS" -o -n "$COMPILER" ]
492 echo "Selected Compiler: $COMPILER"
493 echo "Selected Options: $BOPTS"
494 SORTED
=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
495 BOPTS_WITHCOMPILER
=`echo $SORTED $COMPILER`
496 for i
in $BOPTS_WITHCOMPILER
502 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
504 if [ -z "$DESTINATION" ]
506 DESTINATION
="$VERSION"
509 if [ -n "$DESTINATION_SUFFIX" ]
511 DESTINATION
="$DESTINATION-$DESTINATION_SUFFIX"
514 [ -d $DESTINATION ] || Echo
"Creating dir: $DESTINATION"
515 [ -d $DESTINATION ] || mkdir
$DESTINATION
516 [ -d $DESTINATION/tmp
] || Echo
"Creating dir: $DESTINATION/tmp"
517 [ -d $DESTINATION/tmp
] || mkdir
$DESTINATION/tmp
519 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
520 rm -f $DESTINATION/tmp
/Makefile
521 rm -f $DESTINATION/tmp
/Make.depends
522 rm -f $DESTINATION/tmp
/Make.cidepends
523 rm -f $DESTINATION/tmp
/Make.lb
524 rm -f $DESTINATION/tmp
/Make.machine
525 rm -f $DESTINATION/tmp
/Make.extlib
528 # Create the bin, lib, include, etc. links:
529 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
530 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
532 #Win32/64 version needs special compilers and *copied* (not linked)
534 cp $src/win32
/system_ln
$DESTINATION/tmp
535 cp $src/win32
/unistd.h
$DESTINATION/tmp
536 echo "Compiling createlink.cpp ..."
537 (cd $src/win32
; ..
/$WINNAME/unix2nt_cc
-c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; ..
/$WINNAME/unix2nt_cc createlink.o
)
539 if test ! -x $src/win32
/createlink.exe
541 echo "VC++ is not properly installed!"
544 chmod +x
$DESTINATION/tmp
/system_ln
545 cp $src/win32
/gathertree.
local $DESTINATION/tmp
546 cp $src/win32
/gatherflat.
local $DESTINATION/tmp
548 cat > $DESTINATION/tmp
/system_ln
<<EOF
552 chmod +x
$DESTINATION/tmp
/system_ln
553 for newdir
in `echo bin lib lib_so include tmp`
555 Echo
"Soft-linking over $newdir"
558 rm -fr $newdir ||
exit 1
560 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
563 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
566 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
567 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
568 if test -f src
/ck-ldb
/Make.lb
570 $DESTINATION/tmp
/system_ln
"$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
572 touch $DESTINATION/tmp
/Make.lb
574 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Makefile" $DESTINATION/tmp
/Makefile
575 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
576 touch $DESTINATION/tmp
/Makefile.machine
577 touch $DESTINATION/tmp
/Make.extlib
579 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
580 Echo
"Generating $ConvUsr"
584 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
585 echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
589 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
590 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
594 # Create conv-mach-opt headers with special build-time options
595 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
596 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
597 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
599 Echo
"Generating $ConvHeader, conv-mach-opt.sh"
600 echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
601 echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
602 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
604 if test -n "$COMPILER"
607 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
608 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
614 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
615 if [ $BUILD_CUDA -eq 1 ]; then
616 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
618 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
622 if test "$BUILD_SHARED" = "-build-shared"
624 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
626 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
629 if test -n "$WITH_ROMIO"
631 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
634 if test -n "$WITH_PRODUCTION"
636 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
637 # Prepend optimize so that an explicit -no-optimize still works
638 OPTS
="-optimize -production $OPTS"
639 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
644 if [ "$PROGRAM" = "Tau" ]
646 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
647 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
649 #Setting up TAU trace library:
650 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
654 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
658 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
659 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
661 sed -e $SED_CHARMC $srcbase/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$
$srcbase/scripts
/Makefile
&& rm -f .Makefile.$$
662 sed -e $SED_CHARMC $srcbase/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$
$srcbase/scripts
/charmc
&& rm -f .charmc.$$
664 if test $WITH_TAU -eq 1
666 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
667 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
668 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
670 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
673 if [ "$PROGRAM" = "ChaNGa" ]
675 #Setting lbuserdata when the build is ChaNGa
676 CONFIG_OPTS
="--enable-lbuserdata $CONFIG_OPTS"
679 echo $BASEVERSION > $DESTINATION/tmp
/.
vdir
680 echo $BASEVERSION |
sed -e 's@-.*@@' > $DESTINATION/tmp
/.gdir
682 if test $BUILD_EMULATOR = 1
684 PROGRAM
="$PROGRAM bigsim"
685 # CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
690 Echo
"-------------------------------------------------"
691 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
692 Echo
"to resolve the problems yourself, visit"
693 Echo
" http://charm.cs.illinois.edu/"
694 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
698 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
699 echo "SRCBASE=$srcbase" > $DESTINATION/tmp
/charmpath.mk
701 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
703 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
704 chmod +x config_opts.sh
705 echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
706 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
708 [ $MAKEEXIT -ne 0 ] && printError
710 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
711 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
713 if [ $MAKEEXIT -eq 0 ]
715 Echo
"-------------------------------------------------"
716 Echo
"$PROGRAM built successfully."
717 Echo
"Next, try out a sample program like" \
718 "$DESTINATION/tests/charm++/simplearrayhello"