diff --git a/etc/bashrc b/etc/bashrc
index da0db18ec0b1d8e1b70966f8f141c29e2ddd5e54..df02f948af543077e4a18abdf691bedc03307997 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -61,7 +61,7 @@ export WM_COMPILER_TYPE=system
 
 # [WM_COMPILER] - Compiler:
 # = Gcc | Gcc4[8-9] | Gcc5[1-5] | Gcc6[1-4] | Gcc7[1-3] | GccKNL |
-#   Clang | Clang3[8-9] | Clang[45]0 | Icc | IccKNL | Cray
+#   Clang | Clang3[8-9] | Clang[45]0 | Icc | IccKNL | Cray | Arm
 export WM_COMPILER=Gcc
 
 # [WM_ARCH_OPTION] - Memory addressing:
diff --git a/etc/bashrc.orig b/etc/bashrc.orig
new file mode 100644
index 0000000000000000000000000000000000000000..4311e4781a0229de62fc0c4ee9f126fb37453918
--- /dev/null
+++ b/etc/bashrc.orig
@@ -0,0 +1,203 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
+#    \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, licensed under GNU General Public License
+#     <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/bashrc
+#
+# Description
+#     Set OpenFOAM environment for POSIX shell (eg, bash,dash,zsh,...)
+#     Source manually or from the ~/.profile or ~/.bashrc files.
+#
+# Note
+#     Many environment variables can be overridden using a <prefs.sh> file
+#     from one of these locations:
+#     * user-specific:
+#         * ~/.OpenFOAM/$WM_PROJECT_VERSION
+#         * ~/.OpenFOAM
+#     * group-specific:
+#         * $WM_PROJECT_SITE/site/$WM_PROJECT_VERSION
+#         * $WM_PROJECT_SITE/site
+#     * general:
+#         * $WM_PROJECT_DIR/etc
+#
+#     Any changes made to this bashrc file may be lost with the next upgrade.
+#
+#------------------------------------------------------------------------------
+
+export WM_PROJECT=OpenFOAM
+export WM_PROJECT_VERSION=plus.develop
+
+# [FOAM_INST_DIR] - parent directory containing the OpenFOAM installation.
+# \- When this file is located as $WM_PROJECT_DIR/etc/bashrc, the next lines
+#    should work when sourced by BASH or ZSH shells. If this however fails,
+#    set one of the fallback values to an appropriate path.
+# --
+rc="${BASH_SOURCE:-${ZSH_NAME:+$0}}"
+[ -n "$rc" ] && FOAM_INST_DIR=$(\cd $(dirname $rc)/../.. && \pwd -L) || \
+FOAM_INST_DIR=$HOME/$WM_PROJECT
+# FOAM_INST_DIR=/opt/$WM_PROJECT
+# FOAM_INST_DIR=/usr/local/$WM_PROJECT
+#
+# END OF (NORMAL) USER EDITABLE PART
+################################################################################
+: # Extra safety - if the user commented out all fallback values
+export FOAM_INST_DIR
+unset rc
+
+# Default environment variables.
+# Can override with a <prefs.sh> file instead of editing below.
+
+# [WM_COMPILER_TYPE] - Compiler location:
+# = system | ThirdParty
+export WM_COMPILER_TYPE=system
+
+# [WM_COMPILER] - Compiler:
+# = Gcc | Gcc4[8-9] | Gcc5[1-5] | Gcc6[1-4] | Gcc7[1-3] | GccKNL |
+#   Clang | Clang3[8-9] | Clang[45]0 | Icc | IccKNL | Cray
+export WM_COMPILER=Gcc
+
+# [WM_ARCH_OPTION] - Memory addressing:
+# = 32 | 64
+#   * on a 64-bit OS this can be 32 or 64
+#   * on a 32-bit OS, it is always 32-bit and this option is ignored
+export WM_ARCH_OPTION=64
+
+# [WM_PRECISION_OPTION] - Floating-point precision:
+# = DP | SP
+export WM_PRECISION_OPTION=DP
+
+# [WM_LABEL_SIZE] - Label size in bits:
+# = 32 | 64
+export WM_LABEL_SIZE=32
+
+# [WM_COMPILE_OPTION] - Optimised, debug, profiling:
+# = Opt | Debug | Prof
+export WM_COMPILE_OPTION=Opt
+
+# [WM_MPLIB] - MPI implementation:
+# = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM |
+#   HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI
+export WM_MPLIB=SYSTEMOPENMPI
+
+
+# [FOAM_SIGFPE] - Trapping of floating-point exceptions.
+#               - overrides the 'trapFpe' controlDict entry
+# = true | false
+#export FOAM_SIGFPE=true
+
+# [FOAM_SETNAN] - Memory initialisation as NaN
+#               - overrides the 'setNaN' controlDict entry
+# = true | false
+#export FOAM_SETNAN=false
+
+# [WM_OSTYPE] - Operating System Type:
+# = POSIX
+#export WM_OSTYPE=POSIX
+
+################################################################################
+
+# Old directories to be cleaned from PATH, LD_LIBRARY_PATH
+foamOldDirs="$WM_PROJECT_DIR $WM_THIRD_PARTY_DIR \
+    $HOME/$WM_PROJECT/$USER $FOAM_USER_APPBIN $FOAM_USER_LIBBIN \
+    $WM_PROJECT_SITE $FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN"
+
+# Location of installation and third-party software
+export WM_PROJECT_INST_DIR=$FOAM_INST_DIR
+export WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/$WM_PROJECT-$WM_PROJECT_VERSION
+export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION
+
+# [WM_PROJECT_SITE] - Location of site-specific (group) files
+# default (unset) implies WM_PROJECT_INST_DIR/site
+if [ -d "$WM_PROJECT_SITE" ]
+then
+    export WM_PROJECT_SITE
+else
+    unset WM_PROJECT_SITE
+fi
+
+# [WM_PROJECT_USER_DIR] - Location of user files
+export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
+
+# Load shell functions
+. $WM_PROJECT_DIR/etc/config.sh/functions
+
+# Override definitions via prefs, with 'other' first so the sys-admin
+# can provide base values independent of WM_PROJECT_SITE
+_foamEtc -mode=o  prefs.sh
+_foamEtc -mode=ug prefs.sh
+
+# Evaluate command-line parameters and record settings for later.
+# These can be used to set/unset values, specify additional files etc.
+export FOAM_SETTINGS="$@"
+_foamEval $@
+
+# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH)
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+export PATH MANPATH LD_LIBRARY_PATH
+_foamClean PATH "$foamOldDirs"
+_foamClean MANPATH "$foamOldDirs"
+_foamClean LD_LIBRARY_PATH "$foamOldDirs"
+
+# Setup for OpenFOAM compilation etc
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+_foamEtc -config  settings
+
+# Setup for third-party packages
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+_foamEtc -config  mpi
+_foamEtc -config  paraview -- $@        # Pass through for evaluation
+_foamEtc -config  vtk
+_foamEtc -config  ensight
+_foamEtc -config  gperftools
+## _foamEtc -config  ADIOS
+_foamEtc -config  CGAL
+_foamEtc -config  scotch
+_foamEtc -config  FFTW
+
+# Interactive shell
+if /usr/bin/tty -s 2>/dev/null
+then
+    _foamEtc -config  aliases
+    [ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc -config  bash_completion
+fi
+
+
+# Clean environment paths again. Only remove duplicates
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+export PATH MANPATH LD_LIBRARY_PATH
+
+_foamClean PATH
+_foamClean MANPATH
+_foamClean LD_LIBRARY_PATH
+
+# Add trailing ':' for system manpages
+if [ -n "$MANPATH" ]
+then
+    MANPATH="${MANPATH}:"
+fi
+
+if [ -n "$LD_PRELOAD" ]
+then
+    export LD_PRELOAD
+    _foamClean LD_PRELOAD
+fi
+
+
+# Cleanup temporary information
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Unload shell functions
+. $WM_PROJECT_DIR/etc/config.sh/functions
+
+# Variables (done as the last statement for a clean exit code)
+unset cleaned foamOldDirs
+
+#------------------------------------------------------------------------------
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 73cba45fc1efc9f02d7b5e96cf1f1f4cd32471b8..dffda1db84b5c514f30290b08fa75a48579c8299 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -212,6 +212,10 @@ case Icc*:    # Intel compilers
     setenv WM_CC 'icc'
     setenv WM_CXX 'icpc'
     breaksw
+case Arm*:    # Arm system compilers
+    setenv WM_CC 'armclang'
+    setenv WM_CXX 'armclang++'
+    breaksw
 endsw
 
 # Clear prior to sourcing
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index 73de9fa6811e0800a60ea4c0bc1fe5d08bced312..a682e2ae65de4ebd41ec6317100f81c3885ca11f 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -209,6 +209,10 @@ Icc*)      # Intel compilers
     export WM_CC='icc'
     export WM_CXX='icpc'
     ;;
+Arm*)     # Arm system compilers
+    export WM_CC='armclang'
+    export WM_CXX='armclang++'
+    ;;
 esac
 
 # Clear prior to sourcing
diff --git a/etc/config.sh/settings.orig b/etc/config.sh/settings.orig
new file mode 100644
index 0000000000000000000000000000000000000000..73de9fa6811e0800a60ea4c0bc1fe5d08bced312
--- /dev/null
+++ b/etc/config.sh/settings.orig
@@ -0,0 +1,316 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
+#    \\/     M anipulation  | Copyright (C) 2016-2018 OpenCFD Ltd.
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM, licensed under GNU General Public License
+#     <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.sh/settings
+#     - sourced by OpenFOAM-*/etc/bashrc
+#
+# Description
+#     Settings for OpenFOAM.
+#
+#------------------------------------------------------------------------------
+export WM_ARCH=$(uname -s)                  # System name
+: ${WM_OSTYPE:=POSIX}; export WM_OSTYPE     # System type (POSIX is default)
+
+# Default compiler = gcc/g++ and C++11
+export WM_CC="gcc"
+export WM_CXX="g++"
+export WM_CFLAGS="-fPIC"
+export WM_CXXFLAGS="-fPIC -std=c++11"
+unset WM_COMPILER_ARCH WM_COMPILER_LIB_ARCH WM_LDFLAGS
+
+# Adjust according to system and architecture
+case "$WM_ARCH" in
+Linux)
+    WM_ARCH=linux
+
+    case $(uname -m) in
+    i686)
+        export WM_ARCH_OPTION=32
+        ;;
+
+    x86_64)
+        : ${WM_ARCH_OPTION:=64}; export WM_ARCH_OPTION  # Default to 64-bit
+        case "$WM_ARCH_OPTION" in
+        32)
+            export WM_COMPILER_ARCH=64
+            export WM_CFLAGS="$WM_CFLAGS -m32"
+            export WM_CXXFLAGS="$WM_CXXFLAGS -m32"
+            export WM_LDFLAGS="-m32"
+            ;;
+        64)
+            WM_ARCH=linux64
+            export WM_COMPILER_LIB_ARCH=64
+            export WM_CFLAGS="$WM_CFLAGS -m64"
+            export WM_CXXFLAGS="$WM_CXXFLAGS -m64"
+            export WM_LDFLAGS="-m64"
+            ;;
+        *)
+            echo "Unknown WM_ARCH_OPTION '$WM_ARCH_OPTION', should be 32|64" 1>&2
+            ;;
+        esac
+        ;;
+
+    ia64)
+        WM_ARCH=linuxIA64
+        ;;
+
+    armv7l)
+        WM_ARCH=linuxARM7
+        export WM_ARCH_OPTION=32
+        export WM_COMPILER_LIB_ARCH=32
+        ;;
+
+    aarch64)
+        WM_ARCH=linuxARM64
+        export WM_ARCH_OPTION=64
+        export WM_COMPILER_LIB_ARCH=64
+        ;;
+
+    ppc64)
+        WM_ARCH=linuxPPC64
+        export WM_COMPILER_LIB_ARCH=64
+        export WM_CFLAGS="$WM_CFLAGS -m64"
+        export WM_CXXFLAGS="$WM_CXXFLAGS -m64"
+        export WM_LDFLAGS="-m64"
+        ;;
+
+    ppc64le)
+        WM_ARCH=linuxPPC64le
+        export WM_COMPILER_LIB_ARCH=64
+        export WM_CFLAGS="$WM_CFLAGS -m64"
+        export WM_CXXFLAGS="$WM_CXXFLAGS -m64"
+        export WM_LDFLAGS="-m64"
+        ;;
+
+    *)
+        echo Unknown processor type $(uname -m) for Linux 1>&2
+        ;;
+    esac
+    ;;
+
+SunOS)
+    WM_ARCH=SunOS64
+    WM_MPLIB=FJMPI
+    export WM_COMPILER_LIB_ARCH=64
+    export WM_CFLAGS="$WM_CFLAGS -mabi=64"
+    export WM_CXXFLAGS="$WM_CXXFLAGS -mabi=64"
+    export WM_LDFLAGS="-mabi=64 -G0"
+    ;;
+
+*)  # An unsupported operating system
+    /bin/cat << UNSUPPORTED_OS 1>&2
+===============================================================================
+Your '$WM_ARCH' operating system is unsupported by this OpenFOAM release.
+For further assistance, please contact www.OpenFOAM.com
+===============================================================================
+UNSUPPORTED_OS
+    ;;
+esac
+
+#------------------------------------------------------------------------------
+
+# [FOAM_JOB_DIR] - unset is equivalent to ~/.OpenFOAM/jobControl
+## export FOAM_JOB_DIR="$HOME/.OpenFOAM/jobControl"
+
+# wmake configuration
+export WM_DIR=$WM_PROJECT_DIR/wmake
+export WM_LINK_LANGUAGE=c++
+export WM_LABEL_OPTION=Int$WM_LABEL_SIZE
+export WM_OPTIONS=$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_COMPILE_OPTION
+
+# Base executables/libraries
+export FOAM_APPBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin
+export FOAM_LIBBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib
+
+# External (ThirdParty) libraries
+export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib
+
+# Site-specific (group) files
+if [ -n "$WM_PROJECT_SITE" ]
+then
+    siteDir=$WM_PROJECT_SITE
+else
+    siteDir=$WM_PROJECT_INST_DIR/site
+fi
+
+# Shared site (group) executables/libraries
+export FOAM_SITE_APPBIN=$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin
+export FOAM_SITE_LIBBIN=$siteDir/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/lib
+
+# User executables/libraries
+export FOAM_USER_APPBIN=$WM_PROJECT_USER_DIR/platforms/$WM_OPTIONS/bin
+export FOAM_USER_LIBBIN=$WM_PROJECT_USER_DIR/platforms/$WM_OPTIONS/lib
+
+# [FOAM_CODE_TEMPLATES] - dynamicCode templates
+# * fallback == "foamEtcFile -list codeTemplates/dynamicCode"
+# export FOAM_CODE_TEMPLATES=$WM_PROJECT_DIR/etc/codeTemplates/dynamicCode
+
+# Convenience
+export FOAM_ETC=$WM_PROJECT_DIR/etc
+export FOAM_APP=$WM_PROJECT_DIR/applications
+export FOAM_SRC=$WM_PROJECT_DIR/src
+export FOAM_TUTORIALS=$WM_PROJECT_DIR/tutorials
+export FOAM_UTILITIES=$WM_PROJECT_DIR/applications/utilities
+export FOAM_SOLVERS=$WM_PROJECT_DIR/applications/solvers
+export FOAM_RUN=$WM_PROJECT_USER_DIR/run
+
+# Add wmake to the path - not required for runtime-only environment
+[ -d "$WM_DIR" ] && PATH=$WM_DIR:$PATH
+# Add OpenFOAM scripts to the path
+export PATH=$WM_PROJECT_DIR/bin:$PATH
+
+# Add site-specific scripts to path - only if they exist
+if [ -d "$siteDir/bin" ]                        # Generic
+then
+    _foamAddPath "$siteDir/bin"
+fi
+if [ -d "$siteDir/$WM_PROJECT_VERSION/bin" ]    # Version-specific
+then
+    _foamAddPath "$siteDir/$WM_PROJECT_VERSION/bin"
+fi
+unset siteDir
+
+_foamAddPath $FOAM_USER_APPBIN:$FOAM_SITE_APPBIN:$FOAM_APPBIN
+_foamAddLib  $FOAM_LIBBIN/dummy     # Dummy versions of external libraries last
+if [ -n "$FOAM_EXT_LIBBIN" ]        # External libraries (allowed to be unset)
+then
+    _foamAddLib $FOAM_EXT_LIBBIN
+fi
+_foamAddLib  $FOAM_USER_LIBBIN:$FOAM_SITE_LIBBIN:$FOAM_LIBBIN
+
+#------------------------------------------------------------------------------
+
+# Compiler settings
+# ~~~~~~~~~~~~~~~~~
+
+# Default to system compiler
+: ${WM_COMPILER_TYPE:=system}; export WM_COMPILER_TYPE
+
+# Adjust for non-gcc compilers
+case "$WM_COMPILER" in
+Clang*)    # Clang compiler suite
+    export WM_CC='clang'
+    export WM_CXX='clang++'
+    ;;
+Cray*)     # Cray system compilers
+    export WM_CC='cc'
+    export WM_CXX='CC'
+    ;;
+Icc*)      # Intel compilers
+    export WM_CC='icc'
+    export WM_CXX='icpc'
+    ;;
+esac
+
+# Clear prior to sourcing
+unset gcc_version gmp_version mpfr_version mpc_version
+unset GMP_ARCH_PATH MPFR_ARCH_PATH
+
+# Load pre-defined compiler versions
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+_foamEtc -config compiler
+
+# ThirdParty base for compilers
+archDir=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER_ARCH
+
+case "$WM_COMPILER_TYPE-$WM_COMPILER" in
+ThirdParty-Gcc*)
+    gccDir=$archDir/$gcc_version
+    gmpDir=$archDir/${gmp_version:-gmp-system}
+    mpfrDir=$archDir/${mpfr_version:-mpfr-system}
+    mpcDir=$archDir/${mpc_version:-mpc-system}
+
+    # Check that the compiler directory can be found
+    [ -d "$gccDir" ] || /bin/cat << GCC_NOT_FOUND 1>&2
+===============================================================================
+Warning in $WM_PROJECT_DIR/etc/config.sh/settings:
+Cannot find '$WM_COMPILER' compiler installation
+    $gccDir
+
+    Either install this compiler version, or use the system compiler by setting
+    WM_COMPILER_TYPE to 'system' in \$WM_PROJECT_DIR/etc/bashrc.
+===============================================================================
+GCC_NOT_FOUND
+
+    _foamAddMan     $gccDir/man
+    _foamAddPath    $gccDir/bin
+
+    # Add ThirdParty compiler libraries to run-time environment
+    _foamAddLib     $gccDir/lib$WM_COMPILER_LIB_ARCH
+
+    # Add gmp/mpfr/mpc libraries to run-time environment.
+    # Require that they exist, automatically find lib64/ or lib/.
+    _foamAddLibAuto $gmpDir   && \
+        export GMP_ARCH_PATH=$gmpDir    # For non-system CGAL
+
+    _foamAddLibAuto $mpfrDir && \
+        export MPFR_ARCH_PATH=$mpfrDir  # For non-system CGAL
+
+    _foamAddLibAuto $mpcDir
+
+    if [ "$FOAM_VERBOSE" -a "$PS1" ]
+    then
+        echo "Using ThirdParty compiler"
+        echo "    ${gccDir##*/}  (${gmpDir##*/}  $${mpfrDir##*/}  ${mpcDir##*/})"
+    fi
+    ;;
+
+ThirdParty-Clang*)
+    clangDir=$archDir/$clang_version
+
+    # Check that the compiler directory can be found
+    [ -d "$clangDir" ] || /bin/cat << CLANG_NOT_FOUND 1>&2
+===============================================================================
+Warning in $WM_PROJECT_DIR/etc/config.sh/settings:
+Cannot find '$WM_COMPILER' compiler installation
+    $clangDir
+
+    Either install this compiler version, or use the system compiler by setting
+    WM_COMPILER_TYPE to 'system' in \$WM_PROJECT_DIR/etc/bashrc.
+===============================================================================
+CLANG_NOT_FOUND
+
+    _foamAddMan     $clangDir/share/man
+    _foamAddPath    $clangDir/bin
+    _foamAddLib     $clangDir/lib  # For things like libomp (openmp) etc
+
+    if [ "$FOAM_VERBOSE" -a "$PS1" ]
+    then
+        echo "Using ThirdParty compiler"
+        echo "    ${clangDir##*/}"
+    fi
+    ;;
+
+system-* | ThirdParty-*)
+    # Using system compiler or other ThirdParty compiler
+    ;;
+
+*)
+    /bin/cat << UNKNOWN_TYPE 1>&2
+===============================================================================
+Unknown WM_COMPILER_TYPE="$WM_COMPILER_TYPE" - treating as 'system'
+Please check your settings
+===============================================================================
+UNKNOWN_TYPE
+    export WM_COMPILER_TYPE=system
+    ;;
+
+esac
+
+# Cleanup
+# ~~~~~~~
+unset archDir
+unset gcc_version gccDir
+unset gmp_version gmpDir  mpfr_version mpfrDir  mpc_version mpcDir
+unset clang_version clangDir
+
+#------------------------------------------------------------------------------
diff --git a/etc/cshrc b/etc/cshrc
index 350b71ef1bcba3c521e80806d79ae69e765dc8a2..a6d0c2a1d164cc555c810753c8550d316f73c1ab 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -58,7 +58,7 @@ setenv WM_COMPILER_TYPE system
 
 # [WM_COMPILER] - Compiler:
 # = Gcc | Gcc4[8-9] | Gcc5[1-5] | Gcc6[1-4] | Gcc7[1-3] | GccKNL |
-#   Clang | Clang3[8-9] | Clang[45]0 | Icc | IccKNL | Cray
+#   Clang | Clang3[8-9] | Clang[45]0 | Icc | IccKNL | Cray | Arm
 setenv WM_COMPILER Gcc
 
 # [WM_ARCH_OPTION] - Memory addressing:
diff --git a/wmake/rules/linuxARM64Arm/c b/wmake/rules/linuxARM64Arm/c
new file mode 100644
index 0000000000000000000000000000000000000000..caf379353ceb2b962ad821f7ac0ac176df472d64
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/c
@@ -0,0 +1,16 @@
+SUFFIXES += .c
+
+cWARN       = -Wall
+
+cc          = armclang
+
+include $(DEFAULT_RULES)/c$(WM_COMPILE_OPTION)
+
+cFLAGS      = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
+
+ctoo        = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $< -o $@
+
+LINK_LIBS   = $(cDBUG)
+
+LINKLIBSO   = $(cc) -shared
+LINKEXE     = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs
diff --git a/wmake/rules/linuxARM64Arm/c++ b/wmake/rules/linuxARM64Arm/c++
new file mode 100644
index 0000000000000000000000000000000000000000..bd08dccd6184fce1c88856a854026d3581b1a91d
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/c++
@@ -0,0 +1,30 @@
+SUFFIXES += .C .cc .cpp .cxx
+
+c++WARN     = \
+    -Wall -Wextra -Wold-style-cast \
+    -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof \
+    -Wno-undefined-var-template \
+    -Wno-unknown-warning-option
+
+# Suppress some warnings for flex++ and CGAL
+c++LESSWARN = \
+    -Wno-old-style-cast -Wno-unused-local-typedefs \
+    -Wno-tautological-undefined-compare -Wno-shift-negative-value
+
+CC          = armclang++ -std=c++11
+
+include $(DEFAULT_RULES)/c++$(WM_COMPILE_OPTION)
+
+ptFLAGS     = -DNoRepository -ftemplate-depth-100
+
+c++FLAGS    = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
+
+Ctoo        = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $< -o $@
+cxxtoo      = $(Ctoo)
+cctoo       = $(Ctoo)
+cpptoo      = $(Ctoo)
+
+LINK_LIBS   = $(c++DBUG)
+
+LINKLIBSO   = $(CC) $(c++FLAGS) -shared
+LINKEXE     = $(CC) $(c++FLAGS) -Xlinker --add-needed
diff --git a/wmake/rules/linuxARM64Arm/c++Debug b/wmake/rules/linuxARM64Arm/c++Debug
new file mode 100644
index 0000000000000000000000000000000000000000..48f0b6643e18406a22b768923aa876a312269ea1
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/c++Debug
@@ -0,0 +1,2 @@
+c++DBUG     = -g -DFULLDEBUG
+c++OPT      = -O0
diff --git a/wmake/rules/linuxARM64Arm/c++Opt b/wmake/rules/linuxARM64Arm/c++Opt
new file mode 100644
index 0000000000000000000000000000000000000000..c427c3d08b8d71d05db3ceb32b020fb460f55fa3
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/c++Opt
@@ -0,0 +1,2 @@
+c++DBUG     =
+c++OPT      = -mcpu=thunderx2t99 -ffp-contract=fast -ffast-math -O3 -funsafe-math-optimizations
diff --git a/wmake/rules/linuxARM64Arm/c++Prof b/wmake/rules/linuxARM64Arm/c++Prof
new file mode 100644
index 0000000000000000000000000000000000000000..3bda4dad55e898a8198f6e8bfe21e8d829d7230a
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/c++Prof
@@ -0,0 +1,2 @@
+c++DBUG    = -pg
+c++OPT     = -O2
diff --git a/wmake/rules/linuxARM64Arm/cDebug b/wmake/rules/linuxARM64Arm/cDebug
new file mode 100644
index 0000000000000000000000000000000000000000..7b7adf10deade9c64833672b98de8ace4fb61a0e
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/cDebug
@@ -0,0 +1,2 @@
+cDBUG       = -g -DFULLDEBUG
+cOPT        = -O0
diff --git a/wmake/rules/linuxARM64Arm/cOpt b/wmake/rules/linuxARM64Arm/cOpt
new file mode 100644
index 0000000000000000000000000000000000000000..0086d1849ebac2a560442be4d2032d7c73774e9d
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/cOpt
@@ -0,0 +1,2 @@
+cDBUG       =
+cOPT        = -mcpu=thunderx2t99 -ffp-contract=fast -ffast-math -O3
diff --git a/wmake/rules/linuxARM64Arm/cProf b/wmake/rules/linuxARM64Arm/cProf
new file mode 100644
index 0000000000000000000000000000000000000000..ca3ac9bf5f0cd61fe99e0f05fa1bd4bdf9fa6cf7
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/cProf
@@ -0,0 +1,2 @@
+cDBUG       = -pg
+cOPT        = -O2
diff --git a/wmake/rules/linuxARM64Arm/general b/wmake/rules/linuxARM64Arm/general
new file mode 100644
index 0000000000000000000000000000000000000000..d83a18b000b3bb3e663ccee8efa77439d863c39d
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/general
@@ -0,0 +1,9 @@
+CPP        = cpp -traditional-cpp $(GFLAGS)
+
+PROJECT_LIBS = -l$(WM_PROJECT) -ldl
+
+include $(GENERAL_RULES)/standard
+
+include $(DEFAULT_RULES)/openmp
+include $(DEFAULT_RULES)/c
+include $(DEFAULT_RULES)/c++
diff --git a/wmake/rules/linuxARM64Arm/openmp b/wmake/rules/linuxARM64Arm/openmp
new file mode 100644
index 0000000000000000000000000000000000000000..070a2c5d3ad0b2ef0b54b458bffa78b8ac915812
--- /dev/null
+++ b/wmake/rules/linuxARM64Arm/openmp
@@ -0,0 +1,8 @@
+# Flags for compiling/linking openmp
+# The USE_OMP is for OpenFOAM-specific use (general use is _OPENMP)
+# -
+# Clang provides 'omp' and a link for 'gomp'.
+# With 'gomp' we can use system libs.
+
+COMP_OPENMP = -DUSE_OMP -fopenmp
+LINK_OPENMP = -lgomp