diff --git a/bin/tools/install-platform b/bin/tools/install-platform
new file mode 100755
index 0000000000000000000000000000000000000000..b7f1f5ce771c307c0a3f39549be74e2b4ea524ec
--- /dev/null
+++ b/bin/tools/install-platform
@@ -0,0 +1,317 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | www.openfoam.com
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+#     Copyright (C) 2020 OpenCFD Ltd.
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
+#
+# Script
+#     install-platform
+#
+# Example usage
+#     install-platform -prefix=/opt/openfoam2006
+#
+# Description
+#     Simple installer for binary bin/, lib/ directories
+#     (platforms directories), to simplify packaging.
+#
+# Note
+#     The platforms/tools directory must be handled separately
+#
+# Layout of OpenFOAM platforms
+#
+#     platforms
+#     |-- <WM_OPTIONS>
+#         |-- bin
+#         |   |-- ...
+#         `-- lib
+#             |-- ...
+#             |-- dummy
+#             |   `-- ...
+#             |-- openmpi-system
+#             |   |-- libPstream.so
+#             |   `-- libptscotchDecomp.so
+#             `-- paraview-MAJ.MIN
+#                 `-- ...
+#
+#------------------------------------------------------------------------------
+printHelp() {
+    cat<<USAGE
+
+Usage: ${0##*/} [OPTION]
+
+input options:
+  -source=DIR       Source directory (default: $WM_PROJECT_DIR)
+  -platform=NAME    Platform name (default: $WM_OPTIONS)
+  -foam-mpi=NAME    OpenFOAM mpi name (default: $FOAM_MPI)
+
+target options:
+  -prefix=DIR       Top-level installation directory (eg, /opt/openfoamVER)
+  -bindir=DIR       bin directory [<prefix>/platforms/<platform>/bin]
+  -libdir=DIR       lib directory [<prefix>/platforms/<platform>/lib]
+  -mpi-libdir=DIR   mpi lib directory [<prefix>/platforms/<platform>/lib/<foam-mpi>]
+
+tuning options:
+  -no-bin           Do not install bin directory
+  -no-lib           Do not install lib directory
+  -no-mpi           Do not install mpi lib directory
+  -mpi-only         Only install mpi lib directory
+  -mpi-mkdir        Create foam-mpi directory within libdir
+
+general options:
+  -dry-run, -n      Do not perform any operations
+  -verbose, -v      Additional verbosity
+  -help             Print the help and exit
+
+
+Simple installer for binary bin/, lib/ directories (platforms directories),
+to simplify packaging.
+
+USAGE
+    exit 0  # A clean exit
+}
+
+unset optDryRun hadError
+# Report error and exit
+die()
+{
+    exec 1>&2
+    echo
+    echo "Error encountered:"
+    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
+    echo
+    echo "See '%{0##*/} -help' for usage"
+    echo
+    exit 1
+}
+
+# Report error and exit
+warnOrDie()
+{
+    if [ -n "$optDryRun" ]
+    then
+        hadError=true
+        while [ "$#" -ge 1 ]; do echo "Error: $1" 1>&2; shift; done
+    else
+        die "$@"
+    fi
+}
+
+
+# Get the option's value (argument), or die on missing or empty value
+# $1 option=value
+getOptionValue()
+{
+    local value="${1#*=}"
+    # Remove any surrounding double quotes
+    value="${value%\"}"
+    value="${value#\"}"
+
+    [ -n "$value" ] || die "'${1%=}' option requires a value"
+    echo "$value"
+}
+
+
+#-------------------------------------------------------------------------------
+# Defaults from current OpenFOAM environment
+sourceDir="$WM_PROJECT_DIR"
+platform="$WM_OPTIONS"
+foam_mpi="$FOAM_MPI"
+
+unset optInstall_bin optInstall_lib
+unset optMpi_mkdir
+optInstall_mpi=true
+
+unset prefix bindir libdir libdir_mpi optVerbose
+
+# Parse options
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+    -h | -help*) printHelp ;;
+    -n | -dry-run) optDryRun="(dry-run) " ;;
+    -v | -verbose) optVerbose=true ;;
+
+    # Inputs
+    -source=*) sourceDir="$(getOptionValue "$1")" ;;
+    -platform=*) platform="$(getOptionValue "$1")" ;;
+    -foam-mpi=*) foam_mpi="$(getOptionValue "$1")" ;;
+
+    # Targets
+    -prefix=*)  prefix="$(getOptionValue "$1")" ;;
+    -bindir=*)  bindir="$(getOptionValue "$1")" ;;
+    -libdir=*)  libdir="$(getOptionValue "$1")" ;;
+    -mpi-libdir=*) libdir_mpi="$(getOptionValue "$1")" ;;
+
+    -no-bin)    optInstall_bin=false ;;
+    -no-lib)    optInstall_lib=false ;;
+    -no-mpi)    optInstall_mpi=false ;;
+    -mpi-only)  optInstall_mpi=exclusive ;;
+
+    -mpi-mkdir) optMpi_mkdir=true ;;
+
+    *)
+        die "Unknown option/argument: $1"
+        ;;
+    esac
+    shift
+done
+
+#-------------------------------------------------------------------------------
+# Report settings
+
+echo "Preparing install with the following parameters" 1>&2
+echo "source:" 1>&2
+echo "    directory   $sourceDir" 1>&2
+echo "    platform    $platform" 1>&2
+echo "    foam-mpi    $foam_mpi" 1>&2
+echo 1>&2
+echo "target (mpi-install: $optInstall_mpi)" 1>&2
+echo "    directory   $prefix" 1>&2
+echo "    bindir      ${bindir:-[default]}" 1>&2
+echo "    libdir      ${libdir:-[default]}" 1>&2
+echo "    libdir(mpi) ${libdir_mpi:-[default]}" 1>&2
+echo 1>&2
+
+# Input checks
+
+[ -d "$sourceDir" ] || warnOrDie "Invalid -source directory: $sourceDir"
+[ -n "$platform" ] || warnOrDie "No -platform detected or specified"
+[ -n "$foam_mpi" ] || warnOrDie "No -foam-mpi detected or specified"
+
+sourcePlatform="$sourceDir/platforms/$platform"
+
+[ -d "$sourcePlatform" ] || \
+    warnOrDie "Missing platforms directory for: $platform"
+
+
+# Installation directories
+if [ -n "$prefix" ]
+then
+    installPlatform="$prefix/platforms/$platform"
+
+    # Set defaults based on -prefix
+    [ -n "$bindir" ] || bindir="$installPlatform/bin"
+    [ -n "$libdir" ] || libdir="$installPlatform/lib"
+fi
+
+# Default mpi libdir based on libdir
+if [ -z "$libdir_mpi" ] && [ -n "$libdir" ]
+then
+    libdir_mpi="$libdir/$foam_mpi"
+fi
+
+# Check sanity
+[ -n "$bindir$libdir$libdir_mpi" ] || \
+    warnOrDie "Must specify at least one of -prefix, -bindir, -libdir, -mpi-libdir"
+
+
+if [ -n "$hadError" ]
+then
+    echo "Errors encounters in dry-run. Stopping" 1>&2
+    exit 1
+fi
+
+
+#------------------------------------------------------------------------------
+
+if [ "$optInstall_bin" = false ] || [ "$optInstall_mpi" = exclusive ]
+then
+    unset bindir
+fi
+if [ "$optInstall_lib" = false ] || [ "$optInstall_mpi" = exclusive ]
+then
+    unset libdir
+fi
+if [ "$optInstall_mpi" = false ]
+then
+    unset libdir_mpi
+fi
+
+
+# bin/
+if [ -n "$bindir" ]
+then
+    echo "${optDryRun}Install bindir: $bindir" 1>&2
+    if [ -z "$optDryRun" ]
+    then
+        mkdir -p "$bindir" 2>/dev/null
+
+        [ -n "$optVerbose" ] && echo "Copy $sourcePlatform/bin" 1>&2
+        for i in "$sourcePlatform/bin/"*
+        do
+            if [ -e "$i" ]
+            then
+                cp -a ${optVerbose:+-v} "$i" "$bindir"
+            fi
+        done
+    fi
+else
+    echo "${optDryRun}Install bindir: [disabled]" 1>&2
+fi
+
+
+# lib/ without mpi
+if [ -n "$libdir" ]
+then
+    echo "${optDryRun}Install libdir(non-mpi): $libdir" 1>&2
+    if [ -z "$optDryRun" ]
+    then
+        mkdir -p "$libdir" 2>/dev/null
+
+        [ -n "$optVerbose" ] && echo "Copy $sourcePlatform/lib" 1>&2
+        for i in "$sourcePlatform/lib/"*
+        do
+            if [ "${i##*/}" = "$foam_mpi" ]
+            then
+                if [ "$optMpi_mkdir" = true ]
+                then
+                    mkdir -p "$libdir/$foam_mpi"
+                fi
+            elif [ -e "$i" ]
+            then
+                cp -a ${optVerbose:+-v} "$i" "$libdir"
+            else
+                echo "bogus lib entry? $i" 1>&2
+            fi
+        done
+    fi
+else
+    echo "${optDryRun}Install libdir: [disabled]" 1>&2
+fi
+
+
+# lib/mpi
+if [ -n "$libdir_mpi" ]
+then
+    echo "${optDryRun}Install libdir(mpi): $libdir_mpi" 1>&2
+    if [ -z "$optDryRun" ]
+    then
+        mkdir -p "$libdir_mpi" 2>/dev/null
+
+        [ -n "$optVerbose" ] && echo "Copy $sourcePlatform/lib/$foam_mpi" 1>&2
+        for i in "$sourcePlatform/lib/$foam_mpi"/*
+        do
+            if [ -e "$i" ]
+            then
+                # Always verbose (not many files anyhow)
+                cp -a -v "$i" "$libdir_mpi"
+            else
+                echo "bogus mpi-lib entry? $i" 1>&2
+            fi
+        done
+    fi
+else
+    echo "${optDryRun}Install libdir(mpi): [disabled]" 1>&2
+fi
+
+
+exit 0 # clean exit
+
+#------------------------------------------------------------------------------
diff --git a/bin/tools/update-mpi-links.in b/bin/tools/update-mpi-links.in
new file mode 100644
index 0000000000000000000000000000000000000000..09c3e1d47a0c450996d719228667a0f374153297
--- /dev/null
+++ b/bin/tools/update-mpi-links.in
@@ -0,0 +1,75 @@
+#!/bin/sh
+FOAM_MPI="@FOAM_MPI@"
+FOAM_SYSTEM_MPI_LIBBIN="@FOAM_SYSTEM_MPI_LIBBIN@"
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | www.openfoam.com
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+#     Copyright (C) 2020 OpenCFD Ltd.
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
+#
+# Description
+#     Local update of links from system mpi lib/ to local lib/mpi-name
+#
+# Note
+#     Normally located as a trigger within the platforms/ directory
+#     Uses hard-code values (eg, generated with autoconfig).
+#
+#------------------------------------------------------------------------------
+cd "${0%/*}" || exit                                # Run from this directory
+
+# Local values
+FOAM_LIBBIN="$(pwd -P)/lib"
+FOAM_MPI_LIBBIN="$FOAM_LIBBIN/$FOAM_MPI"
+
+#------------------------------------------------------------------------------
+echo "Link OpenFOAM ($FOAM_MPI) from system mpi locations"
+echo "Target: $FOAM_MPI_LIBBIN"
+echo "Source: $FOAM_SYSTEM_MPI_LIBBIN"
+
+if [ -z "$FOAM_MPI" ]
+then
+    echo "FOAM_MPI not defined - skipping"
+    exit 0
+fi
+if [ -z "$FOAM_SYSTEM_MPI_LIBBIN" ]
+then
+    echo "FOAM_SYSTEM_MPI_LIBBIN not defined - skipping"
+    exit 0
+fi
+if [ ! -d "$FOAM_SYSTEM_MPI_LIBBIN" ]
+then
+    echo "No system mpi lib: $FOAM_SYSTEM_MPI_LIBBIN"
+    echo "... not updating"
+    exit 0
+fi
+if [ ! -d "$FOAM_LIBBIN" ]
+then
+    echo "Missing $FOAM_LIBBIN"
+    exit 0
+fi
+
+#------------------------------------------------------------------------------
+mkdir -p "$FOAM_MPI_LIBBIN"
+
+# Create symlinks
+(
+    cd "$FOAM_MPI_LIBBIN" || exit
+
+    for i in "$FOAM_SYSTEM_MPI_LIBBIN"/*
+    do
+        if [ -f "$i" ]
+        then
+            ln -svf "$i" "${i##*/}"
+        fi
+    done
+)
+
+exit 0  # clean exit
+
+#------------------------------------------------------------------------------