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 jade 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 ' jade build Jade compiler (auto-builds charm++, msa)'
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'
30 ( cd $src ; ls -1 |
egrep -v '(^CVS)|(^shmem$)|(^mpi$)|(^sim$)|(^net$)|(^multicore$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win32$)|(^win64$)|(^paragon$)|(^vmi$)|(^lapi$)|(^cell$)|(^gemini_gni$)|(^pami$)|(^template$)|(^cuda$)' |
pr -3 -t )
32 echo '<options>: compiler and platform specific options'
33 echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 gcc4 mpcc pathscale clang'
34 echo 'help smp gm tcp vmi 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 ' cc, cc64 For Sun WorkShop C++ 32/64 bit compilers'
45 echo ' cxx DIGITAL C++ compiler (DEC Alpha)'
46 echo ' kcc KAI C++ compiler'
47 echo " pgcc Portland Group's C++ compiler"
48 echo ' acc HP aCC compiler'
49 echo ' icc Intel C/C++ compiler for Linux IA32'
50 echo ' ecc Intel C/C++ compiler for Linux IA64'
51 echo ' gcc3 GNU GCC/G++ version 3'
52 echo ' gcc4 GNU GCC/G++ version 4 (only mpi-crayxt3)'
53 echo ' mpcc SUN Solaris C++ compiler for MPI'
54 echo ' pathscale Pathscale compiler suite'
55 echo ' clang Clang C/C++ compuler'
57 echo 'Choose a fortran compile (only one option is allowed from this section):'
58 echo ' g95 G95 at http://ww.g95.org'
59 echo ' absoft Absoft fortran compiler'
60 echo " pgf90 Portland Group\'s Fortran compiler"
61 echo ' ifc Intel Fortran compiler (older versions)'
62 echo ' ifort Intel Fortran compiler (newer versions)'
64 echo 'Platform specific options (choose multiple if apply):'
65 echo ' lam Use LAM MPI'
66 echo ' smp support for SMP, multithreaded charm on each node'
67 echo ' mpt use SGI Message Passing Toolkit (only for mpi version)'
68 echo ' gm use Myrinet for communication'
69 echo ' tcp use TCP sockets for communication (only for net version)'
70 echo ' ibverbs use the Infiniband OpenIB layer for communication (only for net-linux-x86_64 currently)'
71 echo " vmi use NCSA's VMI for communication (only for mpi version)"
72 echo ' scyld compile for Scyld Beowulf cluster based on bproc'
73 echo ' clustermatic compile for Clustermatic (support version 3 and 4) '
74 echo ' pthreads compile with pthreads Converse threads'
76 echo 'Advanced options:'
77 echo ' bigemulator compile for BigSim simulator'
78 echo ' ooc compile with out of core support'
79 echo ' syncft compile with Charm++ fault tolerance support'
80 echo ' mlogft compile with Charm++ message logging fault tolerance support'
81 echo ' papi compile with PAPI performance counter support (if any)'
83 echo "Charm++ dynamic libraries:"
84 echo " --no-build-shared don't build Charm++'s shared libraries (default)"
85 echo " --build-shared build Charm++ dynamic libraries (.so) "
87 echo 'Enable/disable features:'
88 src
/scripts
/configure
--help |
grep enable-
89 src
/scripts
/configure
--help |
grep with-
90 echo " --with-production build Charm++ with all optimizations for maximum performance, and disabling all above features"
92 echo 'Miscellaneous options:'
93 echo ' --incdir=DIR specify additional include path for compiler'
94 echo ' --libdir=DIR specify additional lib path for compiler'
95 echo ' --basedir=DIR shortcut for the above two - DIR/include and DIR/lib'
96 echo ' -j[N] parallel make, N is the number of paralle make jobs'
97 echo " --with-romio build AMPI with ROMIO library"
98 echo " --with-lbtime-type specify real type for the load balancing timers"
99 echo " --destination=DIR build Charm++ inside DIR, by default the destination is <version>"
100 echo " --suffix=DIR append DIR to the destination directory of the Charm++ build"
101 echo " --tau-makefile=FILE Specify which TAU stub makefile to use"
104 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
109 echo "1. display all supported options for net-linux-x86_64 using 'help':"
110 echo ' ./build charm++ net-linux-x86_64 help'
111 echo '2. compile Charm++ on Linux with all available tuning:'
112 echo ' ./build charm++ net-linux-x86_64 --with-production'
113 echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler and optimizations:'
114 echo ' ./build charm++ net-linux clustermatic icc -optimize'
115 echo '4. compile Charm++ for IA64 Linux cluster with MPICH-GM:'
116 echo ' ./build charm++ mpi-linux-ia64 gm -optimize'
117 echo '5. compile Charm++ for Windows with VC++ (Cygwin required):'
118 echo ' ./build charm++ net-win32 -optimize'
119 echo '6. compile on IBM SP with MPI using parallel gmake, 4 jobs simultaneously:'
120 echo ' MAKE=gmake ./build charm++ mpi-sp -j4 -optimize # sh'
121 echo ' setenv MAKE gmake; ./build charm++ mpi-sp -j4 -optimize # csh'
122 echo '7. compile Charm++ with MPI that is installed at /usr/local/mpich:'
123 echo ' ./build charm++ mpi-linux --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -optimize'
125 echo ' ./build charm++ mpi-linux --basedir /usr/local/mpich -optimize'
126 echo ' ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
128 echo 'Note: This script:'
129 echo ' 1. Creates directories <destination> and <destination>/tmp'
130 echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
131 echo ' 3. Does a "make basics" in <destination>/tmp.'
132 echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
133 echo "That's all build does. The rest is handled by the Makefile."
135 echo 'Thank you for using Charm++, please send questions or comments to '
136 echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
137 echo '(email: charm@cs.illinois.edu).'
141 echo "To get more detailed help, run ./build --help"
146 [ "x$QUIET" = "x--quiet" ] ||
echo $
*
150 for prefix
in cc conv-mach
152 str
="Supported compilers:"
153 [ "$prefix" = "conv-mach" ] && str
="Supported options:"
157 # echo "Checking for $prefix in $dir"
158 files
=`cd $dir; ls $prefix-*.h 2>/dev/null`
159 opts
="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
162 rm -f $tmp; touch $tmp
167 opts
=`sort $tmp | uniq`
179 echo Error
: cannot
find $d!
188 [ -f $dir/cc-
$1.sh
] && return 1
196 [ -f $dir/conv-mach-
$1.h
] && return 1
199 echo "Error> option: $1 is not supported in this version!";
215 BUILD_SHARED
="" # default no shared lib
220 DESTINATION_SUFFIX
=""
224 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax |
more && exit 1
225 [ $# -lt 2 ] && .
/smart-build.pl
&& exit 1
229 # find longest prefix of version argument that exists as a directory in $src
237 if [ -z "$testversion" ]; then
240 testversion
="$testversion-$w"
242 if [ -d $src/$testversion ]; then
246 VERSOPTS
="$VERSOPTS $w"
249 if [ $VERSION = $1 ]; then VERSOPTS
=""; fi
251 BASEVERSION
=$VERSION;
252 if test -f $src/$BASEVERSION/vdir_link
254 BASEVERSION
=`cat $src/$BASEVERSION/vdir_link`
256 ARCH
=`echo $BASEVERSION | sed -e 's@-.*@@'`
263 OPT_DIRS
="$src/$BASEVERSION $src/$ARCH $src/common"
265 # process remainder of version argument as options, copied from below
266 for w
in $VERSOPTS; do
267 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
271 # It specifies a compiler:
272 if [ ! -z "$COMPILER" ]
274 echo "Error> Tried to specify two compilers: $COMPILER and $w"
279 # It specifies some other option:
282 [ $w = "bigemulator" ] && BUILD_EMULATOR
=1
283 [ $w = "bigsim" ] && BUILD_EMULATOR
=1
294 CheckDir
$dir/include
$dir/lib
295 LIBDIR
="$LIBDIR -L$dir/lib";
296 INCDIR
="$INCDIR -I$dir/include"
301 basedir
=`echo $1 | awk -F= '{print $2}'`
304 CheckDir
$dir/include
$dir/lib
305 LIBDIR
="$LIBDIR -L$dir/lib";
306 INCDIR
="$INCDIR -I$dir/include"
314 LIBDIR
="$LIBDIR -L$dir";
319 libdir
=`echo $1 | awk -F= '{print $2}'`
323 LIBDIR
="$LIBDIR -L$dir";
331 INCDIR
="$INCDIR -I$dir";
336 incdir
=`echo $1 | awk -F= '{print $2}'`
340 INCDIR
="$INCDIR -I$dir";
344 --no-build-shared|
--no-shared)
345 #BUILD_SHARED="-no-build-shared";
349 BUILD_SHARED
="-build-shared";
353 WITH_ROMIO
="true"; shift
356 WITH_PRODUCTION
="true"
360 CONFIG_OPTS
="$CONFIG_OPTS $1"
364 CONFIG_OPTS
="$CONFIG_OPTS $1"
373 DESTINATION
="`echo $1 | awk -F= '{print $2}'`"
378 DESTINATION_SUFFIX
="$1"
382 DESTINATION_SUFFIX
="`echo $1 | awk -F= '{print $2}'`"
390 TAU_MAKEFILE
=`echo $1 | awk -F= '{print $2}'`
394 MAKEOPTS
="$MAKEOPTS --quiet"
398 --enable-tracing|
--enable-tracing=*)
399 CONFIG_OPTS
="$CONFIG_OPTS $1"
404 CONFIG_OPTS
="$CONFIG_OPTS $1"
408 CONFIG_OPTS
="$CONFIG_OPTS $1"
412 PMAKENUM
=`echo $1 | awk -Fj '{print $2}'`
413 MAKEOPTS
="$MAKEOPTS -j $PMAKENUM"
417 # We hit a real compiler option (like -g, or -Dfoo),
418 # so just copy over all remaining options
421 OPTS
="$OPTS $1"; shift
428 # This has to be a build-time option (like "smp", "gcc3", or "kcc")
432 # It specifies a compiler:
433 if [ ! -z "$COMPILER" ]
435 echo "Error> Tried to specify two compilers: $COMPILER and $1"
440 # It specifies some other option:
443 [ $1 = "bigemulator" ] && BUILD_EMULATOR
=1
444 [ $1 = "bigsim" ] && BUILD_EMULATOR
=1
451 [ "x$VERSION" = "x" ] && syntax
&& exit 1
453 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
455 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
462 MAKE
=`which gmake 2>/dev/null`
463 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE
='make'
466 if [ ! -f $src/$BASEVERSION/conv-mach.h
]
468 if [ "x_$BASEVERSION" = "x_net-rs6k" ]
470 echo "Error> build net-aix-ppc instead of net-rs6k!"
472 echo "Error> build can not find arch: $BASEVERSION!"
477 #generate VERSION name combining all the build-time options.
478 if [ -n "$BOPTS" -o -n "$COMPILER" ]
480 echo "Selected Compiler: $COMPILER"
481 echo "Selected Options: $BOPTS"
482 SORTED
=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
483 BOPTS_WITHCOMPILER
=`echo $SORTED $COMPILER`
484 for i
in $BOPTS_WITHCOMPILER
490 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
492 if [ -z "$DESTINATION" ]
494 DESTINATION
="$VERSION"
497 if [ -n "$DESTINATION_SUFFIX" ]
499 DESTINATION
="$DESTINATION-$DESTINATION_SUFFIX"
502 [ -d $DESTINATION ] || Echo
"Creating dir: $DESTINATION"
503 [ -d $DESTINATION ] || mkdir
$DESTINATION
504 [ -d $DESTINATION/tmp
] || Echo
"Creating dir: $DESTINATION/tmp"
505 [ -d $DESTINATION/tmp
] || mkdir
$DESTINATION/tmp
507 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
508 rm -f $DESTINATION/tmp
/Makefile
509 rm -f $DESTINATION/tmp
/Make.depends
510 rm -f $DESTINATION/tmp
/Make.cidepends
511 rm -f $DESTINATION/tmp
/Make.lb
512 rm -f $DESTINATION/tmp
/Make.machine
513 rm -f $DESTINATION/tmp
/Make.extlib
516 # Create the bin, lib, include, etc. links:
517 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
518 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" ]
520 #Win32/64 version needs special compilers and *copied* (not linked)
522 echo "Copying compilers for $WINNAME into cygwin /bin directory"
523 cp -f $src/$WINNAME/unix2nt
* /bin
524 cp $src/win32
/system_ln
$DESTINATION/tmp
525 cp $src/win32
/unistd.h
$DESTINATION/tmp
526 echo "Compiling createlink.cpp ..."
527 (cd $src/win32
; unix2nt_cc
-c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; unix2nt_cc createlink.o
)
528 if test ! -x $src/win32
/createlink.exe
530 echo "VC++ is not properly installed!"
533 echo "Copying $src/win32/createlink.exe to /bin directory"
534 cp $src/win32
/createlink.exe
/bin
535 chmod +x
$DESTINATION/tmp
/system_ln
536 cp $src/win32
/gathertree.
local $DESTINATION/tmp
537 cp $src/win32
/gatherflat.
local $DESTINATION/tmp
539 cat > $DESTINATION/tmp
/system_ln
<<EOF
543 chmod +x
$DESTINATION/tmp
/system_ln
544 for newdir
in `echo bin lib lib_so include tmp`
546 Echo
"Soft-linking over $newdir"
549 rm -fr $newdir ||
exit 1
551 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
554 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
557 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
558 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
559 if test -f src
/ck-ldb
/Make.lb
561 $DESTINATION/tmp
/system_ln
"../../src/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
563 touch $DESTINATION/tmp
/Make.lb
565 $DESTINATION/tmp
/system_ln
"../../src/scripts/Makefile" $DESTINATION/tmp
/Makefile
566 $DESTINATION/tmp
/system_ln
"../../src/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
567 touch $DESTINATION/tmp
/Makefile.machine
568 touch $DESTINATION/tmp
/Make.extlib
570 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
571 Echo
"Generating $ConvUsr"
575 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
576 echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
580 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
581 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
585 # Create conv-mach-opt headers with special build-time options
586 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
587 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
588 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
590 Echo
"Generating $ConvHeader, conv-mach-opt.sh"
591 echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
592 echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
593 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
595 if test -n "$COMPILER"
598 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
599 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
605 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
606 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
610 if test "$BUILD_SHARED" = "-build-shared"
612 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
614 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
617 if test -n "$WITH_ROMIO"
619 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
622 if test -n "$WITH_PRODUCTION"
624 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
625 # Prepend optimize so that an explicit -no-optimize still works
626 OPTS
="-optimize -production $OPTS"
627 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
632 if [ "$PROGRAM" = "Tau" ]
634 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
635 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
637 #Setting up TAU trace library:
638 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
642 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
646 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
647 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
649 sed -e $SED_CHARMC src
/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$ src
/scripts
/Makefile
&& rm -f .Makefile.$$
650 sed -e $SED_CHARMC src
/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$ src
/scripts
/charmc
&& rm -f .charmc.$$
652 if test $WITH_TAU -eq 1
654 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
655 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
656 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
658 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
662 echo $BASEVERSION > $DESTINATION/tmp
/.
vdir
663 echo $BASEVERSION |
sed -e 's@-.*@@' > $DESTINATION/tmp
/.gdir
665 if test $BUILD_EMULATOR = 1
667 PROGRAM
="$PROGRAM bigsim"
668 # CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
673 Echo
"-------------------------------------------------"
674 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
675 Echo
"to resolve the problems yourself, visit"
676 Echo
" http://charm.cs.illinois.edu/"
677 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
681 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
683 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
685 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
686 chmod +x config_opts.sh
687 echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
688 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
690 [ $MAKEEXIT -ne 0 ] && printError
692 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
693 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
695 if [ $MAKEEXIT -eq 0 ]
697 Echo
"-------------------------------------------------"
698 Echo
"$PROGRAM built successfully."
699 Echo
"Next, try out a sample program like" \
700 "$DESTINATION/tests/charm++/simplearrayhello"