makeOPENMPI 5.81 KB
Newer Older
mark's avatar
mark committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
# 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
#     makeOPENMPI
#
# Description
#     Build script for openmpi
#
# ----------------------------------------------
# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE
#------------------------------------------------------------------------------
# Short-circuit test for an installation
if [ "$1" = "-test" ]
then
    [ "$#" -eq 2 ] || { echo "${0##*/} -test : needs 1 argument"; exit 1; }
    dir="$2" # <- MPI_ARCH_PATH
    if [ -r "$dir/lib$WM_COMPILER_LIB_ARCH/libmpi.so" ]
    then
        echo "    Have openmpi shared library (${dir##*/})"
        exit 0
    elif [ -r "$dir/lib$WM_COMPILER_LIB_ARCH/libmpi.a" ]
    then
        echo "    Have openmpi static library (${dir##*/})"
        exit 0
    else
        echo "No openmpi libraries found: ${dir:-not-specified}"
        exit 2
    fi
fi
#------------------------------------------------------------------------------
# Run from third-party directory only
54
cd ${0%/*} && wmakeCheckPwd "$WM_THIRD_PARTY_DIR" 2>/dev/null || {
mark's avatar
mark committed
55
56
57
58
59
    echo "Error (${0##*/}) : not located in \$WM_THIRD_PARTY_DIR"
    echo "    Check your OpenFOAM environment and installation"
    exit 1
}
. etc/tools/ThirdPartyFunctions
60
61
62
63
64
# Transition
# ~~~~~~~~~~
_foamAddLib()  { true; }
_foamAddMan()  { true; }
_foamAddPath() { true; }
mark's avatar
mark committed
65
66
#------------------------------------------------------------------------------

67
68
69
70
WM_MPLIB=OPENMPI                                # Ensure we get the correct MPI

# openmpi version from OpenFOAM etc/config.sh file:
_foamEtc config.sh/mpi
mark's avatar
mark committed
71
72

mpiPACKAGE=${FOAM_MPI:-openmpi-system}
73

mark's avatar
mark committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#------------------------------------------------------------------------------
usage() {
    exec 1>&2
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

usage: ${0##*/} [OPTION] [openmpi-VERSION]
options:
  -gcc              force gcc/g++ instead of the values from \$WM_CC, \$WM_CXX
  -help

* build openmpi with
      ${mpiPACKAGE:-'unspecified openmpi version'}

USAGE
    exit 1
}
#------------------------------------------------------------------------------
92
# Compiler settings for CMake/configure
mark's avatar
mark committed
93
94
95
96
97
98
99
[ -n "$WM_CC" ]  && export CC="$WM_CC"
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"

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

mark's avatar
mark committed
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
133
134
135
136
137
138
    openmpi-[0-9]* | openmpi_[0-9]* | openmpi-system )
        mpiPACKAGE="${1%%/}"
        ;;
    *)
        die "unknown option/argument: '$1'"
        ;;
    esac
    shift
done

[ -n "$mpiPACKAGE" ] || die "The openmpi-VERSION was not specified"

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

#------------------------------------------------------------------------------
#
# Build openmpi
#
#   MPI_SOURCE_DIR : location of the original sources
#   MPI_ARCH_PATH  : installation directory

MPI_SOURCE_DIR=$sourceBASE/$mpiPACKAGE
MPI_ARCH_PATH=$installBASE/$mpiPACKAGE

if [ -r "$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmpi.so" ]
then
139
    echo "Already has shared library: $MPI_ARCH_PATH"
mark's avatar
mark committed
140
141
elif [ -r "$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmpi.a" ]
then
142
    echo "Already has static library: $MPI_ARCH_PATH"
mark's avatar
mark committed
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
else
    echo "Starting build: $WM_MPLIB ($mpiPACKAGE)"
    echo

    (
        # 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
        # ----------------------------

        buildDIR=$buildBASE/$mpiPACKAGE

        cd $MPI_SOURCE_DIR || exit 1
166
        export GIT_DIR=$PWD/.git # Mask seeing our own git-repo
mark's avatar
mark committed
167
168
169
170
171
172
173
174
175
176
        [ -e Makefile ] && make distclean 2>/dev/null

        rm -rf $MPI_ARCH_PATH
        rm -rf $buildDIR
        mkdir -p $buildDIR
        cd $buildDIR

        set -x
        $MPI_SOURCE_DIR/configure \
            --prefix=$MPI_ARCH_PATH \
177
            --libdir=$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH \
mark's avatar
mark committed
178
179
180
            --disable-orterun-prefix-by-default \
            --enable-shared --disable-static \
            --enable-mpi-fortran=none \
181
            --enable-mpi-thread-multiple \
mark's avatar
mark committed
182
183
184
185
186
187
188
189
190
191
192
193
194
            $configOpt \
        && set +x \
        && make -j $WM_NCOMPPROCS \
        && make install \
        && echo "Built: $mpiPACKAGE" \
        && pkgconfigAdjust $MPI_ARCH_PATH
    ) || {
        echo "Error building: $mpiPACKAGE"
        exit 1
    }
fi

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