makeMETIS 4.96 KB
Newer Older
1 2 3 4 5
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
6
#   \\  /    A nd           | Copyright (C) 2017-2018 OpenCFD Ltd.
7 8 9
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
# License
Mark Olesen's avatar
Mark Olesen committed
10 11
#     This file is part of OpenFOAM, licensed under GNU General Public License
#     <http://www.gnu.org/licenses/>.
12 13 14 15 16 17 18 19 20 21
#
# Script
#     makeMETIS
#
# Description
#     Build script for METIS
#
# ----------------------------------------------
# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE
#------------------------------------------------------------------------------
22 23
# Dynamic library ending (default is .so)
[ "$(uname -s)" = Darwin ] && EXT_SO=.dylib || EXT_SO=.so
24

25 26 27 28 29 30 31 32
# Short-circuit test for an installation
if [ "$1" = "-test" ]
then
    [ "$#" -eq 2 ] || { echo "${0##*/} -test : needs 1 argument"; exit 1; }
    dir="$2" # <- METIS_ARCH_PATH
    if [ -d "$dir/include" ]
    then
        for lib in \
33
            $FOAM_EXT_LIBBIN/libmetis$EXT_SO \
34
            $dir/lib/libmetis.a \
35
            $dir/lib/libmetis$EXT_SO \
36
            $dir/lib$WM_COMPILER_LIB_ARCH/libmetis.a \
37
            $dir/lib$WM_COMPILER_LIB_ARCH/libmetis$EXT_SO \
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
            ;
        do
            if [ -r "$lib" ]
            then
                echo "    metis include: $dir/include"
                echo "    metis library: ${lib%/*}"
                exit 0
            fi
        done
    fi
    exit 2
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
}
[ -n "$FOAM_EXT_LIBBIN" ] || {
    echo "Error (${0##*/}) : \$FOAM_EXT_LIBBIN not set"
    echo "    Check your OpenFOAM environment and installation"
    exit 1
}
. etc/tools/ThirdPartyFunctions
#------------------------------------------------------------------------------
64
_foamConfig metis
65 66 67 68 69 70 71 72 73 74 75 76

metisPACKAGE=${METIS_VERSION:-metis-system}
targetType=libso

#------------------------------------------------------------------------------
usage() {
    exec 1>&2
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

usage: ${0##*/} [OPTION] [lib|libso] [METIS-VERSION]
options:
77
  -gcc          Force use of gcc/g++
78 79 80 81 82 83 84 85 86
  -help

* build METIS with
      ${metisPACKAGE:-'unspecified metis version'}

USAGE
    exit 1
}
#------------------------------------------------------------------------------
87
exportCompiler          # Compiler info for CMake/configure
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132

# Parse options
while [ "$#" -gt 0 ]
do
    case "$1" in
    '') ;;      # Ignore empty
    -h | -help) usage   ;;
    -gcc)       useGcc  ;;

    lib|libso)
        targetType="$1"
        ;;

    metis-[0-9]*)
        metisPACKAGE="${1%%/}"
        unset METIS_ARCH_PATH  # Avoid inconsistency
        ;;
    *)
        die "unknown option/argument: '$1'"
        ;;
    esac
    shift
done

[ -n "$metisPACKAGE" ] || die "The metis-VERSION was not specified"

# Nothing to build
if _foamIsNone $metisPACKAGE
then
    echo "Using metis-none (skip ThirdParty build of METIS)"
    exit 0
elif _foamIsSystem $metisPACKAGE
then
    echo "Using metis-system"
    exit 0
fi

#------------------------------------------------------------------------------
#
# Build METIS
#
#   METIS_ARCH_PATH  : installation directory
#   METIS_SOURCE_DIR : location of the original sources

METIS_SOURCE_DIR=$sourceBASE/$metisPACKAGE
133
: ${METIS_ARCH_PATH:=$installBASE$WM_SIZE_OPTIONS/$metisPACKAGE}
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148

[ -d "$METIS_SOURCE_DIR" ] || {
    echo "Missing sources: '$metisPACKAGE'"
    exit 1
}

#
# Manual installation (of library)
#
install()
{
    local libdir=$METIS_ARCH_PATH/lib

    if [ "$targetType" = libso ]
    then
149
        \mv $libdir/libmetis$EXT_SO $FOAM_EXT_LIBBIN
150 151
        rmdir $libdir 2>/dev/null # Failed rmdir is uncritical

152
        echo "Installing: $FOAM_EXT_LIBBIN/libmetis$EXT_SO"
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
    fi
    return 0
}

echo "Starting build: $metisPACKAGE ($targetType)"
echo
(
    # Configuration options:
    unset configOpt
    if [ "$targetType" = libso ]
    then
        configOpt="shared=1"
    fi

    cd $METIS_SOURCE_DIR || exit 1
    export GIT_DIR=$PWD/.git # Mask seeing our own git-repo

    rm -rf $METIS_ARCH_PATH
171
    rm -f $FOAM_EXT_LIBBIN/libmetis$EXT_SO
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190

    # 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 $configOpt prefix=$METIS_ARCH_PATH \
    && make -j $WM_NCOMPPROCS install \
    && echo "Built: metis" \
    && install
) || {
    echo "Error building: metis"
    exit 1
}


#------------------------------------------------------------------------------