Update references to hapi_src to hapi_impl and revert hapiRegisterCallbacks
[charm.git] / build
blobb05e5e9db961526b0aca36214f4042772f203d3a
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 charmpy bigemulator 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 ' LIBS compile additional parallel libraries with Charm++ core'
28 echo ' charmpy compile shared library version of Charm++ for Charmpy'
29 echo ' bigemulator build additional BigSim libraries'
30 echo ' msa build Multiphase Shared Arrays(MSA) library'
31 echo ' Tau build the TAU tracing library for generating TAU performance data'
32 echo ' ChaNGa compile Charm++ core and necessary libraries for ChaNGa'
33 echo ' everylb compile EveryLB suite of load balancing strategies'
34 echo ''
36 echo '<versions>: '
37 ( cd $src ; ls -1 | egrep -v '(^shmem$)|(^mpi$)|(^sim$)|(^netlrts?$)|(^multicore$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win64$)|(^(gemini_)?gni$)|(^pami(lrts)?$)|(^verbs$)|(^ofi$)|(^template$)|(^cuda$)' | pr -3 -t )
38 echo ''
39 echo '<options>: compiler and platform specific options'
40 echo 'icc iccstatic xlc xlc64 gcc clang pgcc cc mpicxx'
41 echo 'help smp omp tcp bigemulator ooc syncft mlogft causalft papi pthreads'
42 echo '--incdir --libdir --basedir --build-shared --destination --suffix -j'
43 if test $more = 1
44 then
45 echo ''
46 echo 'For platform specific options, use help option:'
47 echo ' help platform specific help, e.g. ./build charm++ netlrts-linux-x86_64 help'
48 echo ''
49 echo 'Choose a compiler (only one option is allowed from this section):'
50 echo ' icc, iccstatic Intel compilers (default or static linking)'
51 echo ' xlc, xlc64 IBM XL compilers (with 64-bit option on architectures with 32-bit modes)'
52 echo ' gcc GNU compiler collection (on platforms where the default differs)'
53 echo ' clang Clang C/C++ compiler (including bgclang)'
54 echo ' pgcc Portland Group compilers'
55 echo ''
56 echo 'Choose an alternative fortran compiler (only one option is allowed from this section):'
57 echo ' gfortran GNU Fortran compiler'
58 echo ' flang Flang Fortran compiler'
59 echo ' xlf IBM XL Fortran compiler'
60 echo ' ifort Intel Fortran compiler'
61 echo " pgf90 Portland Group Fortran compiler"
62 echo ''
63 echo 'Platform specific options (choose multiple if apply):'
64 echo ' smp support for SMP, multithreaded charm on each node'
65 echo ' omp support for the integrated LLVM OpenMP runtime'
66 echo ' tcp use TCP sockets for communication (only for netlrts)'
67 echo ' pthreads compile with pthreads Converse threads'
68 echo ''
69 echo 'Advanced options:'
70 echo ' bigemulator compile for BigSim simulator'
71 echo ' ooc compile with out of core support'
72 echo ' syncft compile with Charm++ fault tolerance support'
73 echo ' mlogft compile with Charm++ message logging fault tolerance support'
74 echo ' papi compile with PAPI performance counter support (if any)'
75 echo ''
76 echo "Charm++ dynamic libraries:"
77 echo " --no-build-shared don't build Charm++'s shared libraries (default)"
78 echo " --build-shared build Charm++ dynamic libraries (.so) "
79 echo ''
82 echo 'Enable/disable features:'
83 configure_ac="$srcbaseabs/scripts/configure.ac"
84 parameter_regex='\([-A-Za-z0-9_=/ ]*\)'
85 description_regex='\([-A-Za-z0-9_=/ ()\\]*\)'
87 # Isolate the sections of configure.ac on which we want to operate. This command uses sed's p command which gives a result similar to grep.
88 # This is because grep cannot operate on multiple lines. GNU grep can do this using "-z", but it is not portable to BSD grep as found on macOS.
89 help_string_source="$(sed -n "/AS_HELP_STRING(\[${parameter_regex}\],/,/ *\[${description_regex}\])/p" "$configure_ac")"
91 # This regex matches the AS_HELP_STRING entries in configure.ac.
92 # It looks messy at the end due to matching square brackets (which must be escaped), commas, and an unrelated token on the same line (a BSD sed concession).
93 help_item_regex=" *\[AS_HELP_STRING(\[${parameter_regex}\],\n *\[${description_regex}\]) *\]*[, []*[a-z=_]*\]*[, ]*"
94 # "\1" is the parameter and "\2" is the description; use printf to left-justify the parameter.
95 help_output_print='printf " %-30s \2\\\\n" "\1"'
96 # The remaining sed syntax allows us to perform a substitution over two successive lines instead of only one.
97 help_items="$(echo "$help_string_source" | sed -n "1h; 1!H; \${ g; s:${help_item_regex}:${help_output_print}:g p; }")"
98 # With the AS_HELP_STRING entries replaced with printf commands, evaluate the result.
99 eval "$help_items"
100 printf " %-30s %s\n" "--with-production" "build Charm++ with all optimizations for maximum performance, and disabling all above features"
102 # Test that the above regular expressions are sufficient to capture all help strings.
103 num_help_strings="$(grep -c AS_HELP_STRING "$configure_ac")"
104 num_help_items="$(echo "$help_items" | wc -l)"
105 if [ $num_help_strings != $num_help_items ]; then
106 echo '<Warning>: Not all parameters were able to be displayed. Please notify the Charm++ developers at charm@cs.illinois.edu.'
110 echo ''
111 echo 'Miscellaneous options:'
112 echo ' --incdir=DIR specify additional include path for compiler'
113 echo ' --libdir=DIR specify additional lib path for compiler'
114 echo ' --basedir=DIR shortcut for the above two - DIR/include and DIR/lib'
115 echo ' -j[N] parallel make, N is the number of paralle make jobs'
116 echo " --with-lbtime-type specify real type for the load balancing timers"
117 echo " --destination=DIR build Charm++ inside DIR, by default the destination is <version>"
118 echo " --suffix=DIR append DIR to the destination directory of the Charm++ build"
119 echo " --tau-makefile=FILE Specify which TAU stub makefile to use"
121 echo ''
122 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
123 if test $more = 1
124 then
125 echo ''
126 echo 'Examples:'
127 echo "1. display all supported options for netlrts-linux-x86_64 using 'help':"
128 echo ' ./build charm++ netlrts-linux-x86_64 help'
129 echo '2. compile Charm++ on Linux with all available tuning:'
130 echo ' ./build charm++ netlrts-linux-x86_64 --with-production'
131 echo '3. compile Charm++ for Linux with Intel compiler and optimizations:'
132 echo ' ./build charm++ netlrts-linux-x86_64 icc -optimize'
133 echo '4. compile Charm++ for Windows with VC++:'
134 echo ' ./build charm++ netlrts-win-x86_64 -optimize'
135 echo '5. compile Charm++ with MPI that is installed at /usr/local/mpich:'
136 echo ' ./build charm++ mpi-linux-x86_64 --incdir /usr/local/mpich/include --libdir /usr/local/mpich/lib -optimize'
137 echo ' or in short,'
138 echo ' ./build charm++ mpi-linux-x86_64 --basedir /usr/local/mpich -optimize'
139 echo ' ./build Tau --tau-makefile=/usr/local/packages/TAU/x86_64/lib/Makefile.tau-mpi'
140 echo ''
141 echo 'Note: This script:'
142 echo ' 1. Creates directories <destination> and <destination>/tmp'
143 echo ' 2. Copies src/scripts/Makefile into <destination>/tmp'
144 echo ' 3. Does a "make basics" in <destination>/tmp.'
145 echo ' 3. Does a "make -jN <target> <version> OPTS=<charmc-options>" in <destination>/tmp.'
146 echo "That's all build does. The rest is handled by the Makefile."
147 echo ''
148 echo 'Thank you for using Charm++, please send questions or comments to '
149 echo 'Parallel Programming Lab at University of Illinois at Urbana-Champaign'
150 echo '(email: charm@cs.illinois.edu).'
152 else
153 echo ''
154 echo "To get more detailed help, run ./build --help"
158 Echo() {
159 [ "x$QUIET" = "x--quiet" ] || echo $*
162 printOption() {
163 for prefix in cc conv-mach
165 str="Supported compilers:"
166 [ "$prefix" = "conv-mach" ] && str="Supported options:"
167 opts=""
168 for dir in $OPT_DIRS
170 # echo "Checking for $prefix in $dir"
171 files=`cd $dir; ls $prefix-*.h 2>/dev/null`
172 opts="$opts "`echo $files | sed 's/'$prefix'-\([^.]*\).h/\1/g'`
173 done
174 tmp=.tmp.$$
175 rm -f $tmp; touch $tmp
176 for o in $opts
178 echo $o >> $tmp
179 done
180 opts=`sort $tmp | uniq`
181 rm -f $tmp
182 echo $str $opts
183 done
184 exit 1
187 CheckDir() {
188 for d in $*
190 if test ! -d $d
191 then
192 echo Error: cannot find $d!
193 exit 1
195 done
198 TestIfCompiler() {
199 compilerName=`echo $1 | sed 's/-[0-9\.][0-9\.]*$//'`
200 for dir in $OPT_DIRS
202 [ -f $dir/cc-$compilerName.sh ] && return 1
203 done
204 return 0
207 TestIfOption() {
208 for dir in $OPT_DIRS
210 [ -f $dir/conv-mach-$1.h ] && return 1
211 done
213 echo "Error> option: $1 is not supported in this version!";
214 printOption
218 # start
220 BUILD_CUDA=0
221 MAKEOPTS=""
222 OPTS=""
223 BOPTS=""
224 MORE=""
225 COMPILER=""
226 BASEDIR=
227 LIBDIR=
228 INCDIR=
229 ARCH=
230 BUILD_SHARED="" # default no shared lib
231 WITH_ROMIO="true" # default to building ROMIO on AMPI
232 WITH_PRODUCTION=
233 BUILD_EMULATOR=0
234 DESTINATION=""
235 DESTINATION_SUFFIX=""
236 TAU_MAKEFILE=""
237 QUIET=""
238 BUILD_OMP=0
239 ONLY_CONFIGURE=
241 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax | ( less || more ) && exit 1
242 [ $# -lt 2 ] && $(dirname "$0")/smart-build.pl && exit 1
243 PROGRAM=$1
244 shift
246 # find longest prefix of version argument that exists as a directory in $src
247 VERSION="$1"
248 VERSOPTS=""
249 testversion=""
250 oldifs="$IFS"
251 IFS="-"
252 for w in $1; do
253 IFS="$oldifs"
254 if [ -z "$testversion" ]; then
255 testversion="$w"
256 else
257 testversion="$testversion-$w"
259 if [ -d $src/$testversion ]; then
260 VERSION="$testversion"
261 VERSOPTS=""
262 else
263 VERSOPTS="$VERSOPTS $w"
265 done
266 if [ "$VERSION" = "$1" ]; then VERSOPTS=""; fi
268 BASEVERSION="$VERSION"
269 if test -f $src/$BASEVERSION/vdir_link
270 then
271 BASEVERSION=`cat $src/$BASEVERSION/vdir_link`
273 ARCH=`echo $BASEVERSION | sed -e 's@-.*@@'`
274 shift
276 #echo $src
277 #echo $BASEVERSION
278 #echo $ARCH
280 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
282 # process remainder of version argument as options, copied from below
283 for w in $VERSOPTS; do
284 # This has to be a build-time option (like "smp")
285 TestIfCompiler $w
286 if [ $? -eq 1 ]
287 then
288 # It specifies a compiler:
289 if [ ! -z "$COMPILER" ]
290 then
291 echo "Error> Tried to specify two compilers: $COMPILER and $w"
292 printOption
294 COMPILER=$w
295 else
296 # It specifies some other option:
297 TestIfOption $w
298 BOPTS="$BOPTS $w"
299 [ $w = "bigemulator" ] && BUILD_EMULATOR=1
300 [ $w = "bigsim" ] && BUILD_EMULATOR=1
301 [ $w = "cuda" ] && BUILD_CUDA=1
303 done
305 while [ ! $# -eq 0 ]
307 case "$1" in
308 "--basedir")
309 shift;
310 for dir in $1
312 CheckDir $dir/include $dir/lib
313 LIBDIR="$LIBDIR -L$dir/lib";
314 INCDIR="$INCDIR -I$dir/include"
315 done
316 shift
318 --basedir=*)
319 basedir=`echo $1 | awk -F= '{print $2}'`
320 for dir in $basedir
322 CheckDir $dir/include $dir/lib
323 LIBDIR="$LIBDIR -L$dir/lib";
324 INCDIR="$INCDIR -I$dir/include"
325 done
326 shift
328 "--libdir")
329 shift; CheckDir $1
330 for dir in $1
332 LIBDIR="$LIBDIR -L$dir";
333 done
334 shift
336 --libdir=*)
337 libdir=`echo $1 | awk -F= '{print $2}'`
338 CheckDir $libdir
339 for dir in $libdir
341 LIBDIR="$LIBDIR -L$dir";
342 done
343 shift
345 "--incdir")
346 shift; CheckDir $1
347 for dir in $1
349 INCDIR="$INCDIR -I$dir";
350 done
351 shift
353 --incdir=*)
354 incdir=`echo $1 | awk -F= '{print $2}'`
355 CheckDir $incdir
356 for dir in $incdir
358 INCDIR="$INCDIR -I$dir";
359 done
360 shift
362 --no-build-shared|--no-shared)
363 #BUILD_SHARED="-no-build-shared";
364 shift
366 --build-shared)
367 BUILD_SHARED="-build-shared";
368 shift
370 --with-romio)
371 WITH_ROMIO="true"; shift
373 --without-romio)
374 WITH_ROMIO=""; shift
376 --with-production)
377 WITH_PRODUCTION="true"
378 shift
380 --with-*)
381 CONFIG_OPTS="$CONFIG_OPTS $1"
382 shift
384 --without-*)
385 CONFIG_OPTS="$CONFIG_OPTS $1"
386 shift
388 --destination)
389 shift
390 DESTINATION="$1"
391 shift
393 --destination=*)
394 DESTINATION="`echo $1 | awk -F= '{print $2}'`"
395 shift
397 --suffix)
398 shift
399 DESTINATION_SUFFIX="$1"
400 shift
402 --suffix=*)
403 DESTINATION_SUFFIX="`echo $1 | awk -F= '{print $2}'`"
404 shift
406 --tau-makefile)
407 TAU_MAKEFILE=$1
408 shift
410 --tau-makefile=*)
411 TAU_MAKEFILE=`echo $1 | awk -F= '{print $2}'`
412 shift
414 --quiet)
415 MAKEOPTS="$MAKEOPTS --quiet"
416 QUIET="--quiet"
417 shift;
419 --only-configure)
420 ONLY_CONFIGURE="true"
421 shift
423 --enable-tracing|--enable-tracing=*)
424 CONFIG_OPTS="$CONFIG_OPTS $1"
425 ENABLE_TRACING=yes
426 shift
428 --enable-*)
429 CONFIG_OPTS="$CONFIG_OPTS $1"
430 shift
432 --disable-*)
433 CONFIG_OPTS="$CONFIG_OPTS $1"
434 shift
436 -j*)
437 PMAKENUM=`echo $1 | awk -Fj '{print $2}'`
438 MAKEOPTS="$MAKEOPTS -j $PMAKENUM"
439 shift;
441 -k|--keep-going)
442 MAKEOPTS="$MAKEOPTS $1"
443 shift;
445 -*)
446 # Compiler option (like -g or -Dfoo), copy it over
447 OPTS="$OPTS $1"
448 shift
450 "help")
451 printOption
454 # This has to be a build-time option (like "smp")
455 TestIfCompiler $1
456 if [ $? -eq 1 ]
457 then
458 # It specifies a compiler:
459 if [ ! -z "$COMPILER" ]
460 then
461 echo "Error> Tried to specify two compilers: $COMPILER and $1"
462 printOption
464 COMPILER=$1
465 else
466 # It specifies some other option:
467 TestIfOption $1
468 BOPTS="$BOPTS $1"
469 [ $1 = "bigemulator" ] && BUILD_EMULATOR=1
470 [ $1 = "bigsim" ] && BUILD_EMULATOR=1
471 [ $1 = "cuda" ] && BUILD_CUDA=1
473 shift
475 esac
476 done
478 if [ $BUILD_CUDA -eq 1 ]; then
479 HAVE_CUDA="no"
480 echo "checking for CUDA toolkit directory"
481 CUDA_PRESET_DIRS="/usr/local/cuda /usr/lib/nvidia-cuda-toolkit"
482 CUDA_CANDIDATE_DIRS="$CUDATOOLKIT_HOME $CUDA_PRESET_DIRS"
483 for dir in $CUDA_CANDIDATE_DIRS; do
484 if test -d "$dir"; then
485 CUDA_DIR="$dir"
486 HAVE_CUDA="yes"
487 echo "CUDA_DIR=$CUDA_DIR"
488 break
490 done
491 if [ "$HAVE_CUDA" = "no" ]; then
492 echo "Error> no CUDA toolkit found, searched \$CUDATOOLKIT_HOME $CUDA_PRESET_DIRS"
493 exit 1
497 [ "x$VERSION" = "x" ] && syntax && exit 1
499 if [ "x_$ARCH" = "x_net" ]; then
500 echo "Error: net-* has been removed, please use netlrts or verbs.";
501 exit 1;
504 #Check if building verbs on Omni-Path
505 if [ "x_$ARCH" = "x_verbs" ] && type /usr/sbin/opafabricinfo >/dev/null 2>&1; then
506 echo "WARNING: Detected Omni-Path diagnostic tools.";
507 echo "Verbs on Omni-Path architectures is not well supported: please use an OFI build instead.";
510 if test -n "$WITH_PRODUCTION" -a $BUILD_EMULATOR -eq 1 -a -z "$ENABLE_TRACING"
511 then
512 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
513 exit 1
516 if [ -z "$MAKE" ]
517 then
518 # prefer gmake
519 MAKE=`which gmake 2>/dev/null`
520 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE='make'
523 if [ ! -f $src/$BASEVERSION/conv-mach.h ]
524 then
525 echo "Error> build can not find arch: $BASEVERSION!"
526 exit 1
529 if [ ! -f "$srcbaseabs/scripts/configure" ]
530 then
531 if ! command -v autoreconf >/dev/null 2>&1 || ! command -v aclocal >/dev/null 2>&1
532 then
533 echo "Error> autoconf and automake are not installed."
534 exit 1
538 #generate header for uFcontext for the target VERSION
539 UFCONTEXT_HEADER_NAME=
540 if test `echo "$BASEVERSION" | grep -c "darwin"` -gt 0
541 then
542 UFCONTEXT_HEADER_NAME="macho_gas"
543 elif test `echo "$BASEVERSION" | grep -c "win"` -gt 0
544 then
545 UFCONTEXT_HEADER_NAME="windows"
546 else
547 UFCONTEXT_HEADER_NAME="elf_gas"
550 if test `echo "$BASEVERSION" | grep -c "arm7"` -gt 0
551 then
552 UFCONTEXT_HEADER_NAME="arm_aapcs_${UFCONTEXT_HEADER_NAME}"
553 elif test `echo "$BASEVERSION" | grep -c "arm8"` -gt 0
554 then
555 UFCONTEXT_HEADER_NAME="arm64_aapcs_${UFCONTEXT_HEADER_NAME}"
556 elif test `echo "$BASEVERSION" | grep -c "mips"` -gt 0
557 then
558 UFCONTEXT_HEADER_NAME="mips32_o32_${UFCONTEXT_HEADER_NAME}"
559 elif test `echo "$BASEVERSION" | grep -c "bluegene\|pami\|ppc"` -gt 0
560 then
561 UFCONTEXT_HEADER_NAME="ppc64_sysv_${UFCONTEXT_HEADER_NAME}"
562 elif test `echo "$BASEVERSION" | grep -c "cray\|x86_64\|linux64\|amd64"` -gt 0
563 then
564 UFCONTEXT_HEADER_NAME="x86_64_sysv_${UFCONTEXT_HEADER_NAME}"
565 else
566 UFCONTEXT_HEADER_NAME="i386_sysv_${UFCONTEXT_HEADER_NAME}"
569 #generate VERSION name combining all the build-time options.
570 if [ -n "$BOPTS" -o -n "$COMPILER" ]
571 then
572 echo "Selected Compiler: $COMPILER"
574 if test -n "$COMPILER" -a `echo "$BASEVERSION" | grep -c "cray\|gni\|gemini"` -gt 0
575 then
576 echo "Inserted explicit compiler options on Cray systems. Use compiler wrappers by loading PrgEnv-*"
577 echo "e.g.) module load PrgEnv-* (e.g. cray for cce, gnu for gcc, intel for icc, and pgi for pgcc)"
578 echo " ./build charm++ $BASEVERSION <other build options>"
579 echo "Charm++ uses the compiler wrapper 'CC' specified by the Cray system. Don't use explicit compiler options on Cray systems."
580 exit 1
583 if test `echo "$BOPTS" | grep -c "omp"` -gt 0 -a `echo "$BASEVERSION" | grep -c "darwin"` -gt 0
584 then
585 if test -z "$COMPILER" -o "$COMPILER" != "gcc"
586 then
587 echo "The integrated OpenMP runtime library is supported on Mac only with the normal gcc"
588 echo "You need to install this normal (non-clang) gcc via MacPorts or Homebrew"
589 echo "Read the instructions on the Charm++ manual."
590 exit 1
593 echo "Selected Options: $BOPTS"
594 SORTED=`echo $BOPTS | awk '{ for (i = 1; i <= NF; ++i) print $i }' | sort`
595 BOPTS_WITHCOMPILER=`echo $SORTED $COMPILER`
596 for i in $BOPTS_WITHCOMPILER
598 VERSION=$VERSION-$i
599 done
602 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
604 if [ -z "$DESTINATION" ]
605 then
606 DESTINATION="$VERSION"
609 if [ $(dirname $DESTINATION) != "." ]
610 then
611 srcbaseabs="$(cd $srcbaseabs; pwd)"
612 srcbase=$srcbaseabs
613 src="$srcbaseabs/arch/"
616 if [ -n "$DESTINATION_SUFFIX" ]
617 then
618 DESTINATION="$DESTINATION-$DESTINATION_SUFFIX"
621 # make sure $DESTINATION is more than '/' characters, because we `rm -rf` it
622 if [ -z "${DESTINATION#"${DESTINATION%%[!/]*}"}" ]
623 then
624 echo 'Error: $DESTINATION is the filesystem root.'
625 exit 1
628 if test -n "$BOPTS"
629 then
630 # pxshm+smp note: When combining the 'smp' and 'pxshm' directives, it is
631 # important that they be included in $ConvHeader in that
632 # exact order. See bug #717.
633 MYTMP=""
634 HAS_PXSHM=0
635 HAS_SMP=0
636 for i in $BOPTS; do
637 if [ "$i" = "smp" ]; then
638 HAS_SMP=1
639 elif [ "$i" = "pxshm" ]; then
640 HAS_PXSHM=1
641 elif [ "$i" = "omp" ]; then
642 BUILD_OMP=1
643 MYTMP="$MYTMP $i"
644 else
645 MYTMP="$MYTMP $i"
647 done
648 if [ $HAS_PXSHM -eq 1 ]; then
649 MYTMP="pxshm $MYTMP"
651 if [ $HAS_SMP -eq 1 ]; then
652 MYTMP="smp $MYTMP"
653 elif [ $BUILD_OMP -eq 1 ]; then
654 BUILD_OMP=2 #this means omp keyword inserted without smp keyword"
658 # build for Charmpy
659 if [ "$PROGRAM" = "charmpy" ]; then
660 if [ -n "$BOPTS" ] && [ "$HAS_SMP" -eq 1 ]; then
661 echo "Error: SMP mode is currently not supported with charmpy. Choose a non-smp version."
662 exit 1
665 if [ `echo "$BASEVERSION" | grep -c "multicore"` -gt 0 ]; then
666 echo "Error: multicore is currently not supported with charmpy. Choose a non-smp version."
667 exit 1
670 if test `echo "$CONFIG_OPTS" | grep -c "\--enable-charmpy"` -eq 0
671 then
672 CONFIG_OPTS="$CONFIG_OPTS --enable-charmpy"
675 if test `echo "$BASEVERSION" | grep -c "win"` -gt 0
676 then
677 BUILD_SHARED=""
678 else
679 BUILD_SHARED="-build-shared"
683 if test -n "$WITH_PRODUCTION"
684 then
685 # Prepend optimize so that an explicit -no-optimize still works
686 OPTS="-optimize -production $OPTS"
687 CONFIG_OPTS="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
690 # build with Tau
691 WITH_TAU=0
692 if [ "$PROGRAM" = "Tau" ]
693 then
694 Echo "TAU>>>> makefile config option: $TAU_MAKEFILE"
695 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
696 then
697 #Setting up TAU trace library:
698 Echo "TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
700 WITH_TAU=1
701 else
702 Echo "TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
703 TAU_MAKEFILE=""
707 if [ "$PROGRAM" = "ChaNGa" ]
708 then
709 #Setting lbuserdata when the build is ChaNGa
710 CONFIG_OPTS="--enable-lbuserdata $CONFIG_OPTS"
713 if test $BUILD_EMULATOR = 1
714 then
715 # export BIGSIM so that make targets can depend on it
716 MAKEOPTS="$MAKEOPTS BIGSIM=bigsim"
717 PROGRAM="$PROGRAM bigsim"
720 if [ $BUILD_OMP = 2 ]
721 then
722 case $DESTINATION in
723 "multicore"*)
724 BUILD_OMP=1
727 echo "OpenMP support should be built in SMP mode"
728 exit 1
730 esac
733 # ===================================================
734 # ---------- begin file structure creation ----------
735 # ===================================================
737 if [ -f "$DESTINATION/tmp/basics" ]
738 then
739 Echo "File structure already created; skipping directly to make"
740 else
742 for d in bin doc examples include lib lib_so tests tmp; do
743 rm -rf "$DESTINATION/$d"
744 done
746 Echo "Creating dir: $DESTINATION"
747 Echo "Creating dir: $DESTINATION/tmp"
748 mkdir -p "$DESTINATION/tmp"
750 echo "TARGET=${UFCONTEXT_HEADER_NAME}" > $DESTINATION/tmp/uFcontext.mk
752 # Create the bin, lib, include, etc. links:
753 WINNAME=`echo $VERSION | awk -F- '{print $2}'`
754 if [ "x_$WINNAME" = "x_win64" -o "x_$WINNAME" = "x_win" ]
755 then
756 #Win64 version needs special compilers and *copied* (not linked)
757 # source files.
758 cp $src/win/system_ln $DESTINATION/tmp
759 cp $src/win/unistd.h $DESTINATION/tmp
760 echo "Compiling createlink.cpp ..."
761 case "$COMPILER" in
762 gcc*|clang*)
763 createlinkcc="$COMPILER"
766 createlinkcc="./unix2nt_cc"
768 esac
769 (cd $src/win; $createlinkcc -c createlink.cpp -o createlink.o -D_WIN32_WINNT=0x0500; $createlinkcc createlink.o -o createlink.exe)
771 if test ! -x $src/win/createlink.exe
772 then
773 echo "VC++ is not properly installed!"
774 exit 1
776 chmod +x $DESTINATION/tmp/system_ln
777 cp $src/win/gathertree.local $DESTINATION/tmp
778 cp $src/win/gatherflat.local $DESTINATION/tmp
779 else
780 cat > $DESTINATION/tmp/system_ln <<EOF
781 #!/bin/sh
782 ln -f -s \$@
784 chmod +x $DESTINATION/tmp/system_ln
785 for newdir in `echo bin lib lib_so include tmp`
787 Echo "Soft-linking over $newdir"
788 if [ -r $newdir ]
789 then
790 rm -fr $newdir || exit 1
792 $DESTINATION/tmp/system_ln $DESTINATION/$newdir $newdir
793 done
794 rm -f VERSION
795 $DESTINATION/tmp/system_ln $DESTINATION/include/VERSION VERSION
798 Echo "Copying src/scripts/Makefile to $DESTINATION/tmp"
799 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.depends" $DESTINATION/tmp/Make.depends
800 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.cidepends" $DESTINATION/tmp/Make.cidepends
801 if test -f "$srcbaseabs/ck-ldb/Make.lb"
802 then
803 $DESTINATION/tmp/system_ln "$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp/Make.lb
804 else
805 touch $DESTINATION/tmp/Make.lb
807 $DESTINATION/tmp/system_ln "$srcbase/scripts/Makefile" $DESTINATION/tmp/Makefile
808 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.tau" $DESTINATION/tmp/Make.tau
809 $DESTINATION/tmp/system_ln "$srcbase/scripts/Make.gpu" $DESTINATION/tmp/Make.gpu
810 touch $DESTINATION/tmp/Makefile.machine
811 touch $DESTINATION/tmp/Make.extlib
813 ConvUsr="$DESTINATION/tmp/conv-mach-pre.sh"
814 Echo "Generating $ConvUsr"
815 echo > $ConvUsr
816 if test -n "$LIBDIR"
817 then
818 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
820 if test -n "$INCDIR"
821 then
822 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
823 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
825 chmod +x $ConvUsr
827 # Create conv-mach-opt headers with special build-time options
828 ConvHeader="$DESTINATION/tmp/conv-mach-opt.h"
829 ConvSh="$DESTINATION/tmp/conv-mach-opt.sh"
830 ConvMak="$DESTINATION/tmp/conv-mach-opt.mak"
831 if [ ! -f "$ConvSh" -o ! -f "$ConvHeader" -o ! -f "$ConvMak" ]
832 then
833 Echo "Generating $ConvHeader, conv-mach-opt.sh, conv-mach-opt.mak"
834 echo '/* Build-time options header, automatically generated by charm/build */' > $ConvHeader
835 echo '# Build-time options header, automatically generated by charm/build' > $ConvSh
836 echo '# Build-time options header, automatically generated by charm/build' > $ConvMak
837 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
839 if test -n "$COMPILER"
840 then
841 i=`echo $COMPILER | sed 's/-[0-9\.][0-9\.]*$//'`
842 echo "CMK_COMPILER_SUFFIX=${COMPILER#$i}" >> $ConvSh
843 echo '#include "'cc-$i.h'"' >> $ConvHeader
844 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
845 elif test `echo "$BASEVERSION" | grep -c "bluegeneq"` -gt 0
846 then
847 i="clang"
848 bgclang++11 --version
849 if [ $? -ne 0 ]; then
850 echo "ERROR: bgclang C/C++ compiler missing. Please load bgclang compilers, i.e. 'soft add +mpiwrapper-bgclang'."
851 exit 1
853 echo '#include "'cc-$i.h'"' >> $ConvHeader
854 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
856 if test -n "$MYTMP"
857 then
858 BOPTS=$MYTMP
859 for i in $BOPTS
861 echo '#include "'conv-mach-$i.h'"' >> $ConvHeader
862 if [ $BUILD_CUDA -eq 1 ]; then
863 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
864 echo "CUDA_DIR:=$CUDA_DIR" >> $ConvMak
866 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
867 done
870 if test "$BUILD_SHARED" = "-build-shared"
871 then
872 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
873 echo "CMK_NO_BUILD_SHARED:=false" >> $ConvMak
874 else
875 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
876 echo "CMK_NO_BUILD_SHARED:=true" >> $ConvMak
879 if test -n "$WITH_ROMIO"
880 then
881 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
882 echo "CMK_AMPI_WITH_ROMIO:=true" >> $ConvMak
885 if test -n "$WITH_PRODUCTION"
886 then
887 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
890 if test $WITH_TAU -eq 1
891 then
892 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE="Make.tau"
893 SED_CHARMC="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
895 sed -e $SED_CHARMC $srcbaseabs/scripts/Makefile > .Makefile.$$ && cp .Makefile.$$ $srcbaseabs/scripts/Makefile && rm -f .Makefile.$$
896 sed -e $SED_CHARMC $srcbaseabs/scripts/charmc > .charmc.$$ && cp .charmc.$$ $srcbaseabs/scripts/charmc && rm -f .charmc.$$
898 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
899 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
900 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
902 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
905 CMK_VDIR="$BASEVERSION"
906 echo "$CMK_VDIR" > $DESTINATION/tmp/.vdir
907 echo 'CMK_VDIR="'$CMK_VDIR'"' >> $ConvSh
908 echo "CMK_VDIR:=$CMK_VDIR" >> $ConvMak
909 CMK_GDIR="`echo $BASEVERSION | sed -e 's@-.*@@'`"
910 echo "$CMK_GDIR" > $DESTINATION/tmp/.gdir
911 echo 'CMK_GDIR="'$CMK_GDIR'"' >> $ConvSh
912 echo "CMK_GDIR:=$CMK_GDIR" >> $ConvMak
914 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
915 echo "SRCBASE=$srcbase" > $DESTINATION/tmp/charmpath.mk
917 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > "$DESTINATION/tmp/config_opts.sh"
918 chmod +x "$DESTINATION/tmp/config_opts.sh"
919 echo "OPTSATBUILDTIME:=$OPTS" >> $ConvMak
923 # ===================================================
924 # ----------- end file structure creation -----------
925 # ===================================================
927 printError()
929 Echo "-------------------------------------------------"
930 Echo "Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
931 Echo "to resolve the problems yourself, visit"
932 Echo " http://charm.cs.illinois.edu/"
933 Echo "for more information. Otherwise, email the developers at charm@cs.illinois.edu"
934 exit $MAKEEXIT
937 Echo "Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
938 cd $DESTINATION/tmp
939 $MAKE $MAKEOPTS basics OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
940 MAKEEXIT=$?
941 [ $MAKEEXIT -ne 0 ] && printError
943 if test -n "$ONLY_CONFIGURE"
944 then
945 exit 0
948 Echo "Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
949 $MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
950 MAKEEXIT=$?
951 if [ $MAKEEXIT -eq 0 ]
952 then
953 if [ $BUILD_OMP = 1 ];
954 then
955 $MAKE MFLAGS="$MAKEOPTS" openmp_llvm OPTS="$OPTS $BUILD_SHARED" QUIET="$QUIET"
957 Echo "-------------------------------------------------"
958 Echo "$PROGRAM built successfully."
959 Echo "Next, try out a sample program like" \
960 "$DESTINATION/tests/charm++/simplearrayhello"
961 else
962 printError