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 charm4py 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 ' charm4py compile shared library version of Charm++ for charm4py'
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" ] ||
[ "$PROGRAM" = "charm4py" ]; then
664 if [ -n "$BOPTS" ] && [ "$HAS_SMP" -eq 1 ]; then
665 echo "Error: SMP mode is currently not supported with charm4py. Choose a non-smp version."
669 if [ `echo "$BASEVERSION" | grep -c "multicore"` -gt 0 ]; then
670 echo "Error: multicore is currently not supported with charm4py. Choose a non-smp version."
674 if test `echo "$CONFIG_OPTS" | grep -c "\--enable-charmpy"` -eq 0
676 CONFIG_OPTS
="$CONFIG_OPTS --enable-charmpy"
679 if test `echo "$BASEVERSION" | grep -c "win"` -gt 0
683 BUILD_SHARED
="-build-shared"
687 if test -n "$WITH_PRODUCTION"
689 # Prepend optimize so that an explicit -no-optimize still works
690 OPTS
="-optimize -production $OPTS"
691 CONFIG_OPTS
="--disable-controlpoint --disable-tracing --disable-tracing-commthread --disable-charmdebug --disable-replay --disable-error-checking --disable-stats $CONFIG_OPTS"
696 if [ "$PROGRAM" = "Tau" ]
698 Echo
"TAU>>>> makefile config option: $TAU_MAKEFILE"
699 if [ -n "$TAU_MAKEFILE" -a -f $TAU_MAKEFILE ]
701 #Setting up TAU trace library:
702 Echo
"TAU>>>> configuring with this TAU makefile: $TAU_MAKEFILE"
706 Echo
"TAU>>>> ERROR could not find Makefile: $TAU_MAKEFILE, ignored"
711 if [ "$PROGRAM" = "ChaNGa" ]
713 #Setting lbuserdata when the build is ChaNGa
714 CONFIG_OPTS
="--enable-lbuserdata $CONFIG_OPTS"
717 if test $BUILD_EMULATOR = 1
719 # export BIGSIM so that make targets can depend on it
720 MAKEOPTS
="$MAKEOPTS BIGSIM=bigsim"
721 PROGRAM
="$PROGRAM bigsim"
724 if [ $BUILD_OMP = 2 ]
731 echo "OpenMP support should be built in SMP mode"
737 # ===================================================
738 # ---------- begin file structure creation ----------
739 # ===================================================
741 if [ -f "$DESTINATION/tmp/basics" ]
743 Echo
"File structure already created; skipping directly to make"
746 for d
in bin doc examples include lib lib_so tests tmp
; do
747 rm -rf "$DESTINATION/$d"
750 Echo
"Creating dir: $DESTINATION"
751 Echo
"Creating dir: $DESTINATION/tmp"
752 mkdir
-p "$DESTINATION/tmp"
754 echo "TARGET=${UFCONTEXT_HEADER_NAME}" > $DESTINATION/tmp
/uFcontext.mk
756 # Create the bin, lib, include, etc. links:
757 WINNAME
=`echo $VERSION | awk -F- '{print $2}'`
758 if [ "x_$WINNAME" = "x_win64" -o "x_$WINNAME" = "x_win" ]
760 #Win64 version needs special compilers and *copied* (not linked)
762 cp $src/win
/system_ln
$DESTINATION/tmp
763 cp $src/win
/unistd.h
$DESTINATION/tmp
764 echo "Compiling createlink.cpp ..."
767 createlinkcc
="$COMPILER"
770 createlinkcc
="./unix2nt_cc"
773 (cd $src/win
; $createlinkcc -c createlink.cpp
-o createlink.o
-D_WIN32_WINNT=0x0500; $createlinkcc createlink.o
-o createlink.exe
)
775 if test ! -x $src/win
/createlink.exe
777 echo "VC++ is not properly installed!"
780 chmod +x
$DESTINATION/tmp
/system_ln
781 cp $src/win
/gathertree.
local $DESTINATION/tmp
782 cp $src/win
/gatherflat.
local $DESTINATION/tmp
784 cat > $DESTINATION/tmp
/system_ln
<<EOF
788 chmod +x
$DESTINATION/tmp
/system_ln
789 for newdir
in `echo bin lib lib_so include tmp`
791 Echo
"Soft-linking over $newdir"
794 rm -fr $newdir ||
exit 1
796 $DESTINATION/tmp
/system_ln
$DESTINATION/$newdir $newdir
799 $DESTINATION/tmp
/system_ln
$DESTINATION/include
/VERSION VERSION
802 Echo
"Copying src/scripts/Makefile to $DESTINATION/tmp"
803 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.depends" $DESTINATION/tmp
/Make.depends
804 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.cidepends" $DESTINATION/tmp
/Make.cidepends
805 if test -f "$srcbaseabs/ck-ldb/Make.lb"
807 $DESTINATION/tmp
/system_ln
"$srcbase/ck-ldb/Make.lb" $DESTINATION/tmp
/Make.lb
809 touch $DESTINATION/tmp
/Make.lb
811 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Makefile" $DESTINATION/tmp
/Makefile
812 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.tau" $DESTINATION/tmp
/Make.tau
813 $DESTINATION/tmp
/system_ln
"$srcbase/scripts/Make.gpu" $DESTINATION/tmp
/Make.gpu
814 touch $DESTINATION/tmp
/Makefile.machine
815 touch $DESTINATION/tmp
/Make.extlib
817 ConvUsr
="$DESTINATION/tmp/conv-mach-pre.sh"
818 Echo
"Generating $ConvUsr"
822 echo 'USER_OPTS_LD="$USER_OPTS_LD '$LIBDIR'"' >> $ConvUsr
826 echo 'USER_OPTS_CC="$USER_OPTS_CC '$INCDIR'"' >> $ConvUsr
827 echo 'USER_OPTS_CXX="$USER_OPTS_CXX '$INCDIR'"' >> $ConvUsr
831 # Create conv-mach-opt headers with special build-time options
832 ConvHeader
="$DESTINATION/tmp/conv-mach-opt.h"
833 ConvSh
="$DESTINATION/tmp/conv-mach-opt.sh"
834 ConvMak
="$DESTINATION/tmp/conv-mach-opt.mak"
835 if [ ! -f "$ConvSh" -o ! -f "$ConvHeader" -o ! -f "$ConvMak" ]
837 Echo
"Generating $ConvHeader, conv-mach-opt.sh, conv-mach-opt.mak"
838 echo '/* Build-time options header, automatically generated by charm/build */' > $ConvHeader
839 echo '# Build-time options header, automatically generated by charm/build' > $ConvSh
840 echo '# Build-time options header, automatically generated by charm/build' > $ConvMak
841 echo '[ -z "$CHARMINC" ] && CHARMINC="."' >> $ConvSh
843 if test -n "$COMPILER"
845 i
=`echo $COMPILER | sed 's/-[0-9\.][0-9\.]*$//'`
846 echo "CMK_COMPILER_SUFFIX=${COMPILER#$i}" >> $ConvSh
847 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
848 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
849 elif test `echo "$BASEVERSION" | grep -c "bluegeneq"` -gt 0
852 bgclang
++11 --version
853 if [ $?
-ne 0 ]; then
854 echo "ERROR: bgclang C/C++ compiler missing. Please load bgclang compilers, i.e. 'soft add +mpiwrapper-bgclang'."
857 echo '#include "'cc-
$i.h
'"' >> $ConvHeader
858 echo '. $CHARMINC/'"cc-$i.sh" >> $ConvSh
865 echo '#include "'conv-mach-
$i.h
'"' >> $ConvHeader
866 if [ $BUILD_CUDA -eq 1 ]; then
867 echo 'CUDA_DIR="'$CUDA_DIR'"'>>$ConvSh
868 echo "CUDA_DIR:=$CUDA_DIR" >> $ConvMak
870 echo '. $CHARMINC/'"conv-mach-$i.sh" >> $ConvSh
874 if test "$BUILD_SHARED" = "-build-shared"
876 echo "CMK_NO_BUILD_SHARED=false" >> $ConvSh
877 echo "CMK_NO_BUILD_SHARED:=false" >> $ConvMak
879 echo "CMK_NO_BUILD_SHARED=true" >> $ConvSh
880 echo "CMK_NO_BUILD_SHARED:=true" >> $ConvMak
883 if test -n "$WITH_ROMIO"
885 echo "CMK_AMPI_WITH_ROMIO=\"true\"" >> $ConvSh
886 echo "CMK_AMPI_WITH_ROMIO:=true" >> $ConvMak
889 if test -n "$WITH_PRODUCTION"
891 echo '#define CMK_OPTIMIZE 1' >> $ConvHeader
894 if test $WITH_TAU -eq 1
896 [ -z "$TAU_MAKEFILE" ] && TAU_MAKEFILE
="Make.tau"
897 SED_CHARMC
="s@TAU_MAKEFILE=\(.*\)@TAU_MAKEFILE=$TAU_MAKEFILE@"
899 sed -e $SED_CHARMC $srcbaseabs/scripts
/Makefile
> .Makefile.$$
&& cp .Makefile.$$
$srcbaseabs/scripts
/Makefile
&& rm -f .Makefile.$$
900 sed -e $SED_CHARMC $srcbaseabs/scripts
/charmc
> .charmc.$$
&& cp .charmc.$$
$srcbaseabs/scripts
/charmc
&& rm -f .charmc.$$
902 echo "#define CMK_WITH_TAU 1" >> $ConvHeader
903 echo "#define pthread_create tau_pthread_create" >> $ConvHeader
904 echo "#define pthread_exit tau_pthread_exit" >> $ConvHeader
906 echo "CMK_WITH_TAU=\"true\"" >> $ConvSh
909 CMK_VDIR
="$BASEVERSION"
910 echo "$CMK_VDIR" > $DESTINATION/tmp
/.
vdir
911 echo 'CMK_VDIR="'$CMK_VDIR'"' >> $ConvSh
912 echo "CMK_VDIR:=$CMK_VDIR" >> $ConvMak
913 CMK_GDIR
="`echo $BASEVERSION | sed -e 's@-.*@@'`"
914 echo "$CMK_GDIR" > $DESTINATION/tmp
/.gdir
915 echo 'CMK_GDIR="'$CMK_GDIR'"' >> $ConvSh
916 echo "CMK_GDIR:=$CMK_GDIR" >> $ConvMak
918 echo 'BUILDOPTS="'$OPTS'"' >> $ConvSh
919 echo "SRCBASE=$srcbase" > $DESTINATION/tmp
/charmpath.mk
921 echo "CONFIG_OPTS=\"$CONFIG_OPTS\"" > "$DESTINATION/tmp/config_opts.sh"
922 chmod +x
"$DESTINATION/tmp/config_opts.sh"
923 echo "OPTSATBUILDTIME:=$OPTS" >> $ConvMak
927 # ===================================================
928 # ----------- end file structure creation -----------
929 # ===================================================
933 Echo
"-------------------------------------------------"
934 Echo
"Charm++ NOT BUILT. Either cd into $DESTINATION/tmp and try"
935 Echo
"to resolve the problems yourself, visit"
936 Echo
" http://charm.cs.illinois.edu/"
937 Echo
"for more information. Otherwise, email the developers at charm@cs.illinois.edu"
941 Echo
"Performing '$MAKE $MAKEOPTS basics OPTS="$OPTS" QUIET="$QUIET" CONFIG_OPTS="$CONFIG_OPTS"' in $DESTINATION/tmp"
943 $MAKE $MAKEOPTS basics OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
945 [ $MAKEEXIT -ne 0 ] && printError
947 if test -n "$ONLY_CONFIGURE"
952 Echo
"Performing '$MAKE $MAKEOPTS $PROGRAM OPTS="$OPTS" QUIET="$QUIET"' in $DESTINATION/tmp"
953 $MAKE $MAKEOPTS $PROGRAM OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
955 if [ $MAKEEXIT -eq 0 ]
957 if [ $BUILD_OMP = 1 ];
959 $MAKE MFLAGS
="$MAKEOPTS" openmp_llvm OPTS
="$OPTS $BUILD_SHARED" QUIET
="$QUIET"
961 Echo
"-------------------------------------------------"
962 Echo
"$PROGRAM built successfully."
963 Echo
"Next, try out a sample program like" \
964 "$DESTINATION/tests/charm++/simplearrayhello"