3 # Silly shorthand, used for source reorganization
10 echo 'Usage: build <target> <version> <options> [charmc-options ...]'
12 echo '<targets>: converse charm++ LIBS AMPI FEM bigemulator pose msa'
13 echo '<targets>: doc ps-doc pdf-doc html-doc'
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 ' msa build Multiphase Shared Arrays(MSA) library'
24 echo ' Tau build the TAU tracing library for generating TAU performance data'
25 echo ' ChaNGa compile Charm++ core and necessary libraries for ChaNGa'
26 echo ' everylb compile EveryLB suite of load balancing strategies'
30 ( 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 )
32 echo '<options>: compiler and platform specific options'
33 echo 'icc iccstatic xlc xlc64 gcc clang craycc pgcc pathscale cc cc64 mpcc ecc gcc64 gcc3 mpcc32 mpcc64 mpicxx'
34 echo 'help smp gm tcp scyld clustermatic bigemulator ooc syncft mlogft causalft'
35 echo 'papi pthreads lam'
36 echo '--incdir --libdir --basedir --build-shared --destination --suffix -j'
40 echo 'For platform specific options, use help option:'
41 echo ' help platform specific help, e.g. ./build charm++ net-linux-x86_64 help'
43 echo 'Choose a compiler (only one option is allowed from this section):'
44 echo ' icc, iccstatic Intel compilers (default or static linking)'
45 echo ' xlc, xlc64 IBM XL compilers (with 64-bit option on architectures with 32-bit modes)'
46 echo ' gcc GNU compiler collection (on platforms where the default differs)'
47 echo ' clang Clang C/C++ compiler'
48 echo ' craycc Cray compilers'
49 echo ' pgcc Portland Group compilers'
50 echo ' pathscale Pathscale compiler suite'
51 echo ' cc, cc64 For Sun WorkShop C++ 32/64 bit compilers'
52 echo ' mpcc SUN Solaris C++ compiler for MPI'
53 echo ' ecc Intel C/C++ compiler for Linux IA64 (Itanium)'
54 echo ' gcc3 GNU GCC/G++ version 3'
56 echo 'Choose an alternative fortran compiler (only one option is allowed from this section):'
57 echo ' g95 G95 at http://ww.g95.org'
58 echo " pgf90 Portland Group Fortran compiler"
59 echo ' ifort Intel Fortran compiler'
61 echo 'Platform specific options (choose multiple if apply):'
62 echo ' smp support for SMP, multithreaded charm on each node'
63 echo ' ibverbs use Infiniband Verbs for communication (only for net-linux-x86_64; prefer verbs-*)'
64 echo ' lam Use LAM MPI'
65 echo ' mpt use SGI Message Passing Toolkit (only for mpi version)'
66 echo ' gm use Myrinet for communication'
67 echo ' tcp use TCP sockets for communication (only for net version)'
68 echo ' scyld compile for Scyld Beowulf cluster based on bproc'
69 echo ' clustermatic compile for Clustermatic (support version 3 and 4) '
70 echo ' pthreads compile with pthreads Converse threads'
72 echo 'Advanced options:'
73 echo ' bigemulator compile for BigSim simulator'
74 echo ' ooc compile with out of core support'
75 echo ' syncft compile with Charm++ fault tolerance support'
76 echo ' mlogft compile with Charm++ message logging fault tolerance support'
77 echo ' papi compile with PAPI performance counter support (if any)'
79 echo "Charm++ dynamic libraries:"
80 echo " --no-build-shared don't build Charm++'s shared libraries (default)"
81 echo " --build-shared build Charm++ dynamic libraries (.so) "
83 echo 'Enable/disable features:'
84 src
/scripts
/configure
--help |
grep enable-
85 src
/scripts
/configure
--help |
grep with-
86 echo " --with-production build Charm++ with all optimizations for maximum performance, and disabling all above features"
88 echo 'Miscellaneous options:'
89 echo ' --incdir=DIR specify additional include path for compiler'
90 echo ' --libdir=DIR specify additional lib path for compiler'
91 echo ' --basedir=DIR shortcut for the above two - DIR/include and DIR/lib'
92 echo ' -j[N] parallel make, N is the number of paralle make jobs'
93 echo " --with-romio build AMPI with ROMIO library"
94 echo " --with-lbtime-type specify real type for the load balancing timers"
95 echo " --destination=DIR build Charm++ inside DIR, by default the destination is <version>"
96 echo " --suffix=DIR append DIR to the destination directory of the Charm++ build"
97 echo " --tau-makefile=FILE Specify which TAU stub makefile to use"
100 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
105 echo "1. display all supported options for net-linux-x86_64 using 'help':"
106 echo ' ./build charm++ net-linux-x86_64 help'
107 echo '2. compile Charm++ on Linux with all available tuning:'
108 echo ' ./build charm++ net-linux-x86_64 --with-production'
109 echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler and optimizations:'
110 echo ' ./build charm++ net-linux clustermatic icc -optimize'
111 echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
112 echo ' ./build charm++ mpi-linux-ia64 gm -optimize'
113 echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
114 echo ' ./build charm++ net-win32 -optimize'
115 echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
116 echo ' MAKE=gmake ./build charm++ mpi-sp -j4 -optimize # sh'
117 echo ' setenv MAKE gmake; ./build charm++ mpi-sp -j4 -optimize # csh'
118 echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
119 echo ' ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -optimize'
121 echo ' ./build charm++ mpi-linux --basedir /usr/local/mpich -optimize'
122 echo ' ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
124 echo 'Note: This script:'
125 echo ' 1. Creates directories <destination> and <destination>/tmp'
126 echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
127 echo ' 3. Does a "make basics" in <destination>/tmp.'
128 echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
129 echo "That's all build does. The rest is handled by the Makefile."
131 echo 'Thank you for using Charm++, please send questions or comments to '
132 echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
133 echo '(email: charm@cs.illinois.edu).'
137 echo "To get more detailed help, run ./build --help"
142 [ "x$QUIET" = "x--quiet" ] ||
echo $
*
146 for prefix
in cc conv-mach
148 str
="Supported compilers:"
149 [ "$prefix" = "conv-mach" ] && str
="Supported options:"
153 # echo "Checking for $prefix in $dir"
154 files
=`cd $dir; ls $prefix-*.h 2>/dev/null`
155 opts
="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
158 rm -f $tmp; touch $tmp
163 opts
=`sort $tmp | uniq`
175 echo Error
: cannot
find $d!
184 [ -f $dir/cc-
$1.sh
] && return 1
192 [ -f $dir/conv-mach-
$1.h
] && return 1
195 echo "Error> option: $1 is not supported in this version!";
212 BUILD_SHARED
="" # default no shared lib
217 DESTINATION_SUFFIX
=""
221 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax |
( less ||
more ) && exit 1
222 [ $# -lt 2 ] && .
/smart-build.pl
&& exit 1
226 # find longest prefix of version argument that exists as a directory in $src
234 if [ -z "$testversion" ]; then
237 testversion
="$testversion-$w"
239 if [ -d $src/$testversion ]; then
243 VERSOPTS
="$VERSOPTS $w"
246 if [ $VERSION = $1 ]; then VERSOPTS
=""; fi
248 BASEVERSION
=$VERSION;
249 if test -f $src/$BASEVERSION/vdir_link
251 BASEVERSION
=`cat $src/$BASEVERSION/vdir_link`
253 ARCH
=`echo $BASEVERSION | sed -e 's@-.*@@'`
260 OPT_DIRS
="$src/$BASEVERSION $src/$ARCH $src/common"
262 # process remainder of version argument as options, copied from below
263 for w
in $VERSOPTS; do
264 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
268 # It specifies a compiler:
269 if [ ! -z "$COMPILER" ]
271 echo "Error> Tried to specify two compilers: $COMPILER and $w"
276 # It specifies some other option:
279 [ $w = "bigemulator" ] && BUILD_EMULATOR
=1
280 [ $w = "bigsim" ] && BUILD_EMULATOR
=1
291 CheckDir
$dir/include
$dir/lib
292 LIBDIR
="$LIBDIR -L$dir/lib";
293 INCDIR
="$INCDIR -I$dir/include"
298 basedir
=`echo $1 | awk -F= '{print $2}'`
301 CheckDir
$dir/include
$dir/lib
302 LIBDIR
="$LIBDIR -L$dir/lib";
303 INCDIR
="$INCDIR -I$dir/include"
311 LIBDIR
="$LIBDIR -L$dir";
316 libdir
=`echo $1 | awk -F= '{print $2}'`
320 LIBDIR
="$LIBDIR -L$dir";
328 INCDIR
="$INCDIR -I$dir";
333 incdir
=`echo $1 | awk -F= '{print $2}'`
337 INCDIR
="$INCDIR -I$dir";
341 --no-build-shared|
--no-shared)
342 #BUILD_SHARED="-no-build-shared";
346 BUILD_SHARED
="-build-shared";
350 WITH_ROMIO
="true"; shift
353 WITH_PRODUCTION
="true"
357 CONFIG_OPTS
="$CONFIG_OPTS $1"
361 CONFIG_OPTS
="$CONFIG_OPTS $1"
370 DESTINATION
="`echo $1 | awk -F= '{print $2}'`"
375 DESTINATION_SUFFIX
="$1"
379 DESTINATION_SUFFIX
="`echo $1 | awk -F= '{print $2}'`"
387 TAU_MAKEFILE
=`echo $1 | awk -F= '{print $2}'`
391 MAKEOPTS
="$MAKEOPTS --quiet"
395 --enable-tracing|
--enable-tracing=*)
396 CONFIG_OPTS
="$CONFIG_OPTS $1"
401 CONFIG_OPTS
="$CONFIG_OPTS $1"
405 CONFIG_OPTS
="$CONFIG_OPTS $1"
409 PMAKENUM
=`echo $1 | awk -Fj '{print $2}'`
410 MAKEOPTS
="$MAKEOPTS -j $PMAKENUM"
414 # We hit a real compiler option (like -g, or -Dfoo),
415 # so just copy over all remaining options
418 OPTS
="$OPTS $1"; shift
425 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
429 # It specifies a compiler:
430 if [ ! -z "$COMPILER" ]
432 echo "Error> Tried to specify two compilers: $COMPILER and $1"
437 # It specifies some other option:
440 [ $1 = "bigemulator" ] && BUILD_EMULATOR
=1
441 [ $1 = "bigsim" ] && BUILD_EMULATOR
=1
442 [ $1 = "cuda" ] && BUILD_CUDA
=1
449 if [ $BUILD_CUDA -eq 1 ]; then
450 echo "checking for CUDA toolkit directory"
451 CUDA_CANDIDATE_DIRS
="$CUDATOOLKIT_HOME /usr/local/cuda /usr/lib/nvidia-cuda-toolkit"
452 for dir
in $CUDA_CANDIDATE_DIRS; do
453 if test -d "$dir"; then
456 echo "CUDA_DIR=$CUDA_DIR"
462 [ "x$VERSION" = "x" ] && syntax
&& exit 1
464 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
466 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
473 MAKE
=`which gmake 2>/dev/null`
474 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE
='make'
477 if [ ! -f $src/$BASEVERSION/conv-mach.h
]
479 if [ "x_$BASEVERSION" = "x_net-rs6k" ]
481 echo "Error> build net-aix-ppc instead of net-rs6k!"
483 echo "Error> build can not find arch: $BASEVERSION!"
488 #generate VERSION name combining all the build-time options.
489 if [ -n "$BOPTS" -o -n "$COMPILER" ]
491 echo "Selected Compiler: $COMPILER"
492 echo "Selected Options: $BOPTS"
493 SORTED
=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
494 BOPTS_WITHCOMPILER
=`echo $SORTED $COMPILER`
495 for i
in $BOPTS_WITHCOMPILER
501 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
503 if [ -z "$DESTINATION" ]
505 DESTINATION
="$VERSION"
508 if [ -n "$DESTINATION_SUFFIX" ]
510 DESTINATION
="$DESTINATION-$DESTINATION_SUFFIX"
513 [ -d $DESTINATION ] || Echo
"Creating dir: $DESTINATION"
514 [ -d $DESTINATION ] || mkdir
$DESTINATION
515 [ -d $DESTINATION/tmp
] || Echo
"Creating dir: $DESTINATION/tmp"
516 [ -d $DESTINATION/tmp
] || mkdir
$DESTINATION/tmp
518 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
519 rm -f $DESTINATION/tmp
/Makefile
520 rm -f $DESTINATION/tmp
/Make.depends
521 rm -f $DESTINATION/tmp
/Make.cidepends
522 rm -f $DESTINATION/tmp
/Make.lb
523 rm -f $DESTINATION/tmp
/Make.machine
524 rm -f $DESTINATION/tmp
/Make.extlib
527 # Create the bin, lib, include, etc. links:
528 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
529 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
531 #Win32/64 version needs special compilers and *copied* (not linked)
533 [ -d $DESTINATION/bin
] || Echo
"Creating dir: $DESTINATION/bin"
534 [ -d $DESTINATION/bin
] || mkdir
$DESTINATION/bin
535 echo "Copying compilers for $WINNAME into $DESTINATION/bin directory"
536 cp -f $src/$WINNAME/unix2nt
* $DESTINATION/bin
537 cp $src/win32
/system_ln
$DESTINATION/tmp
538 cp $src/win32
/unistd.h
$DESTINATION/tmp
539 echo "Compiling createlink.cpp ..."
540 (cd $src/win32
; ..
/..
/..
/$DESTINATION/bin
/unix2nt_cc
-c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; ..
/..
/..
/$DESTINATION/bin
/unix2nt_cc createlink.o
)
541 if test ! -x $src/win32
/createlink.exe
543 echo "VC++ is not properly installed!"
546 echo "Copying $src/win32/createlink.exe to $DESTINATION/bin directory"
547 cp $src/win32
/createlink.exe
$DESTINATION/bin
548 chmod +x
$DESTINATION/tmp
/system_ln
549 cp $src/win32
/gathertree.
local $DESTINATION/tmp
550 cp $src/win32
/gatherflat.
local $DESTINATION/tmp
552 cat > $DESTINATION/tmp
/system_ln
<<EOF
556 chmod +x
$DESTINATION/tmp
/system_ln
557 for newdir
in `echo bin lib lib_so include tmp`
559 Echo
"Soft-linking over $newdir"
562 rm -fr $newdir ||
exit 1
564 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
567 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
570 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
571 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
572 if test -f src
/ck-ldb
/Make.lb
574 $DESTINATION/tmp
/system_ln
"../../src/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
576 touch $DESTINATION/tmp
/Make.lb
578 $DESTINATION/tmp
/system_ln
"../../src/scripts/Makefile" $DESTINATION/tmp
/Makefile
579 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
580 touch $DESTINATION/tmp
/Makefile.machine
581 touch $DESTINATION/tmp
/Make.extlib
583 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
584 Echo
"Generating $ConvUsr"
588 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
589 echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
593 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
594 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
598 # Create conv-mach-opt headers with special build-time options
599 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
600 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
601 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
603 Echo
"Generating $ConvHeader, conv-mach-opt.sh"
604 echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
605 echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
606 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
608 if test -n "$COMPILER"
611 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
612 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
618 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
619 if [ $BUILD_CUDA -eq 1 ]; then
620 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
622 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
626 if test "$BUILD_SHARED" = "-build-shared"
628 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
630 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
633 if test -n "$WITH_ROMIO"
635 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
638 if test -n "$WITH_PRODUCTION"
640 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
641 # Prepend optimize so that an explicit -no-optimize still works
642 OPTS
="-optimize -production $OPTS"
643 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
648 if [ "$PROGRAM" = "Tau" ]
650 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
651 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
653 #Setting up TAU trace library:
654 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
658 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
662 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
663 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
665 sed -e $SED_CHARMC src
/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$ src
/scripts
/Makefile
&& rm -f .Makefile.$$
666 sed -e $SED_CHARMC src
/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$ src
/scripts
/charmc
&& rm -f .charmc.$$
668 if test $WITH_TAU -eq 1
670 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
671 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
672 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
674 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
677 if [ "$PROGRAM" = "ChaNGa" ]
679 #Setting lbuserdata when the build is ChaNGa
680 CONFIG_OPTS
="--enable-lbuserdata $CONFIG_OPTS"
683 echo $BASEVERSION > $DESTINATION/tmp
/.
vdir
684 echo $BASEVERSION |
sed -e 's@-.*@@' > $DESTINATION/tmp
/.gdir
686 if test $BUILD_EMULATOR = 1
688 PROGRAM
="$PROGRAM bigsim"
689 # CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
694 Echo
"-------------------------------------------------"
695 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
696 Echo
"to resolve the problems yourself, visit"
697 Echo
" http://charm.cs.illinois.edu/"
698 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
702 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
704 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
706 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
707 chmod +x config_opts.sh
708 echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
709 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
711 [ $MAKEEXIT -ne 0 ] && printError
713 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
714 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
716 if [ $MAKEEXIT -eq 0 ]
718 Echo
"-------------------------------------------------"
719 Echo
"$PROGRAM built successfully."
720 Echo
"Next, try out a sample program like" \
721 "$DESTINATION/tests/charm++/simplearrayhello"