mirror of
https://develop.openfoam.com/Development/ThirdParty-common.git
synced 2025-12-08 06:57:50 +00:00
- made redundant by 19f241f. Multiple threads are needed by the
collated format and are now always enabled.
195 lines
5.8 KiB
Bash
Executable File
195 lines
5.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM.
|
|
#
|
|
# OpenFOAM is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# makeOPENMPI
|
|
#
|
|
# Description
|
|
# Build script for openmpi
|
|
#
|
|
# ----------------------------------------------
|
|
# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE
|
|
#------------------------------------------------------------------------------
|
|
# Short-circuit test for an installation
|
|
if [ "$1" = "-test" ]
|
|
then
|
|
[ "$#" -eq 2 ] || { echo "${0##*/} -test : needs 1 argument"; exit 1; }
|
|
dir="$2" # <- MPI_ARCH_PATH
|
|
if [ -r "$dir/lib$WM_COMPILER_LIB_ARCH/libmpi.so" ]
|
|
then
|
|
echo " Have openmpi shared library (${dir##*/})"
|
|
exit 0
|
|
elif [ -r "$dir/lib$WM_COMPILER_LIB_ARCH/libmpi.a" ]
|
|
then
|
|
echo " Have openmpi static library (${dir##*/})"
|
|
exit 0
|
|
else
|
|
echo "No openmpi libraries found: ${dir:-not-specified}"
|
|
exit 2
|
|
fi
|
|
fi
|
|
#------------------------------------------------------------------------------
|
|
# Run from third-party directory only
|
|
cd ${0%/*} && wmakeCheckPwd "$WM_THIRD_PARTY_DIR" 2>/dev/null || {
|
|
echo "Error (${0##*/}) : not located in \$WM_THIRD_PARTY_DIR"
|
|
echo " Check your OpenFOAM environment and installation"
|
|
exit 1
|
|
}
|
|
. etc/tools/ThirdPartyFunctions
|
|
# Transition
|
|
# ~~~~~~~~~~
|
|
_foamAddLib() { true; }
|
|
_foamAddMan() { true; }
|
|
_foamAddPath() { true; }
|
|
#------------------------------------------------------------------------------
|
|
|
|
WM_MPLIB=OPENMPI # Ensure we get the correct MPI
|
|
|
|
# openmpi version from OpenFOAM etc/config.sh file:
|
|
_foamEtc config.sh/mpi
|
|
|
|
mpiPACKAGE=${FOAM_MPI:-openmpi-system}
|
|
|
|
#------------------------------------------------------------------------------
|
|
usage() {
|
|
exec 1>&2
|
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
|
cat<<USAGE
|
|
|
|
usage: ${0##*/} [OPTION] [openmpi-VERSION]
|
|
options:
|
|
-gcc force gcc/g++ instead of the values from \$WM_CC, \$WM_CXX
|
|
-help
|
|
|
|
* build openmpi with
|
|
${mpiPACKAGE:-'unspecified openmpi version'}
|
|
|
|
USAGE
|
|
exit 1
|
|
}
|
|
#------------------------------------------------------------------------------
|
|
# Compiler settings for CMake/configure
|
|
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
|
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
|
|
|
# Parse options
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
'') ;; # Ignore empty
|
|
-h | -help) usage ;;
|
|
-gcc) useGcc ;;
|
|
|
|
openmpi-[0-9]* | openmpi_[0-9]* | openmpi-system )
|
|
mpiPACKAGE="${1%%/}"
|
|
;;
|
|
*)
|
|
die "unknown option/argument: '$1'"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
[ -n "$mpiPACKAGE" ] || die "The openmpi-VERSION was not specified"
|
|
|
|
# Nothing to build
|
|
if _foamIsNone "$mpiPACKAGE"
|
|
then
|
|
echo "Using openmpi-none (skip ThirdParty build of openmpi)"
|
|
exit 0
|
|
elif _foamIsSystem "$mpiPACKAGE"
|
|
then
|
|
echo "Using openmpi-system (skip ThirdParty build of openmpi)"
|
|
exit 0
|
|
fi
|
|
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# Build openmpi
|
|
#
|
|
# MPI_SOURCE_DIR : location of the original sources
|
|
# MPI_ARCH_PATH : installation directory
|
|
|
|
MPI_SOURCE_DIR=$sourceBASE/$mpiPACKAGE
|
|
MPI_ARCH_PATH=$installBASE/$mpiPACKAGE
|
|
|
|
if [ -r "$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmpi.so" ]
|
|
then
|
|
echo "Already has shared library: $MPI_ARCH_PATH"
|
|
elif [ -r "$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmpi.a" ]
|
|
then
|
|
echo "Already has static library: $MPI_ARCH_PATH"
|
|
else
|
|
echo "Starting build: $WM_MPLIB ($mpiPACKAGE)"
|
|
echo
|
|
|
|
(
|
|
# configuration options:
|
|
# Start with GridEngine support - builds without external libraries
|
|
configOpt="--with-sge"
|
|
|
|
# Add InfiniBand support
|
|
ibDir=/usr/local/ofed
|
|
ibLib=$infbDIR/lib$WM_COMPILER_LIB_ARCH
|
|
if [ -d "$ibDir" -a -d "$ibLib" ]
|
|
then
|
|
configOpt="$configOpt --with-verbs=$ibDir --with-verbs-lib=$ibLib"
|
|
fi
|
|
|
|
# end of configuration options
|
|
# ----------------------------
|
|
|
|
buildDIR=$buildBASE/$mpiPACKAGE
|
|
|
|
cd $MPI_SOURCE_DIR || exit 1
|
|
export GIT_DIR=$PWD/.git # Mask seeing our own git-repo
|
|
[ -e Makefile ] && make distclean 2>/dev/null
|
|
|
|
rm -rf $MPI_ARCH_PATH
|
|
rm -rf $buildDIR
|
|
mkdir -p $buildDIR
|
|
cd $buildDIR
|
|
|
|
set -x
|
|
$MPI_SOURCE_DIR/configure \
|
|
--prefix=$MPI_ARCH_PATH \
|
|
--libdir=$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH \
|
|
--disable-orterun-prefix-by-default \
|
|
--enable-shared --disable-static \
|
|
--enable-mpi-fortran=none \
|
|
--enable-mpi-thread-multiple \
|
|
$configOpt \
|
|
&& set +x \
|
|
&& make -j $WM_NCOMPPROCS \
|
|
&& make install \
|
|
&& echo "Built: $mpiPACKAGE" \
|
|
&& pkgconfigAdjust $MPI_ARCH_PATH
|
|
) || {
|
|
echo "Error building: $mpiPACKAGE"
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
#------------------------------------------------------------------------------
|