mirror of
https://develop.openfoam.com/Development/ThirdParty-common.git
synced 2025-12-08 06:57:50 +00:00
309 lines
9.4 KiB
Bash
Executable File
309 lines
9.4 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-2017 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
|
|
#
|
|
# ----------------------------------------------
|
|
# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE
|
|
#------------------------------------------------------------------------------
|
|
# 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
|
|
}
|
|
[ -n "$FOAM_EXT_LIBBIN" ] || {
|
|
echo "Error (${0##*/}) : \$FOAM_EXT_LIBBIN not set for ThirdParty"
|
|
echo " Check your OpenFOAM environment and installation"
|
|
exit 1
|
|
}
|
|
. etc/tools/ThirdPartyFunctions
|
|
#------------------------------------------------------------------------------
|
|
# Compiler/linker settings for CMake/configure
|
|
[ -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"
|
|
|
|
useGccFlag $@ # Scan arguments for a '-gcc' option
|
|
|
|
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
|
|
}
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Start ThirdParty Allwmake
|
|
echo ========================================
|
|
echo
|
|
echo ========================================
|
|
echo Build MPI libraries if required
|
|
echo " $MPI_ARCH_PATH"
|
|
case "$WM_MPLIB" in
|
|
(OPENMPI | MPICH)
|
|
./make$WM_MPLIB -test "$MPI_ARCH_PATH" || ./make$WM_MPLIB
|
|
;;
|
|
esac
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Building scotch on different platforms 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"
|
|
|
|
SCOTCH_SOURCE_DIR=$sourceBASE/$SCOTCH_VERSION
|
|
|
|
# Needs generalizing, but works fairly well
|
|
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_SOURCE_DIR" ]
|
|
then
|
|
(
|
|
cd $SCOTCH_SOURCE_DIR/src || exit 1
|
|
export GIT_DIR=$SCOTCH_SOURCE_DIR/.git # Mask seeing our own git-repo
|
|
rm -rf $SCOTCH_ARCH_PATH
|
|
|
|
applyPatch $SCOTCH_VERSION .. # patch at parent-level
|
|
|
|
prefixDIR=$SCOTCH_ARCH_PATH
|
|
incDIR=$SCOTCH_ARCH_PATH/include
|
|
libDIR=$FOAM_EXT_LIBBIN
|
|
|
|
mkdir -p $prefixDIR 2>/dev/null
|
|
mkdir -p $incDIR 2>/dev/null
|
|
mkdir -p $libDIR 2>/dev/null
|
|
|
|
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
|
|
}
|
|
|
|
export CCS="${CC:-$WM_CC}" # CCS (serial compiler) default=$(CC)
|
|
export CCP=$(whichMpicc) # CCP (parallel compiler) default=mpicc
|
|
|
|
make realclean 2>/dev/null # Extra safety
|
|
make -j $WM_NCOMPPROCS scotch \
|
|
&& make \
|
|
prefix=$prefixDIR \
|
|
includedir=$incDIR \
|
|
libdir=$libDIR \
|
|
install
|
|
|
|
make realclean 2>/dev/null || true # Failed cleanup is uncritical
|
|
) || warnBuildIssues SCOTCH
|
|
else
|
|
warnNotFound SCOTCH
|
|
fi
|
|
|
|
# Build ptscotch if MPI (ThirdParty or system) is available
|
|
# and normal scotch was built (has include and library)
|
|
if [ "${FOAM_MPI:-dummy}" != dummy ] && \
|
|
[ -f $SCOTCH_ARCH_PATH/include/scotch.h \
|
|
-a -r $FOAM_EXT_LIBBIN/libscotch.so ] || \
|
|
{
|
|
# Report that the above tests failed and pass-through the failure
|
|
echo
|
|
echo " WARNING: skipping pt-scotch - no mpi or <scotch.h> 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
|
|
(
|
|
cd $SCOTCH_SOURCE_DIR/src || exit 1
|
|
export GIT_DIR=$SCOTCH_SOURCE_DIR/.git # Mask seeing our own git-repo
|
|
echo
|
|
|
|
prefixDIR=$SCOTCH_ARCH_PATH
|
|
incDIR=$SCOTCH_ARCH_PATH/include/$FOAM_MPI
|
|
libDIR=$FOAM_EXT_LIBBIN/$FOAM_MPI
|
|
|
|
mkdir -p $prefixDIR 2>/dev/null
|
|
mkdir -p $incDIR 2>/dev/null
|
|
mkdir -p $libDIR 2>/dev/null
|
|
|
|
if [ -f $scotchMakefile ]
|
|
then
|
|
rm -f Makefile.inc
|
|
ln -s $scotchMakefile Makefile.inc
|
|
fi
|
|
[ -f Makefile.inc ] || {
|
|
echo " Error: ptscotch needs an appropriate Makefile.inc"
|
|
exit 1
|
|
}
|
|
|
|
export CCS="${CC:-$WM_CC}" # CCS (serial compiler) default=$(CC)
|
|
export CCP=$(whichMpicc) # CCP (parallel compiler) default=mpicc
|
|
|
|
make realclean 2>/dev/null # Extra safety
|
|
make -j $WM_NCOMPPROCS ptscotch \
|
|
&& make \
|
|
prefix=$prefixDIR \
|
|
includedir=$incDIR \
|
|
libdir=$libDIR \
|
|
install
|
|
|
|
make realclean 2>/dev/null || true # Failed cleanup is uncritical
|
|
) || warnBuildIssues PTSCOTCH
|
|
fi
|
|
|
|
# Verify existence of ptscotch include
|
|
[ -f $SCOTCH_ARCH_PATH/include/$FOAM_MPI/ptscotch.h ] || {
|
|
echo
|
|
echo " WARNING: required include file 'ptscotch.h' not found!"
|
|
}
|
|
fi
|
|
|
|
# Could now remove $SCOTCH_SOURCE_DIR/src/Makefile.inc
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# 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
|
|
|
|
METIS_SOURCE_DIR=$sourceBASE/$METIS_VERSION
|
|
|
|
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"
|
|
elif [ -d "$METIS_SOURCE_DIR" ]
|
|
then
|
|
(
|
|
cd $METIS_SOURCE_DIR || exit 1
|
|
export GIT_DIR=$PWD/.git # Mask seeing our own git-repo
|
|
rm -rf $METIS_ARCH_PATH
|
|
|
|
# Adjust metis integer size to match OpenFOAM label-size
|
|
sed -i -e 's=\(#define IDXTYPEWIDTH\).*=\1 '$WM_LABEL_SIZE'=' \
|
|
include/metis.h
|
|
|
|
# No config option for the library location.
|
|
# - build normally and use mv to relocate it
|
|
|
|
make config shared=1 prefix=$METIS_ARCH_PATH \
|
|
&& make -j $WM_NCOMPPROCS install \
|
|
&& mv $METIS_ARCH_PATH/lib/libmetis.so $FOAM_EXT_LIBBIN
|
|
|
|
rmdir $METIS_ARCH_PATH/lib 2>/dev/null || true # Failed rmdir is uncritical
|
|
) || warnBuildIssues METIS
|
|
else
|
|
warnNotFound METIS
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
echo
|
|
echo ========================================
|
|
echo Build CGAL
|
|
if [ -n "$CGAL_ARCH_PATH" ]
|
|
then
|
|
./makeCGAL -test "$CGAL_ARCH_PATH" "$BOOST_ARCH_PATH" || \
|
|
./makeCGAL || warnBuildIssues CGAL
|
|
else
|
|
warnNotFound CGAL # CGAL is optional
|
|
fi
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Build FFTW
|
|
if [ -n "$FFTW_ARCH_PATH" ]
|
|
then
|
|
./makeFFTW -test "$FFTW_ARCH_PATH" || \
|
|
./makeFFTW || warnBuildIssues FFTW
|
|
else
|
|
warnNotFound FFTW # FFTW is optional
|
|
fi
|
|
|
|
echo
|
|
echo ========================================
|
|
echo Done ThirdParty Allwmake
|
|
echo ========================================
|
|
echo
|
|
|
|
#------------------------------------------------------------------------------
|