openfoam/wmake/scripts/cmakeFunctions
Mark Olesen f997013eb8 COMP: include mpi information for versioned cmake build
- since the wrapped cmake calls generally use the regular build
  locations, add in MPI information to properly handle changes
  in that as well. This makes it easier to build for multiple MPI
  instances.
2021-02-16 14:30:36 +01:00

142 lines
3.9 KiB
Bash

#----------------------------------*-sh-*--------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2017-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
#
# Script
# cmakeFunctions
#
# Description
# Helper functions for CMake
#
# Environment
# Consider CMAKE_INSTALL_PREFIX as a reserved name, although it is not
# set/unset here.
#
# Files
# Uses etc/config.sh/cmake (if it exists) for the
# CMAKE_ARCH_PATH that may specify a possible cmake/bin directory.
#
#------------------------------------------------------------------------------
. ${WM_PROJECT_DIR:?}/wmake/scripts/have_cmake
. ${WM_PROJECT_DIR:?}/wmake/scripts/wmakeFunctions # Require wmake functions
# Export compiler information for cmake
export CC="$(wmake -show-c)"
export CXX="$(wmake -show-cxx)"
export CFLAGS="$(wmake -show-cflags)"
export CXXFLAGS="$(wmake -show-cxxflags)"
#------------------------------------------------------------------------------
# Resolve the location of cmake (if needed) and call with output
# suppressed according to WM_QUIET
call_cmake()
{
if have_cmake
then
if [ -n "$WM_QUIET" ]
then
echo "cmake..."
"$CMAKE_EXE" -DCMAKE_RULE_MESSAGES=OFF $@ >/dev/null
else
echo "cmake $@"
"$CMAKE_EXE" $@
fi
else
return 1
fi
}
# CMake into objectsDir with external dependency
# - use sentinel file(s) to handle paraview/vtk version changes
#
# 1 - depend
# 2 - sourceDir
# 3... optional cmake defines
#
cmakeVersioned()
{
local depend="$1"
local sourceDir="$2"
shift 2
local objectsDir sentinel
# Where generated files are stored
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
# Version changed
sentinel=$(sameDependency "$sourceDir" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@") || \
rm -rf "$objectsDir" 2>/dev/null
mkdir -p "$objectsDir" \
&& ( cd "$objectsDir" && call_cmake "$@" "$sourceDir" && make ) \
&& storeDependency "$sentinel" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@"
}
# CMake into objectsDir with external dependency
#
# 1 - depend
# 2 - sourceDir
# 3... optional cmake defines
#
cmakeVersionedInstall()
{
local depend="$1"
local sourceDir="$2"
shift 2
local objectsDir sentinel
# Where generated files are stored
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
# Version changed
sentinel=$(sameDependency "$sourceDir" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@") || \
rm -rf "$objectsDir" 2>/dev/null
mkdir -p "$objectsDir" \
&& ( cd "$objectsDir" && call_cmake "$@" "$sourceDir" && make install ) \
&& storeDependency "$sentinel" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@"
}
# wmake with tracking of external dependency as per cmakeVersioned
# - use sentinel file(s) to handle paraview/vtk version changes
#
# 1 - depend
# 2 - sourceDir
# 3... wmake arguments
#
wmakeVersioned()
{
local depend="$1"
local sourceDir="$2"
shift 2
local objectsDir sentinel
# Where generated files are stored
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
# Version changed
sentinel=$(sameDependency "$sourceDir" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@") || \
rm -rf "$objectsDir" 2>/dev/null
mkdir -p "$objectsDir" \
&& wmake "$@" \
&& storeDependency "$sentinel" "$depend" "MPLIB=$WM_MPLIB" "MPI=$FOAM_MPI" "$@"
}
#------------------------------------------------------------------------------