3 # Silly shorthand, used for source reorganization
4 if [ $
(dirname $0) = "." ]
9 srcbaseabs
="$(cd $(dirname $0)/src/; pwd)"
12 src
="$srcbaseabs/arch/"
18 echo 'Usage: build <target> <version> <options> [charmc-options ...]'
20 echo '<targets>: converse charm++ LIBS AMPI charmpy bigemulator msa'
21 echo '<targets>: doc ps-doc pdf-doc html-doc'
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'
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 )
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'
46 echo 'For platform specific options, use help option:'
47 echo ' help platform specific help, e.g. ./build charm++ netlrts-linux-x86_64 help'
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'
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"
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'
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)'
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) "
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.
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.'
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 parallel 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"
122 echo '<charmc-options>: normal compiler options e.g. -g -optimize -save -verbose'
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'
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'
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."
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).'
154 echo "To get more detailed help, run ./build --help"
159 [ "x$QUIET" = "x--quiet" ] ||
echo $
*
163 for prefix
in cc conv-mach
165 str
="Supported compilers:"
166 [ "$prefix" = "conv-mach" ] && str
="Supported options:"
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'`
175 rm -f $tmp; touch $tmp
180 opts
=`sort $tmp | uniq`
192 echo Error
: cannot
find $d!
199 compilerName
=`echo $1 | sed 's/-[0-9\.][0-9\.]*$//'`
202 [ -f $dir/cc-
$compilerName.sh
] && return 1
210 [ -f $dir/conv-mach-
$1.h
] && return 1
213 echo "Error> option: $1 is not supported in this version!";
230 BUILD_SHARED
="" # default no shared lib
231 WITH_ROMIO
="true" # default to building ROMIO on AMPI
235 DESTINATION_SUFFIX
=""
241 [ "$1" = '--help' -o "$1" = '-h' ] && more=1 && syntax |
( less ||
more ) && exit 1
242 [ $# -lt 2 ] && $
(dirname "$0")/smart-build.pl
&& exit 1
246 # find longest prefix of version argument that exists as a directory in $src
254 if [ -z "$testversion" ]; then
257 testversion
="$testversion-$w"
259 if [ -d $src/$testversion ]; then
260 VERSION
="$testversion"
263 VERSOPTS
="$VERSOPTS $w"
266 if [ "$VERSION" = "$1" ]; then VERSOPTS
=""; fi
268 BASEVERSION
="$VERSION"
269 if test -f $src/$BASEVERSION/vdir_link
271 BASEVERSION
=`cat $src/$BASEVERSION/vdir_link`
273 ARCH
=`echo $BASEVERSION | sed -e 's@-.*@@'`
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")
288 # It specifies a compiler:
289 if [ ! -z "$COMPILER" ]
291 echo "Error> Tried to specify two compilers: $COMPILER and $w"
296 # It specifies some other option:
299 [ $w = "bigemulator" ] && BUILD_EMULATOR
=1
300 [ $w = "bigsim" ] && BUILD_EMULATOR
=1
301 [ $w = "cuda" ] && BUILD_CUDA
=1
312 CheckDir
$dir/include
$dir/lib
313 LIBDIR
="$LIBDIR -L$dir/lib";
314 INCDIR
="$INCDIR -I$dir/include"
319 basedir
=`echo $1 | awk -F= '{print $2}'`
322 CheckDir
$dir/include
$dir/lib
323 LIBDIR
="$LIBDIR -L$dir/lib";
324 INCDIR
="$INCDIR -I$dir/include"
332 LIBDIR
="$LIBDIR -L$dir";
337 libdir
=`echo $1 | awk -F= '{print $2}'`
341 LIBDIR
="$LIBDIR -L$dir";
349 INCDIR
="$INCDIR -I$dir";
354 incdir
=`echo $1 | awk -F= '{print $2}'`
358 INCDIR
="$INCDIR -I$dir";
362 --no-build-shared|
--no-shared)
363 #BUILD_SHARED="-no-build-shared";
367 BUILD_SHARED
="-build-shared";
371 WITH_ROMIO
="true"; shift
377 WITH_PRODUCTION
="true"
381 CONFIG_OPTS
="$CONFIG_OPTS $1"
385 CONFIG_OPTS
="$CONFIG_OPTS $1"
394 DESTINATION
="`echo $1 | awk -F= '{print $2}'`"
399 DESTINATION_SUFFIX
="$1"
403 DESTINATION_SUFFIX
="`echo $1 | awk -F= '{print $2}'`"
411 TAU_MAKEFILE
=`echo $1 | awk -F= '{print $2}'`
415 MAKEOPTS
="$MAKEOPTS --quiet"
420 ONLY_CONFIGURE
="true"
423 --enable-tracing|
--enable-tracing=*)
424 CONFIG_OPTS
="$CONFIG_OPTS $1"
429 CONFIG_OPTS
="$CONFIG_OPTS $1"
433 CONFIG_OPTS
="$CONFIG_OPTS $1"
437 PMAKENUM
=`echo $1 | awk -Fj '{print $2}'`
438 MAKEOPTS
="$MAKEOPTS -j $PMAKENUM"
442 MAKEOPTS
="$MAKEOPTS $1"
446 # Compiler option (like -g or -Dfoo), copy it over
454 # This has to be a build-time option (like "smp")
458 # It specifies a compiler:
459 if [ ! -z "$COMPILER" ]
461 echo "Error> Tried to specify two compilers: $COMPILER and $1"
466 # It specifies some other option:
469 [ $1 = "bigemulator" ] && BUILD_EMULATOR
=1
470 [ $1 = "bigsim" ] && BUILD_EMULATOR
=1
471 [ $1 = "cuda" ] && BUILD_CUDA
=1
478 if [ $BUILD_CUDA -eq 1 ]; then
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
487 echo "CUDA_DIR=$CUDA_DIR"
491 if [ "$HAVE_CUDA" = "no" ]; then
492 echo "Error> no CUDA toolkit found, searched \$CUDATOOLKIT_HOME $CUDA_PRESET_DIRS"
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.";
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"
512 echo "Error: bigemulator requires tracing modules, --with-production must be used with --enable-tracing"
519 MAKE
=`which gmake 2>/dev/null`
520 [ -z "$MAKE" -o ! -x "$MAKE" ] && MAKE
='make'
523 if [ ! -f $src/$BASEVERSION/conv-mach.h
]
525 echo "Error> build can not find arch: $BASEVERSION!"
529 if [ ! -f "$srcbaseabs/scripts/configure" ]
531 if ! command -v autoreconf
>/dev
/null
2>&1 ||
! command -v aclocal
>/dev
/null
2>&1
533 echo "Error> autoconf and automake are not installed."
538 #generate header for uFcontext for the target VERSION
539 UFCONTEXT_HEADER_NAME
=
540 if test `echo "$BASEVERSION" | grep -c "darwin"` -gt 0
542 UFCONTEXT_HEADER_NAME
="macho_gas"
543 elif test `echo "$BASEVERSION" | grep -c "win"` -gt 0
545 UFCONTEXT_HEADER_NAME
="windows"
547 UFCONTEXT_HEADER_NAME
="elf_gas"
550 if test `echo "$BASEVERSION" | grep -c "arm7"` -gt 0
552 UFCONTEXT_HEADER_NAME
="arm_aapcs_${UFCONTEXT_HEADER_NAME}"
553 elif test `echo "$BASEVERSION" | grep -c "arm8"` -gt 0
555 UFCONTEXT_HEADER_NAME
="arm64_aapcs_${UFCONTEXT_HEADER_NAME}"
556 elif test `echo "$BASEVERSION" | grep -c "mips"` -gt 0
558 UFCONTEXT_HEADER_NAME
="mips32_o32_${UFCONTEXT_HEADER_NAME}"
559 elif test `echo "$BASEVERSION" | grep -c "bluegene\|pami\|ppc"` -gt 0
561 UFCONTEXT_HEADER_NAME
="ppc64_sysv_${UFCONTEXT_HEADER_NAME}"
562 elif test `echo "$BASEVERSION" | grep -c "cray\|x86_64\|linux64\|amd64"` -gt 0
564 UFCONTEXT_HEADER_NAME
="x86_64_sysv_${UFCONTEXT_HEADER_NAME}"
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" ]
572 echo "Selected Compiler: $COMPILER"
574 if test -n "$COMPILER" -a `echo "$BASEVERSION" | grep -c "cray\|gni\|gemini"` -gt 0
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."
583 if test `echo "$BOPTS" | grep -c "omp"` -gt 0 -a `echo "$BASEVERSION" | grep -c "darwin"` -gt 0
585 if test -z "$COMPILER" -o "$COMPILER" != "gcc"
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."
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
602 #echo "|$DESTINATION|$DESTINATION_SUFFIX|"
604 if [ -z "$DESTINATION" ]
606 DESTINATION
="$VERSION"
609 if [ $
(dirname $DESTINATION) != "." ]
611 srcbaseabs
="$(cd $srcbaseabs; pwd)"
613 src
="$srcbaseabs/arch/"
616 if [ -n "$DESTINATION_SUFFIX" ]
618 DESTINATION
="$DESTINATION-$DESTINATION_SUFFIX"
621 # make sure $DESTINATION is more than '/' characters, because we `rm -rf` it
622 if [ -z "${DESTINATION#"${DESTINATION%%[!/]*}"}" ]
624 echo 'Error: $DESTINATION is the filesystem root.'
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.
637 if [ "$i" = "smp" ]; then
639 elif [ "$i" = "pxshm" ]; then
641 elif [ "$i" = "omp" ]; then
648 if [ $HAS_PXSHM -eq 1 ]; then
651 if [ $HAS_SMP -eq 1 ]; then
653 if [ $BUILD_OMP -eq 1 ]; then
654 CONFIG_OPTS
="--enable-task-queue $CONFIG_OPTS"
656 elif [ $BUILD_OMP -eq 1 ]; then
657 BUILD_OMP
=2 #this means omp keyword inserted without smp keyword"
662 if [ "$PROGRAM" = "charmpy" ]; then
663 if [ -n "$BOPTS" ] && [ "$HAS_SMP" -eq 1 ]; then
664 echo "Error: SMP mode is currently not supported with charmpy. Choose a non-smp version."
668 if [ `echo "$BASEVERSION" | grep -c "multicore"` -gt 0 ]; then
669 echo "Error: multicore is currently not supported with charmpy. Choose a non-smp version."
673 if test `echo "$CONFIG_OPTS" | grep -c "\--enable-charmpy"` -eq 0
675 CONFIG_OPTS
="$CONFIG_OPTS --enable-charmpy"
678 if test `echo "$BASEVERSION" | grep -c "win"` -gt 0
682 BUILD_SHARED
="-build-shared"
686 if test -n "$WITH_PRODUCTION"
688 # Prepend optimize so that an explicit -no-optimize still works
689 OPTS
="-optimize -production $OPTS"
690 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
695 if [ "$PROGRAM" = "Tau" ]
697 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
698 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
700 #Setting up TAU trace library:
701 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
705 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
710 if [ "$PROGRAM" = "ChaNGa" ]
712 #Setting lbuserdata when the build is ChaNGa
713 CONFIG_OPTS
="--enable-lbuserdata $CONFIG_OPTS"
716 if test $BUILD_EMULATOR = 1
718 # export BIGSIM so that make targets can depend on it
719 MAKEOPTS
="$MAKEOPTS BIGSIM=bigsim"
720 PROGRAM
="$PROGRAM bigsim"
723 if [ $BUILD_OMP = 2 ]
730 echo "OpenMP support should be built in SMP mode"
736 # ===================================================
737 # ---------- begin file structure creation ----------
738 # ===================================================
740 if [ -f "$DESTINATION/tmp/basics" ]
742 Echo
"File structure already created; skipping directly to make"
745 for d
in bin doc examples include lib lib_so tests tmp
; do
746 rm -rf "$DESTINATION/$d"
749 Echo
"Creating dir: $DESTINATION"
750 Echo
"Creating dir: $DESTINATION/tmp"
751 mkdir
-p "$DESTINATION/tmp"
753 echo "TARGET=${UFCONTEXT_HEADER_NAME}" > $DESTINATION/tmp
/uFcontext.mk
755 # Create the bin, lib, include, etc. links:
756 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
757 if [ "x_$WINNAME" = "x_win64" -o "x_$WINNAME" = "x_win" ]
759 #Win64 version needs special compilers and *copied* (not linked)
761 cp $src/win
/system_ln
$DESTINATION/tmp
762 cp $src/win
/unistd.h
$DESTINATION/tmp
763 echo "Compiling createlink.cpp ..."
766 createlinkcc
="$COMPILER"
769 createlinkcc
="./unix2nt_cc"
772 (cd $src/win
; $createlinkcc -c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; $createlinkcc createlink.o
-o createlink.exe
)
774 if test ! -x $src/win
/createlink.exe
776 echo "VC++ is not properly installed!"
779 chmod +x
$DESTINATION/tmp
/system_ln
780 cp $src/win
/gathertree.
local $DESTINATION/tmp
781 cp $src/win
/gatherflat.
local $DESTINATION/tmp
783 cat > $DESTINATION/tmp
/system_ln
<<EOF
787 chmod +x
$DESTINATION/tmp
/system_ln
788 for newdir
in `echo bin lib lib_so include tmp`
790 Echo
"Soft-linking over $newdir"
793 rm -fr $newdir ||
exit 1
795 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
798 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
801 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
802 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
803 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
804 if test -f "$srcbaseabs/ck-ldb/Make.lb"
806 $DESTINATION/tmp
/system_ln
"$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
808 touch $DESTINATION/tmp
/Make.lb
810 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Makefile" $DESTINATION/tmp
/Makefile
811 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
812 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.gpu" $DESTINATION/tmp
/Make.gpu
813 touch $DESTINATION/tmp
/Makefile.machine
814 touch $DESTINATION/tmp
/Make.extlib
816 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
817 Echo
"Generating $ConvUsr"
821 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
825 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
826 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
830 # Create conv-mach-opt headers with special build-time options
831 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
832 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
833 ConvMak
="$DESTINATION/tmp/conv-mach-opt.mak"
834 if [ ! -f "$ConvSh" -o ! -f "$ConvHeader" -o ! -f "$ConvMak" ]
836 Echo
"Generating $ConvHeader, conv-mach-opt.sh, conv-mach-opt.mak"
837 echo '/* Build-time options header, automatically generated by charm/build */' > $ConvHeader
838 echo '# Build-time options header, automatically generated by charm/build' > $ConvSh
839 echo '# Build-time options header, automatically generated by charm/build' > $ConvMak
840 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
842 if test -n "$COMPILER"
844 i
=`echo $COMPILER | sed 's/-[0-9\.][0-9\.]*$//'`
845 echo "CMK_COMPILER_SUFFIX=${COMPILER#$i}" >> $ConvSh
846 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
847 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
848 elif test `echo "$BASEVERSION" | grep -c "bluegeneq"` -gt 0
851 bgclang
++11 --version
852 if [ $?
-ne 0 ]; then
853 echo "ERROR: bgclang C/C++ compiler missing. Please load bgclang compilers, i.e. 'soft add +mpiwrapper-bgclang'."
856 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
857 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
864 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
865 if [ $BUILD_CUDA -eq 1 ]; then
866 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
867 echo "CUDA_DIR:=$CUDA_DIR" >> $ConvMak
869 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
873 if test "$BUILD_SHARED" = "-build-shared"
875 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
876 echo "CMK_NO_BUILD_SHARED:=false" >> $ConvMak
878 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
879 echo "CMK_NO_BUILD_SHARED:=true" >> $ConvMak
882 if test -n "$WITH_ROMIO"
884 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
885 echo "CMK_AMPI_WITH_ROMIO:=true" >> $ConvMak
888 if test -n "$WITH_PRODUCTION"
890 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
893 if test $WITH_TAU -eq 1
895 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
896 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
898 sed -e $SED_CHARMC $srcbaseabs/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$
$srcbaseabs/scripts
/Makefile
&& rm -f .Makefile.$$
899 sed -e $SED_CHARMC $srcbaseabs/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$
$srcbaseabs/scripts
/charmc
&& rm -f .charmc.$$
901 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
902 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
903 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
905 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
908 CMK_VDIR
="$BASEVERSION"
909 echo "$CMK_VDIR" > $DESTINATION/tmp
/.
vdir
910 echo 'CMK_VDIR="'$CMK_VDIR'"' >> $ConvSh
911 echo "CMK_VDIR:=$CMK_VDIR" >> $ConvMak
912 CMK_GDIR
="`echo $BASEVERSION | sed -e 's@-.*@@'`"
913 echo "$CMK_GDIR" > $DESTINATION/tmp
/.gdir
914 echo 'CMK_GDIR="'$CMK_GDIR'"' >> $ConvSh
915 echo "CMK_GDIR:=$CMK_GDIR" >> $ConvMak
917 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
918 echo "SRCBASE=$srcbase" > $DESTINATION/tmp
/charmpath.mk
920 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > "$DESTINATION/tmp/config_opts.sh"
921 chmod +x
"$DESTINATION/tmp/config_opts.sh"
922 echo "OPTSATBUILDTIME:=$OPTS" >> $ConvMak
926 # ===================================================
927 # ----------- end file structure creation -----------
928 # ===================================================
932 Echo
"-------------------------------------------------"
933 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
934 Echo
"to resolve the problems yourself, visit"
935 Echo
" http://charm.cs.illinois.edu/"
936 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
940 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
942 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
944 [ $MAKEEXIT -ne 0 ] && printError
946 if test -n "$ONLY_CONFIGURE"
951 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
952 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
954 if [ $MAKEEXIT -eq 0 ]
956 if [ $BUILD_OMP = 1 ];
958 $MAKE MFLAGS
="$MAKEOPTS" openmp_llvm OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
960 Echo
"-------------------------------------------------"
961 Echo
"$PROGRAM built successfully."
962 Echo
"Next, try out a sample program like" \
963 "$DESTINATION/tests/charm++/simplearrayhello"