mirror of
https://develop.openfoam.com/Development/ThirdParty-common.git
synced 2025-12-08 06:57:50 +00:00
As per patch provided by Bruno Santos @wyldckat to support Raspbian. http://bugs.openfoam.org/view.php?id=2051 STYLE: drop unneeded linkage against old POSIX librt.so
452 lines
13 KiB
Bash
Executable File
452 lines
13 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
# \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
|
#------------------------------------------------------------------------------
|
|
# 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
|
|
# Allwmake
|
|
#
|
|
# Description
|
|
# Build script for ThirdParty
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
# run from third-party directory only
|
|
cd ${0%/*} || exit 1
|
|
wmakeCheckPwd "$WM_THIRD_PARTY_DIR" || {
|
|
echo "Error: Current directory is not \$WM_THIRD_PARTY_DIR"
|
|
echo " The environment variables are inconsistent with the installation."
|
|
echo " Check the OpenFOAM entries in your dot-files and source them."
|
|
exit 1
|
|
}
|
|
[ -n "$FOAM_EXT_LIBBIN" ] || {
|
|
echo "Error: FOAM_EXT_LIBBIN not set"
|
|
echo " Check the OpenFOAM entries in your dot-files and source them."
|
|
exit 1
|
|
}
|
|
. etc/tools/ThirdPartyFunctions
|
|
#------------------------------------------------------------------------------
|
|
|
|
# export WM settings in a form that GNU configure recognizes
|
|
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
|
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
|
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
|
|
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
|
|
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Start ThirdParty Allwmake
|
|
echo ========================================
|
|
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Build MPI libraries if required
|
|
echo " $MPI_ARCH_PATH"
|
|
case "$WM_MPLIB" in
|
|
OPENMPI)
|
|
if [ -r $MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH}/libmpi.so ]
|
|
then
|
|
echo " have $WM_MPLIB shared library ($FOAM_MPI)"
|
|
echo
|
|
elif [ -r $MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH}/libmpi.a ]
|
|
then
|
|
echo " have $WM_MPLIB static library ($FOAM_MPI)"
|
|
echo
|
|
else
|
|
(
|
|
# 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
|
|
# ----------------------------
|
|
mpiPACKAGE="${MPI_ARCH_PATH##*/}"
|
|
sourceDIR=$WM_THIRD_PARTY_DIR/$mpiPACKAGE
|
|
buildDIR=$buildBASE/$mpiPACKAGE
|
|
|
|
cd $sourceDIR || exit 1
|
|
[ -e Makefile ] && make distclean 2>/dev/null
|
|
|
|
rm -rf $MPI_ARCH_PATH
|
|
rm -rf $buildDIR
|
|
mkdir -p $buildDIR
|
|
cd $buildDIR
|
|
|
|
set -x
|
|
$sourceDIR/configure \
|
|
--prefix=$MPI_ARCH_PATH \
|
|
--disable-orterun-prefix-by-default \
|
|
--enable-shared --disable-static \
|
|
--libdir=$MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH} \
|
|
--enable-mpi-fortran=none \
|
|
--disable-mpi-profile \
|
|
$configOpt \
|
|
&& make -j $WM_NCOMPPROCS \
|
|
&& make install \
|
|
&& echo "Built: $mpiPACKAGE"
|
|
) || {
|
|
echo "Error building: $mpiPACKAGE"
|
|
exit 1
|
|
}
|
|
fi
|
|
;;
|
|
|
|
MPICH)
|
|
if [ -r $MPI_ARCH_PATH/lib/libmpich.so ]
|
|
then
|
|
echo " have $WM_MPLIB shared library ($FOAM_MPI)"
|
|
echo
|
|
elif [ -r $MPI_ARCH_PATH/lib/libmpich.a ]
|
|
then
|
|
echo " have $WM_MPLIB static library ($FOAM_MPI)"
|
|
echo
|
|
else
|
|
(
|
|
# WARNING: unmaintained build code:
|
|
# ---------------------------------
|
|
set -x
|
|
cd $MPI_HOME || exit 1 # change to mpich-VERSION
|
|
|
|
[ -e Makefile ] && make distclean 2>/dev/null
|
|
rm -rf $MPI_ARCH_PATH
|
|
rm -rf util/machines/machines.*
|
|
|
|
./configure \
|
|
--prefix=$MPI_ARCH_PATH \
|
|
--without-mpe \
|
|
--disable-f77 \
|
|
--disable-f90 \
|
|
--disable-f90modules \
|
|
--disable-mpedbg \
|
|
--disable-devdebug \
|
|
--disable-debug \
|
|
--enable-sharedlib=$MPI_ARCH_PATH/lib \
|
|
--with-device=ch_p4 \
|
|
;
|
|
|
|
# For MPICH2 below 1.5a1 uncomment this line and comment next
|
|
# make && make install
|
|
|
|
# For MPICH2 1.5a1 or above
|
|
make -j $WM_NCOMPPROCS && make install
|
|
|
|
make distclean
|
|
|
|
if [ -r $MPI_ARCH_PATH ]
|
|
then
|
|
cd $MPI_ARCH_PATH/bin
|
|
for file in *
|
|
do
|
|
sed s%$MPI_ARCH_PATH%'$MPI_ARCH_PATH'%g $file > temp.$$
|
|
mv temp.$$ $file
|
|
chmod 0755 $file
|
|
done
|
|
|
|
cd $MPI_ARCH_PATH/lib
|
|
|
|
if [ -r libmpich.so.1.0 ]
|
|
then
|
|
rm *.so
|
|
ln -s libmpich.so.1.0 libmpich.so
|
|
fi
|
|
fi
|
|
)
|
|
fi
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# building scotch is still a bit of a pain
|
|
|
|
# get SCOTCH_VERSION, SCOTCH_ARCH_PATH
|
|
if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/scotch)
|
|
then
|
|
. $settings
|
|
else
|
|
echo
|
|
echo "Error: no config.sh/scotch settings"
|
|
echo
|
|
fi
|
|
|
|
echo
|
|
echo ========================================
|
|
echo "Build Scotch decomposition library $SCOTCH_VERSION"
|
|
echo " $SCOTCH_ARCH_PATH"
|
|
|
|
# this needs generalizing
|
|
scotchMakefile=../../etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM
|
|
|
|
if [ -f $SCOTCH_ARCH_PATH/include/scotch.h \
|
|
-a -r $FOAM_EXT_LIBBIN/libscotch.so \
|
|
-a -r $FOAM_EXT_LIBBIN/libscotcherrexit.so ]
|
|
then
|
|
echo " scotch header in $SCOTCH_ARCH_PATH/include"
|
|
echo " scotch libs in $FOAM_EXT_LIBBIN"
|
|
elif [ -d "$SCOTCH_VERSION" ]
|
|
then
|
|
(
|
|
cd $SCOTCH_VERSION/src || exit 1
|
|
applyPatch $SCOTCH_VERSION .. # patch at parent-level
|
|
|
|
prefixDIR=$SCOTCH_ARCH_PATH
|
|
libDIR=$FOAM_EXT_LIBBIN
|
|
|
|
mkdir -p $prefixDIR 2>/dev/null
|
|
mkdir -p $libDIR 2>/dev/null
|
|
|
|
configOpt="prefix=$prefixDIR libdir=$libDIR"
|
|
|
|
if [ -f $scotchMakefile ]
|
|
then
|
|
rm -f Makefile.inc
|
|
ln -s $scotchMakefile Makefile.inc
|
|
fi
|
|
|
|
[ -f Makefile.inc ] || {
|
|
echo " Error: scotch needs an appropriate Makefile.inc"
|
|
exit 1
|
|
}
|
|
|
|
# handle non-gcc compilers
|
|
unset configEnv
|
|
[ "${WM_CC:-gcc}" != gcc ] && configEnv="CC=$WM_CC CCS=$WM_CC"
|
|
|
|
make realclean 2>/dev/null # for safety
|
|
|
|
make -j $WM_NCOMPPROCS $configEnv scotch \
|
|
&& make $configOpt install
|
|
|
|
# cleanup, could also remove Makefile.inc
|
|
make realclean 2>/dev/null
|
|
)
|
|
else
|
|
echo " Optional component (SCOTCH) was not found"
|
|
fi
|
|
|
|
# build ptscotch if MPI (ThirdParty or system) is available
|
|
# and there is a scotch include available (ie, normal scotch was built)
|
|
if [ "${FOAM_MPI:-dummy}" != dummy ] && \
|
|
[ -f $SCOTCH_ARCH_PATH/include/scotch.h ] || \
|
|
{
|
|
echo
|
|
echo " WARNING: skipping pt-scotch - 'scotch.h' include file not found!"
|
|
false
|
|
}
|
|
then
|
|
echo
|
|
echo ========================================
|
|
echo "Build pt-scotch decomposition library $SCOTCH_VERSION (with $FOAM_MPI)"
|
|
echo " $SCOTCH_ARCH_PATH"
|
|
|
|
if [ -f $SCOTCH_ARCH_PATH/include/$FOAM_MPI/ptscotch.h \
|
|
-a -r $FOAM_EXT_LIBBIN/$FOAM_MPI/libptscotch.so \
|
|
-a -r $FOAM_EXT_LIBBIN/$FOAM_MPI/libptscotcherrexit.so ]
|
|
then
|
|
echo " ptscotch header in $SCOTCH_ARCH_PATH/include/$FOAM_MPI"
|
|
echo " ptscotch libs in $FOAM_EXT_LIBBIN/$FOAM_MPI"
|
|
else
|
|
(
|
|
echo
|
|
set -x
|
|
cd $SCOTCH_VERSION/src || exit 1
|
|
|
|
prefixDIR=$SCOTCH_ARCH_PATH
|
|
libDIR=$FOAM_EXT_LIBBIN/$FOAM_MPI
|
|
incDIR=$SCOTCH_ARCH_PATH/include/$FOAM_MPI
|
|
|
|
mkdir -p $prefixDIR 2>/dev/null
|
|
mkdir -p $libDIR 2>/dev/null
|
|
|
|
configOpt="prefix=$prefixDIR libdir=$libDIR includedir=$incDIR"
|
|
|
|
if [ -f $scotchMakefile ]
|
|
then
|
|
rm -f Makefile.inc
|
|
ln -s $scotchMakefile Makefile.inc
|
|
fi
|
|
|
|
[ -f Makefile.inc ] || {
|
|
echo " Error: scotch needs an appropriate Makefile.inc"
|
|
exit 1
|
|
}
|
|
|
|
# handle non-gcc compilers
|
|
unset configEnv
|
|
[ "${WM_CC:-gcc}" != gcc ] && configEnv="CC=$WM_CC CCS=$WM_CC"
|
|
|
|
make realclean 2>/dev/null # for safety
|
|
|
|
make -j $WM_NCOMPPROCS $configEnv ptscotch \
|
|
&& make $configOpt install
|
|
|
|
# cleanup, could also remove Makefile.inc
|
|
make realclean 2>/dev/null
|
|
)
|
|
fi
|
|
|
|
# verify existence of scotch include
|
|
[ -f $SCOTCH_ARCH_PATH/include/$FOAM_MPI/ptscotch.h ] || {
|
|
echo
|
|
echo " WARNING: required include file 'ptscotch.h' not found!"
|
|
}
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Metis is optional
|
|
echo
|
|
echo ========================================
|
|
echo Build Metis decomposition
|
|
|
|
# get METIS_VERSION, METIS_ARCH_PATH
|
|
if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/metis)
|
|
then
|
|
. $settings
|
|
fi
|
|
if [ -d "$METIS_VERSION" ]
|
|
then
|
|
|
|
if [ -f $METIS_ARCH_PATH/include/metis.h \
|
|
-a -r $FOAM_EXT_LIBBIN/libmetis.so ]
|
|
then
|
|
echo " metis header in $METIS_ARCH_PATH/include"
|
|
echo " metis libs in $FOAM_EXT_LIBBIN"
|
|
echo
|
|
else
|
|
(
|
|
set -x
|
|
cd $METIS_VERSION || exit 1
|
|
|
|
if [ "$WM_PRECISION_OPTION" = "DP" ]
|
|
then
|
|
FLOAT_PRECISION=64
|
|
elif [ "$WM_PRECISION_OPTION" = "SP" ]
|
|
then
|
|
FLOAT_PRECISION=32
|
|
else
|
|
echo " Metis pre-configure error:"
|
|
echo " WM_PRECISION_OPTION is neither DP nor SP"
|
|
exit 1
|
|
fi
|
|
|
|
# Change user settings automatically
|
|
sed -i -e 's=\(#define IDXTYPEWIDTH\).*=\1 '$WM_LABEL_SIZE'=' \
|
|
-e 's=\(#define REALTYPEWIDTH\).*=\1 '$FLOAT_PRECISION'=' \
|
|
include/metis.h
|
|
|
|
make config shared=1 prefix=$METIS_ARCH_PATH
|
|
make -j $WM_NCOMPPROCS install
|
|
cp $METIS_ARCH_PATH/lib/libmetis.so $FOAM_EXT_LIBBIN
|
|
)
|
|
fi
|
|
else
|
|
echo " Optional component (METIS) was not found"
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
warnBuildIssues()
|
|
{
|
|
echo
|
|
echo " ---------------------------------------------------"
|
|
echo " Optional component ($1) had build issues"
|
|
echo " OpenFOAM will nonetheless remain largely functional"
|
|
echo " ---------------------------------------------------"
|
|
echo
|
|
}
|
|
|
|
warnNotFound()
|
|
{
|
|
echo " Optional component ($1) was not found"
|
|
echo
|
|
}
|
|
|
|
|
|
# CGAL is optional
|
|
echo
|
|
echo ========================================
|
|
echo Build CGAL
|
|
if [ -d "$CGAL_ARCH_PATH/include" \
|
|
-a -r "$CGAL_ARCH_PATH/lib/libCGAL.so" ]
|
|
then
|
|
# first some information about boost
|
|
if [ -d "$BOOST_ARCH_PATH/include/boost" \
|
|
-a -r "$BOOST_ARCH_PATH/lib/libboost_system.so" ]
|
|
then
|
|
echo " BOOST headers in $BOOST_ARCH_PATH/include"
|
|
echo " BOOST libs in $BOOST_ARCH_PATH/lib"
|
|
elif [ -d "/usr/include/boost" \
|
|
-a -r "/usr/lib${WM_COMPILER_LIB_ARCH}/libboost_system.so" ]
|
|
then
|
|
echo " BOOST headers in /usr/include"
|
|
echo " BOOST libs in /usr/lib${WM_COMPILER_LIB_ARCH}"
|
|
fi
|
|
echo " CGAL headers in $CGAL_ARCH_PATH/include"
|
|
echo " CGAL libs in $CGAL_ARCH_PATH/lib"
|
|
elif [ -n "$CGAL_ARCH_PATH" ]
|
|
then
|
|
./makeCGAL || warnBuildIssues CGAL
|
|
else
|
|
warnNotFound CGAL
|
|
fi
|
|
|
|
|
|
# FFTW is optional
|
|
echo
|
|
echo ========================================
|
|
echo Build FFTW
|
|
if [ -d "$FFTW_ARCH_PATH/include" \
|
|
-a -r "$FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libfftw3.so" ]
|
|
then
|
|
echo " FFTW headers in $FFTW_ARCH_PATH/include"
|
|
echo " FFTW libs in $FFTW_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH"
|
|
elif [ -n "$FFTW_ARCH_PATH" ]
|
|
then
|
|
./makeFFTW || warnBuildIssues FFTW
|
|
else
|
|
warnNotFound FFTW
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Done ThirdParty Allwmake
|
|
echo ========================================
|
|
echo
|
|
|
|
#------------------------------------------------------------------------------
|