diff --git a/makeUMPIRE b/makeUMPIRE new file mode 100755 index 0000000000000000000000000000000000000000..de3c951c3f03c361af2c8415ff5bca9d78303c66 --- /dev/null +++ b/makeUMPIRE @@ -0,0 +1,233 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | www.openfoam.com +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# Copyright (C) 2025 OpenCFD Ltd. +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. +# +# Script +# makeUMPIRE +# +# Description +# Build script for UMPIRE +# +# ---------------------------------------------- +# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE +#------------------------------------------------------------------------------ +# Dynamic library ending (default is .so) +[ "$(uname -s)" = Darwin ] && EXT_SO=.dylib || EXT_SO=.so + +# Short-circuit test for an installation +if [ "$1" = "-test" ] +then + [ "$#" -eq 2 ] || { echo "${0##*/} -test : needs 1 argument"; exit 1; } + dir="${2%/}" # <- *_ARCH_PATH + [ -d "$dir/include/umpire" ] || exit 2 + + package="umpire" + libStatic="libumpire.a" + for lib in \ + "$dir/lib/$libStatic" \ + "$dir/lib$WM_COMPILER_LIB_ARCH/$libStatic" \ + ; + do + if [ -r "$lib" ] + then + echo " $package include: $dir/include" + echo " $package library: ${lib%/*}" + exit 0 + fi + done + exit 2 +fi +#------------------------------------------------------------------------------ +if : # Run from third-party directory +then + cd "${0%/*}" || exit + 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 + } +fi +. "${WM_THIRD_PARTY_DIR:?}"/etc/tools/ThirdPartyFunctions +. "${WM_THIRD_PARTY_DIR:?}"/etc/tools/CMakeFunctions +#------------------------------------------------------------------------------ +# Obtain version from OpenFOAM etc/config.sh file: +_foamConfig umpire + +PACKAGE="${umpire_version:-none}" + +# Hint for cmake findMPI +if [ -d "$MPI_ARCH_PATH" ] +then + export MPI_HOME="$MPI_ARCH_PATH" +fi + +#------------------------------------------------------------------------------ +printVersions() { listPackageVersions umpire; exit 0; } +printHelp() { + cat<<USAGE + +Usage: ${0##*/} [OPTION] [umpire-VERSION] +options: + -force Force compilation, even if include/library already exists + -gcc Force use of gcc/g++ + -cmake PATH With cmake from the given path + -mpi-home PATH With hint for MPI_HOME + -DNAME=VALUE add cmake variable + -list List available unpacked source versions + -help Display usage help + +* Build UMPIRE + ${PACKAGE:-[unspecified]} + +USAGE + showDownloadHint umpire + exit 0 # Clean exit +} +#------------------------------------------------------------------------------ +exportCompiler minimal # Minimal compiler info for CMake/configure + +unset optForce + +# Parse options +while [ "$#" -gt 0 ] +do + case "$1" in + '') ;; # Ignore empty + -h | -help*) printHelp;; + -list) printVersions;; + -gcc) useGcc ;; + -force) optForce=true ;; + + -cmake) + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + CMAKE_PATH="${2%%/}" + shift + ;; + -mpi-home) # mpi with hint + [ "$#" -ge 2 ] || die "'$1' option requires an argument" + export MPI_HOME="${2%%/}" + case "${MPI_HOME:-none}" in (false|none) unset MPI_HOME;; esac + shift + ;; + + umpire/* | sources/umpire* | umpire-[0-9]* | umpire-git*) + PACKAGE="${1%%/}" + ;; + -D[A-Z]*=* | [A-Z]*=*) # cmake variables + addCMakeVariable "$1" + ;; + *) + die "unknown option/argument: '$1'" + ;; + esac + shift +done + +if [ -z "$PACKAGE" ] +then + die "The UMPIRE package/version not specified" +elif _foamIsNone "$PACKAGE" || _foamIsSystem "$PACKAGE" +then + echo "Using none/system (skip ThirdParty build of UMPIRE)" + exit 0 +fi + +# Known build issues for mingw (various things) +case "$WM_COMPILER" in +(Mingw*) + if [ "$optForce" = true ] + then + echo "Warning: umpire - not tested with $WM_COMPILER" + else + echo "Skipping umpire - not tested with $WM_COMPILER" + exit 0 + fi + ;; +esac + +#------------------------------------------------------------------------------ +# +# Build UMPIRE +# *PACKAGE : name-version of the package +# *SOURCE : location of original sources +# *PREFIX : installation directory + +PKG_SOURCE="$(findSourceDir "$PACKAGE")" +PACKAGE="$(basename "$PACKAGE")" +PKG_PREFIX="$installBASE/$PACKAGE" +export GIT_DIR="$PKG_SOURCE/.git" + +echo +echo ======================================== +echo "Build umpire library $PACKAGE" +echo + +if [ -z "$optForce" ] \ +&& [ -f "$PKG_PREFIX/include/umpire/Umpire.hpp" ] \ +&& { + [ -r "$PKG_PREFIX/lib/libumpire.a" ] \ + || [ -r "$PKG_PREFIX/lib$WM_COMPILER_LIB_ARCH/libumpire.a" ] +} +then + echo " UMPIRE already built : $PKG_PREFIX" +else + # CMake options often lag the configure ones + echo "Starting build: $PACKAGE (using cmake)" + echo + ( + PKG_BUILD="$buildBASE/$PACKAGE" + cd "$PKG_SOURCE" || exit + + applyPatch "$PACKAGE" "$PKG_SOURCE" + + # Remove any existing build folder and recreate + rm -rf "$PKG_PREFIX" + rm -rf "$PKG_BUILD" + mkdir -p "$PKG_BUILD" + + # With MPI? + # -DENABLE_FIND_MPI=ON + + cmake=$(findCMake) + + # By default installs into lib64/, + # but libcamp installs into lib/ so use that here as well ! + # + # Also note that the umpire currently (2025-04-03) doesn't properly + # handle a relative directory for CMAKE_INSTALL_LIBDIR + # (https://github.com/LLNL/Umpire/issues/952) + + libdir="$PKG_PREFIX/lib" + + cd "$PKG_BUILD" && set -x && \ + ${cmake:?} \ + -DCMAKE_INSTALL_PREFIX="$PKG_PREFIX" \ + -DCMAKE_INSTALL_LIBDIR="$libdir" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCAMP_ENABLE_TESTS=OFF \ + -DENABLE_ASTYLE=OFF \ + -DENABLE_DOCS=OFF \ + -DENABLE_DOXYGEN=OFF \ + -DENABLE_EXAMPLES=OFF \ + -DENABLE_FORTRAN=OFF \ + -DENABLE_TESTS=OFF \ + ${WM_QUIET:+-DCMAKE_RULE_MESSAGES=OFF} \ + "$PKG_SOURCE" \ + && make -j $WM_NCOMPPROCS all \ + && make install \ + && echo "Built: $PACKAGE" + ) || { + echo "Error building: $PACKAGE" + exit 1 + } +fi + +# -----------------------------------------------------------------------------