AMPI: MPI_Win_free should set the window to MPI_WIN_NULL
[charm.git] / build
blob28549f55825e82bf328b3ffff71f2746ff886e80
1 #!/bin/sh
3 # Silly shorthand, used for source reorganization
4 if [ $(dirname $0) = "." ]
5 then
6 srcbaseabs="./src"
7 srcbase="../../src"
8 else
9 srcbaseabs="$(cd $(dirname $0)/src/; pwd)"
10 srcbase=$srcbaseabs
12 src="$srcbaseabs/arch/"
14 more=0
16 syntax() {
17 echo ''
18 echo 'Usage: build <target> <version> <options> [charmc-options ...]'
19 echo ''
20 echo '<targets>: converse charm++ LIBS AMPI FEM bigemulator pose msa'
21 echo '<targets>: doc ps-doc pdf-doc html-doc'
22 if test $more = 1
23 then
24 echo ''
25 echo ' charm++ compile Charm++ core only'
26 echo ' AMPI compile Adaptive MPI on top of Charm++'
27 echo ' FEM compile FEM framework'
28 echo ' LIBS compile additional parallel libraries with Charm++ core'
29 echo ' bigemulator build additional BigSim libraries'
30 echo ' pose build POSE parallel discrete event simulator'
31 echo ' msa build Multiphase Shared Arrays(MSA) library'
32 echo ' Tau build the TAU tracing library for generating TAU performance data'
33 echo ' ChaNGa compile Charm++ core and necessary libraries for ChaNGa'
34 echo ' everylb compile EveryLB suite of load balancing strategies'
35 echo ''
37 echo '<versions>: '
38 ( cd $src ; ls -1 | egrep -v '(^shmem$)|(^mpi$)|(^sim$)|(^net(lrts)?$)|(^multicore$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win64$)|(^(gemini_)?gni$)|(^pami(lrts)?$)|(^verbs$)|(^template$)|(^cuda$)' | pr -3 -t )
39 echo ''
40 echo '<options>: compiler and platform specific options'
41 echo 'icc iccstatic xlc xlc64 gcc clang craycc pgcc pathscale cc cc64 mpcc gcc64 mpicxx'
42 echo 'help smp gm tcp scyld clustermatic bigemulator ooc syncft mlogft causalft'
43 echo 'papi pthreads lam'
44 echo '--incdir --libdir --basedir --build-shared --destination --suffix -j'
45 if test $more = 1
46 then
47 echo ''
48 echo 'For platform specific options, use help option:'
49 echo ' help platform specific help, e.g. ./build charm++ net-linux-x86_64 help'
50 echo ''
51 echo 'Choose a compiler (only one option is allowed from this section):'
52 echo ' icc, iccstatic Intel compilers (default or static linking)'
53 echo ' xlc, xlc64 IBM XL compilers (with 64-bit option on architectures with 32-bit modes)'
54 echo ' gcc GNU compiler collection (on platforms where the default differs)'
55 echo ' clang Clang C/C++ compiler'
56 echo ' craycc Cray compilers'
57 echo ' pgcc Portland Group compilers'
58 echo ' pathscale Pathscale compiler suite'
59 echo ' cc, cc64 For Sun WorkShop C++ 32/64 bit compilers'
60 echo ' mpcc SUN Solaris C++ compiler for MPI'
61 echo ''
62 echo 'Choose an alternative fortran compiler (only one option is allowed from this section):'
63 echo ' g95 G95 at http://ww.g95.org'
64 echo " pgf90 Portland Group Fortran compiler"
65 echo ' ifort Intel Fortran compiler'
66 echo ''
67 echo 'Platform specific options (choose multiple if apply):'
68 echo ' smp support for SMP, multithreaded charm on each node'
69 echo ' ibverbs use Infiniband Verbs for communication (only for net-linux-x86_64; prefer verbs-*)'
70 echo ' lam Use LAM MPI'
71 echo ' mpt use SGI Message Passing Toolkit (only for mpi version)'
72 echo ' gm use Myrinet for communication'
73 echo ' tcp use TCP sockets for communication (only for net version)'
74 echo ' scyld compile for Scyld Beowulf cluster based on bproc'
75 echo ' clustermatic compile for Clustermatic (support version 3 and 4) '
76 echo ' pthreads compile with pthreads Converse threads'
77 echo ''
78 echo 'Advanced options:'
79 echo ' bigemulator compile for BigSim simulator'
80 echo ' ooc compile with out of core support'
81 echo ' syncft compile with Charm++ fault tolerance support'
82 echo ' mlogft compile with Charm++ message logging fault tolerance support'
83 echo ' papi compile with PAPI performance counter support (if any)'
84 echo ''
85 echo "Charm++ dynamic libraries:"
86 echo " --no-build-shared don't build Charm++'s shared libraries (default)"
87 echo " --build-shared build Charm++ dynamic libraries (.so) "
88 echo ''
89 echo 'Enable/disable features:'
90 $srcbaseabs/scripts/configure --help | grep enable-
91 $srcbaseabs/scripts/configure --help | grep with-
92 echo " --with-production build Charm++ with all optimizations for maximum performance, and disabling all above features"
93 echo ''
94 echo 'Miscellaneous options:'
95 echo ' --incdir=DIR specify additional include path for compiler'
96 echo ' --libdir=DIR specify additional lib path for compiler'
97 echo ' --basedir=DIR shortcut for the above two - DIR/include and DIR/lib'
98 echo ' -j[N] parallel make, N is the number of paralle make jobs'
99 echo " --with-lbtime-type specify real type for the load balancing timers"
100 echo " --destination=DIR build Charm++ inside DIR, by default the destination is <version>"
101 echo " --suffix=DIR append DIR to the destination directory of the Charm++ build"
102 echo " --tau-makefile=FILE Specify which TAU stub makefile to use"
104 echo ''
105 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
106 if test $more = 1
107 then
108 echo ''
109 echo 'Examples:'
110 echo "1. display all supported options for net-linux-x86_64 using 'help':"
111 echo ' ./build charm++ net-linux-x86_64 help'
112 echo '2. compile Charm++ on Linux with all available tuning:'
113 echo ' ./build charm++ net-linux-x86_64 --with-production'
114 echo '3. compile Charm++ for Linux (32bit) clustermatic Beowulf cluster with Intel compiler and optimizations:'
115 echo ' ./build charm++ net-linux clustermatic icc -optimize'
116 echo '4. compile Charm++ for Windows with VC++ (Cygwin required):'
117 echo ' ./build charm++ net-win64 -optimize'
118 echo '5. 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'
120 echo ' or in short,'
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'
123 echo ''
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."
130 echo ''
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).'
135 else
136 echo ''
137 echo "To get more detailed help, run ./build --help"
141 Echo() {
142 [ "x$QUIET" = "x--quiet" ] || echo $*
145 printOption() {
146 for prefix in cc conv-mach
148 str="Supported compilers:"
149 [ "$prefix" = "conv-mach" ] && str="Supported options:"
150 opts=""
151 for dir in $OPT_DIRS
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'`
156 done
157 tmp=.tmp.$$
158 rm -f $tmp; touch $tmp
159 for o in $opts
161 echo $o >> $tmp
162 done
163 opts=`sort $tmp | uniq`
164 rm -f $tmp
165 echo $str $opts
166 done
167 exit 1
170 CheckDir() {
171 for d in $*
173 if test ! -d $d
174 then
175 echo Error: cannot find $d!
176 exit 1
178 done
181 TestIfCompiler() {
182 for dir in $OPT_DIRS
184 [ -f $dir/cc-$1.sh ] && return 1
185 done
186 return 0
189 TestIfOption() {
190 for dir in $OPT_DIRS
192 [ -f $dir/conv-mach-$1.h ] && return 1
193 done
195 echo "Error> option: $1 is not supported in this version!";
196 printOption
200 # start
202 BUILD_CUDA=0
203 MAKEOPTS=""
204 OPTS=""
205 BOPTS=""
206 MORE=""
207 COMPILER=""
208 BASEDIR=
209 LIBDIR=
210 INCDIR=
211 ARCH=
212 BUILD_SHARED="" # default no shared lib
213 WITH_ROMIO="true" # default to building ROMIO on AMPI
214 WITH_PRODUCTION=
215 BUILD_EMULATOR=0
216 DESTINATION=""
217 DESTINATION_SUFFIX=""
218 TAU_MAKEFILE=""
219 QUIET=""
220 BUILD_OMP=0
222 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | ( less || more ) && exit 1
223 [ $# -lt 2 ] && ./smart-build.pl && exit 1
224 PROGRAM=$1
225 shift
227 # find longest prefix of version argument that exists as a directory in $src
228 VERSION=$1
229 VERSOPTS=""
230 testversion=""
231 oldifs=$IFS
232 IFS=-
233 for w in $1; do
234 IFS=$oldifs
235 if [ -z "$testversion" ]; then
236 testversion=$w
237 else
238 testversion="$testversion-$w"
240 if [ -d $src/$testversion ]; then
241 VERSION=$testversion
242 VERSOPTS=""
243 else
244 VERSOPTS="$VERSOPTS $w"
246 done
247 if [ $VERSION = $1 ]; then VERSOPTS=""; fi
249 BASEVERSION=$VERSION;
250 if test -f $src/$BASEVERSION/vdir_link
251 then
252 BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
254 ARCH=`echo $BASEVERSION | sed -e 's@-.*@@'`
255 shift
257 #echo $src
258 #echo $BASEVERSION
259 #echo $ARCH
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")
266 TestIfCompiler $w
267 if [ $? -eq 1 ]
268 then
269 # It specifies a compiler:
270 if [ ! -z "$COMPILER" ]
271 then
272 echo "Error> Tried to specify two compilers: $COMPILER and $w"
273 printOption
275 COMPILER=$w
276 else
277 # It specifies some other option:
278 TestIfOption $w
279 BOPTS="$BOPTS $w"
280 [ $w = "bigemulator" ] && BUILD_EMULATOR=1
281 [ $w = "bigsim" ] && BUILD_EMULATOR=1
282 [ $w = "cuda" ] && BUILD_CUDA=1
284 done
286 while [ ! $# -eq 0 ]
288 case "$1" in
289 "--basedir")
290 shift;
291 for dir in $1
293 CheckDir $dir/include $dir/lib
294 LIBDIR="$LIBDIR -L$dir/lib";
295 INCDIR="$INCDIR -I$dir/include"
296 done
297 shift
299 --basedir=*)
300 basedir=`echo $1 | awk -F= '{print $2}'`
301 for dir in $basedir
303 CheckDir $dir/include $dir/lib
304 LIBDIR="$LIBDIR -L$dir/lib";
305 INCDIR="$INCDIR -I$dir/include"
306 done
307 shift
309 "--libdir")
310 shift; CheckDir $1
311 for dir in $1
313 LIBDIR="$LIBDIR -L$dir";
314 done
315 shift
317 --libdir=*)
318 libdir=`echo $1 | awk -F= '{print $2}'`
319 CheckDir $libdir
320 for dir in $libdir
322 LIBDIR="$LIBDIR -L$dir";
323 done
324 shift
326 "--incdir")
327 shift; CheckDir $1
328 for dir in $1
330 INCDIR="$INCDIR -I$dir";
331 done
332 shift
334 --incdir=*)
335 incdir=`echo $1 | awk -F= '{print $2}'`
336 CheckDir $incdir
337 for dir in $incdir
339 INCDIR="$INCDIR -I$dir";
340 done
341 shift
343 --no-build-shared|--no-shared)
344 #BUILD_SHARED="-no-build-shared";
345 shift
347 --build-shared)
348 BUILD_SHARED="-build-shared";
349 shift
351 --with-romio)
352 WITH_ROMIO="true"; shift
354 --without-romio)
355 WITH_ROMIO=""; shift
357 --with-production)
358 WITH_PRODUCTION="true"
359 shift
361 --with-*)
362 CONFIG_OPTS="$CONFIG_OPTS $1"
363 shift
365 --without-*)
366 CONFIG_OPTS="$CONFIG_OPTS $1"
367 shift
369 --destination)
370 shift
371 DESTINATION="$1"
372 shift
374 --destination=*)
375 DESTINATION="`echo $1 | awk -F= '{print $2}'`"
376 shift
378 --suffix)
379 shift
380 DESTINATION_SUFFIX="$1"
381 shift
383 --suffix=*)
384 DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
385 shift
387 --tau-makefile)
388 TAU_MAKEFILE=$1
389 shift
391 --tau-makefile=*)
392 TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
393 shift
395 --quiet)
396 MAKEOPTS="$MAKEOPTS --quiet"
397 QUIET="--quiet"
398 shift;
400 --enable-tracing|--enable-tracing=*)
401 CONFIG_OPTS="$CONFIG_OPTS $1"
402 ENABLE_TRACING=yes
403 shift
405 --enable-*)
406 CONFIG_OPTS="$CONFIG_OPTS $1"
407 shift
409 --disable-*)
410 CONFIG_OPTS="$CONFIG_OPTS $1"
411 shift
413 -j*)
414 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
415 MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
416 shift;
418 -*)
419 # We hit a real compiler option (like -g, or -Dfoo),
420 # so just copy over all remaining options
421 while [ ! $# -eq 0 ]
423 OPTS="$OPTS $1"; shift
424 done
426 "help")
427 printOption
430 # This has to be a build-time option (like "smp")
431 TestIfCompiler $1
432 if [ $? -eq 1 ]
433 then
434 # It specifies a compiler:
435 if [ ! -z "$COMPILER" ]
436 then
437 echo "Error> Tried to specify two compilers: $COMPILER and $1"
438 printOption
440 COMPILER=$1
441 else
442 # It specifies some other option:
443 TestIfOption $1
444 BOPTS="$BOPTS $1"
445 [ $1 = "bigemulator" ] && BUILD_EMULATOR=1
446 [ $1 = "bigsim" ] && BUILD_EMULATOR=1
447 [ $1 = "cuda" ] && BUILD_CUDA=1
449 shift
451 esac
452 done
454 if [ $BUILD_CUDA -eq 1 ]; then
455 HAVE_CUDA="no"
456 echo "checking for CUDA toolkit directory"
457 CUDA_PRESET_DIRS="/usr/local/cuda /usr/lib/nvidia-cuda-toolkit"
458 CUDA_CANDIDATE_DIRS="$CUDATOOLKIT_HOME $CUDA_PRESET_DIRS"
459 for dir in $CUDA_CANDIDATE_DIRS; do
460 if test -d "$dir"; then
461 CUDA_DIR="$dir"
462 HAVE_CUDA="yes"
463 echo "CUDA_DIR=$CUDA_DIR"
464 break
466 done
467 if [ "$HAVE_CUDA" = "no" ]; then
468 echo "Error> no CUDA toolkit found, searched \$CUDATOOLKIT_HOME $CUDA_PRESET_DIRS"
469 exit 1
473 [ "x$VERSION" = "x" ] && syntax && exit 1
475 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
476 then
477 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
478 exit 1
481 if [ -z "$MAKE" ]
482 then
483 # prefer gmake
484 MAKE=`which gmake 2>/dev/null`
485 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
488 if [ ! -f $src/$BASEVERSION/conv-mach.h ]
489 then
490 echo "Error> build can not find arch: $BASEVERSION!"
491 exit 1
494 #generate VERSION name combining all the build-time options.
495 if [ -n "$BOPTS" -o -n "$COMPILER" ]
496 then
497 echo "Selected Compiler: $COMPILER"
499 if test -n "$COMPILER" -a `echo "$BASEVERSION" | grep -c "cray\|gni\|gemini"` -gt 0
500 then
501 echo "Inserted explicit compiler options on Cray systems. Use compiler wrappers by loading PrgEnv-*"
502 echo "e.g.) module load PrgEnv-* (e.g. gnu for gcc, intel for icc, and pgi for pgcc)"
503 echo " ./build charm++ $BASEVERSION <other build options>"
504 echo "Charm++ uses the compiler wrapper 'CC' specified by the Cray system. Don't use explicit compiler options on Cray systems."
505 exit 1
508 echo "Selected Options: $BOPTS"
509 SORTED=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
510 BOPTS_WITHCOMPILER=`echo $SORTED $COMPILER`
511 for i in $BOPTS_WITHCOMPILER
513 VERSION=$VERSION-$i
514 done
517 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
519 if [ -z "$DESTINATION" ]
520 then
521 DESTINATION="$VERSION"
524 if [ $(dirname $DESTINATION) != "." ]
525 then
526 srcbaseabs="$(cd $srcbaseabs; pwd)"
527 srcbase=$srcbaseabs
528 src="$srcbaseabs/arch/"
531 if [ -n "$DESTINATION_SUFFIX" ]
532 then
533 DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
536 [ -d $DESTINATION ] || Echo "Creating dir: $DESTINATION"
537 [ -d $DESTINATION ] || mkdir $DESTINATION
538 [ -d $DESTINATION/tmp ] || Echo "Creating dir: $DESTINATION/tmp"
539 [ -d $DESTINATION/tmp ] || mkdir $DESTINATION/tmp
541 Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
542 rm -f $DESTINATION/tmp/Makefile
543 rm -f $DESTINATION/tmp/Make.depends
544 rm -f $DESTINATION/tmp/Make.cidepends
545 rm -f $DESTINATION/tmp/Make.lb
546 rm -f $DESTINATION/tmp/Make.machine
547 rm -f $DESTINATION/tmp/Make.extlib
550 # Create the bin, lib, include, etc. links:
551 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
552 if [ "x_$WINNAME" = "x_win32" -o "x_$WINNAME" = "x_win64" -o "x_$WINNAME" = "x_win" ]
553 then
554 #Win32/64 version needs special compilers and *copied* (not linked)
555 # source files.
556 cp $src/win32/system_ln $DESTINATION/tmp
557 cp $src/win32/unistd.h $DESTINATION/tmp
558 echo "Compiling createlink.cpp ..."
559 (cd $src/win32; ../$WINNAME/unix2nt_cc -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; ../$WINNAME/unix2nt_cc createlink.o)
561 if test ! -x $src/win32/createlink.exe
562 then
563 echo "VC++ is not properly installed!"
564 exit 1
566 chmod +x $DESTINATION/tmp/system_ln
567 cp $src/win32/gathertree.local $DESTINATION/tmp
568 cp $src/win32/gatherflat.local $DESTINATION/tmp
569 else
570 cat > $DESTINATION/tmp/system_ln <<EOF
571 #!/bin/sh
572 ln -f -s \$@
574 chmod +x $DESTINATION/tmp/system_ln
575 for newdir in `echo bin lib lib_so include tmp`
577 Echo "Soft-linking over $newdir"
578 if [ -r $newdir ]
579 then
580 rm -fr $newdir || exit 1
582 $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
583 done
584 rm -f VERSION
585 $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
588 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.depends" $DESTINATION/tmp/Make.depends
589 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.cidepends" $DESTINATION/tmp/Make.cidepends
590 if test -f "$srcbaseabs/ck-ldb/Make.lb"
591 then
592 $DESTINATION/tmp/system_ln "$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
593 else
594 touch $DESTINATION/tmp/Make.lb
596 $DESTINATION/tmp/system_ln "$srcbase/scripts/Makefile" $DESTINATION/tmp/Makefile
597 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.tau" $DESTINATION/tmp/Make.tau
598 touch $DESTINATION/tmp/Makefile.machine
599 touch $DESTINATION/tmp/Make.extlib
601 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
602 Echo "Generating $ConvUsr"
603 echo > $ConvUsr
604 if test -n "$LIBDIR"
605 then
606 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
607 echo 'USER_OPTS_LDXX="$USER_OPTS_LDXX '$LIBDIR'"' >> $ConvUsr
609 if test -n "$INCDIR"
610 then
611 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
612 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
614 chmod +x $ConvUsr
616 # Create conv-mach-opt headers with special build-time options
617 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
618 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
619 if [ ! -f $ConvSh -o ! -f $ConvHeader ]
620 then
621 Echo "Generating $ConvHeader, conv-mach-opt.sh"
622 echo '/* Build-time options header, automatically generated by charm/build*/'> $ConvHeader
623 echo '# Built-time options header, automatically generated by charm/build'> $ConvSh
624 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
626 if test -n "$COMPILER"
627 then
628 i="$COMPILER"
629 echo '#include "'cc-$i.h'"' >> $ConvHeader
630 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
631 elif test `echo "$BASEVERSION" | grep -c "bluegeneq"` -gt 0
632 then
633 i="xlc"
634 echo '#include "'cc-$i.h'"' >> $ConvHeader
635 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
637 if test -n "$BOPTS"
638 then
639 # pxshm+smp note: When combining the 'smp' and 'pxshm' directives, it is
640 # important that they be included in $ConvHeader in that
641 # exact order. See bug #717.
642 TMP=""
643 HAS_PXSHM=0
644 HAS_SMP=0
645 for i in $BOPTS; do
646 if [ "$i" = "smp" ]; then
647 HAS_SMP=1
648 elif [ "$i" = "pxshm" ]; then
649 HAS_PXSHM=1
650 elif [ "$i" = "omp" ]; then
651 BUILD_OMP=1
652 TMP="$TMP $i"
653 else
654 TMP="$TMP $i"
656 done
657 if [ $HAS_PXSHM -eq 1 ]; then
658 TMP="pxshm $TMP"
660 if [ $HAS_SMP -eq 1 ]; then
661 TMP="smp $TMP"
662 elif [ $BUILD_OMP -eq 1 ]; then
663 BUILD_OMP=2 #this means omp keyword inserted without smp keyword"
666 BOPTS=$TMP
667 for i in $BOPTS
669 echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
670 if [ $BUILD_CUDA -eq 1 ]; then
671 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
673 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
674 done
677 if test "$BUILD_SHARED" = "-build-shared"
678 then
679 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
680 else
681 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
684 if test -n "$WITH_ROMIO"
685 then
686 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
689 if test -n "$WITH_PRODUCTION"
690 then
691 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
692 # Prepend optimize so that an explicit -no-optimize still works
693 OPTS="-optimize -production $OPTS"
694 CONFIG_OPTS="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
697 # build with Tau
698 WITH_TAU=0
699 if [ "$PROGRAM" = "Tau" ]
700 then
701 Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
702 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
703 then
704 #Setting up TAU trace library:
705 Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
707 WITH_TAU=1
708 else
709 Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
710 TAU_MAKEFILE=""
714 if test $WITH_TAU -eq 1
715 then
716 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
717 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
719 sed -e $SED_CHARMC $srcbaseabs/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ $srcbaseabs/scripts/Makefile && rm -f .Makefile.$$
720 sed -e $SED_CHARMC $srcbaseabs/scripts/charmc > .charmc.$$ && cp .charmc.$$ $srcbaseabs/scripts/charmc && rm -f .charmc.$$
722 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
723 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
724 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
726 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
729 if [ "$PROGRAM" = "ChaNGa" ]
730 then
731 #Setting lbuserdata when the build is ChaNGa
732 CONFIG_OPTS="--enable-lbuserdata $CONFIG_OPTS"
735 echo $BASEVERSION > $DESTINATION/tmp/.vdir
736 echo $BASEVERSION | sed -e 's@-.*@@' > $DESTINATION/tmp/.gdir
738 if test $BUILD_EMULATOR = 1
739 then
740 PROGRAM="$PROGRAM bigsim"
741 # CONFIG_OPTS="--disable-charmdebug $CONFIG_OPTS"
745 if [ $BUILD_OMP = 2 ]
746 then
747 case $DESTINATION in
748 "multicore"*)
749 BUILD_OMP=1
752 echo "OpenMP support should be built in SMP mode"
753 exit 1
755 esac
758 printError()
760 Echo "-------------------------------------------------"
761 Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
762 Echo "to resolve the problems yourself, visit"
763 Echo " http://charm.cs.illinois.edu/"
764 Echo "for more information. Otherwise, email the developers at charm@cs.illinois.edu"
765 exit $MAKEEXIT
768 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
769 echo "SRCBASE=$srcbase" > $DESTINATION/tmp/charmpath.mk
771 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
772 cd $DESTINATION/tmp
773 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > config_opts.sh
774 chmod +x config_opts.sh
775 echo "OPTSATBUILDTIME += $OPTS" > buildopts.mk
776 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
777 MAKEEXIT=$?
778 [ $MAKEEXIT -ne 0 ] && printError
780 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
781 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
782 MAKEEXIT=$?
783 if [ $MAKEEXIT -eq 0 ]
784 then
785 if [ $BUILD_OMP = 1 ];
786 then
787 $MAKE MFLAGS="$MAKEOPTS" openmp_llvm OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
789 Echo "-------------------------------------------------"
790 Echo "$PROGRAM built successfully."
791 Echo "Next, try out a sample program like" \
792 "$DESTINATION/tests/charm++/simplearrayhello"
793 else
794 printError