diff --git a/etc/bashrc b/etc/bashrc
index f4268e1ff72f1f3dba1343e542dffb71c1f37f21..528385a02e218c4da16420cb8b7cb7ad85095c01 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -74,12 +74,6 @@ export WM_COMPILER_TYPE=system
 #   Clang | Clang3[7-9] | Clang[4-6]0 | Icc | Cray | Arm | Pgi
 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 | SPDP
 export WM_PRECISION_OPTION=DP
@@ -103,7 +97,7 @@ export WM_MPLIB=SYSTEMOPENMPI
 
 #------------------------------------------------------------------------------
 # (advanced / legacy)
-#
+
 # [FOAM_SIGFPE] - Trap floating-point exceptions.
 #               - overrides the 'trapFpe' controlDict entry
 # = true | false
@@ -126,6 +120,12 @@ export WM_MPLIB=SYSTEMOPENMPI
 # = POSIX
 #export WM_OSTYPE=POSIX
 
+# [WM_ARCH_OPTION] - compiling with -m32 option on 64-bit system
+# = 32 | 64
+#   * on a 64-bit OS this can be 32 or 64
+#   * on a 32-bit OS this option is ignored (always 32-bit)
+export WM_ARCH_OPTION=64
+
 ################################################################################
 
 # Capture values of old directories to be cleaned from PATH, LD_LIBRARY_PATH
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 00dd09f08fcf390ef08b8ce67106ffaad88f5ed6..7b5e5bd401b85582a5ccfc3e1c235fb994d79123 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -22,6 +22,12 @@
 setenv WM_ARCH `uname -s`                   # System name
 ## if (! $?WM_OSTYPE ) setenv WM_OSTYPE POSIX  # System type (POSIX is default)
 
+set archOption=64
+if ($?WM_ARCH_OPTION) then
+    set archOption="$WM_ARCH_OPTION"
+endif
+
+unsetenv WM_ARCH_OPTION     # Compiling 32-bit on 64-bit system
 setenv WM_COMPILER_ARCH     # Host compiler type (when different than target)
 setenv WM_COMPILER_LIB_ARCH # Additional ending for lib directories
 
@@ -32,23 +38,22 @@ case Linux:
 
     switch (`uname -m`)
     case i686:
-        setenv WM_ARCH_OPTION 32
         breaksw
 
     case x86_64:
-        if (! $?WM_ARCH_OPTION ) setenv WM_ARCH_OPTION 64  # Default to 64-bit
-        switch ($WM_ARCH_OPTION)
+        switch ("$archOption")
         case 32:
-            setenv WM_COMPILER_ARCH 64 # 64-bit compiler, 32-bit target
+            setenv WM_ARCH_OPTION 32        # Need to propagate the value
+            setenv WM_COMPILER_ARCH 64      # 64-bit compiler, 32-bit target
             breaksw
 
         case 64:
             setenv WM_ARCH linux64
-            setenv WM_COMPILER_LIB_ARCH 64  # target with lib64
+            setenv WM_COMPILER_LIB_ARCH 64  # Target with lib64
             breaksw
 
         default:
-            echo "Unknown WM_ARCH_OPTION '$WM_ARCH_OPTION', should be 32|64"
+            echo "Unknown WM_ARCH_OPTION '$archOption', should be 32|64"
             breaksw
 
         endsw
@@ -60,13 +65,11 @@ case Linux:
 
     case armv7l:
         setenv WM_ARCH linuxARM7
-        setenv WM_ARCH_OPTION 32
         setenv WM_COMPILER_LIB_ARCH 32
         breaksw
 
     case aarch64:
         setenv WM_ARCH linuxARM64
-        setenv WM_ARCH_OPTION 64
         setenv WM_COMPILER_LIB_ARCH 64
         breaksw
 
@@ -88,14 +91,8 @@ case Linux:
     breaksw
 
 case Darwin:    # Presumably x86_64
-    if (! $?WM_ARCH_OPTION ) setenv WM_ARCH_OPTION 64  # Default to 64-bit
     setenv WM_ARCH darwin64
-    /bin/cat << INCOMPLETE
-===============================================================================
-Darwin support (clang only) is incomplete or untested in this OpenFOAM release.
-For further assistance, please contact www.OpenFOAM.com
-===============================================================================
-INCOMPLETE
+    echo "Darwin support is clang/llvm only"
     breaksw
 
 case SunOS*:
@@ -320,7 +317,7 @@ endsw
 
 # Cleanup
 # ~~~~~~~
-unset archDir siteDir foundDir
+unset archDir siteDir foundDir archOption
 unset gcc_version gccDir
 unset gmp_version gmpDir  mpfr_version mpfrDir  mpc_version mpcDir
 unset clang_version clangDir
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index 57386f401253ebd1d99f8f52272c7b0bacfdf408..e9d4feb060ef51875b13bd124f61dea9d682c505 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -22,6 +22,8 @@
 export WM_ARCH="$(uname -s)"                # System name
 ## : ${WM_OSTYPE:=POSIX}; export WM_OSTYPE     # System type (POSIX is default)
 
+archOption="${WM_ARCH_OPTION:-64}"
+unset WM_ARCH_OPTION        # Compiling 32-bit on 64-bit system
 unset WM_COMPILER_ARCH      # Host compiler type (when different than target)
 unset WM_COMPILER_LIB_ARCH  # Additional ending for lib directories
 
@@ -33,21 +35,20 @@ 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
+        case "$archOption" in
         32)
-            export WM_COMPILER_ARCH=64 # 64-bit compiler, 32-bit target
+            export WM_ARCH_OPTION=32        # Need to propagate the value
+            export WM_COMPILER_ARCH=64      # 64-bit compiler, 32-bit target
             ;;
         64)
             WM_ARCH=linux64
-            export WM_COMPILER_LIB_ARCH=64
+            export WM_COMPILER_LIB_ARCH=64  # Target with lib64
             ;;
         *)
-            echo "Unknown WM_ARCH_OPTION '$WM_ARCH_OPTION', should be 32|64" 1>&2
+            echo "Unknown WM_ARCH_OPTION '$archOption', should be 32|64" 1>&2
             ;;
         esac
         ;;
@@ -58,13 +59,11 @@ Linux)
 
     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
         ;;
 
@@ -85,14 +84,8 @@ Linux)
     ;;
 
 Darwin)     # Presumably x86_64
-    : ${WM_ARCH_OPTION:=64}; export WM_ARCH_OPTION  # Default to 64-bit
     WM_ARCH=darwin64
-    /bin/cat << INCOMPLETE 1>&2
-===============================================================================
-Darwin support (clang only) is incomplete or untested in this OpenFOAM release.
-For further assistance, please contact www.OpenFOAM.com
-===============================================================================
-INCOMPLETE
+    echo "Darwin support is clang/llvm only" 1>&2
     ;;
 
 SunOS*)
@@ -314,7 +307,7 @@ esac
 
 # Cleanup
 # ~~~~~~~
-unset archDir siteDir foundDir
+unset archDir siteDir foundDir archOption
 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 895513345d2ea38ee992ce7d21d93f37b08c315d..83fc4d58f3e9347fba123c123a22cb191bb02552 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -76,12 +76,6 @@ setenv WM_COMPILER_TYPE system
 #   Clang | Clang3[7-9] | Clang[4-6]0 | Icc | Cray | Arm | Pgi
 setenv 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
-setenv WM_ARCH_OPTION 64
-
 # [WM_PRECISION_OPTION] - Floating-point precision:
 # = DP | SP | SPDP
 setenv WM_PRECISION_OPTION DP
@@ -105,7 +99,7 @@ setenv WM_MPLIB SYSTEMOPENMPI
 
 #------------------------------------------------------------------------------
 # (advanced / legacy)
-#
+
 # [FOAM_SIGFPE] - Trap floating-point exceptions.
 #               - overrides the 'trapFpe' controlDict entry
 # = true | false
@@ -128,6 +122,12 @@ setenv WM_MPLIB SYSTEMOPENMPI
 # = POSIX
 #setenv WM_OSTYPE POSIX
 
+# [WM_ARCH_OPTION] - compiling with -m32 option on 64-bit system
+# = 32 | 64
+#   * on a 64-bit OS this can be 32 or 64
+#   * on a 32-bit OS this option is ignored (always 32-bit)
+setenv WM_ARCH_OPTION 64
+
 ################################################################################
 
 # Old directories to be cleaned from PATH, LD_LIBRARY_PATH
diff --git a/src/OpenFOAM/primitives/ints/int32/int32.H b/src/OpenFOAM/primitives/ints/int32/int32.H
index a681ded96d7bac18e16c90bcf8a480d1c8711b42..311168a99a3958b65e8480ce1df566fd3c8f9ea3 100644
--- a/src/OpenFOAM/primitives/ints/int32/int32.H
+++ b/src/OpenFOAM/primitives/ints/int32/int32.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2014-2016 OpenFOAM Foundation
@@ -46,6 +46,7 @@ SourceFiles
 #include "pTraits.H"
 #include "direction.H"
 
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
@@ -119,9 +120,11 @@ inline bool read(const std::string& str, int32_t& val)
 Istream& operator>>(Istream& is, int32_t& val);
 Ostream& operator<<(Ostream& os, const int32_t val);
 
-// 32bit OS: long is not unambiguously (int32_t | int64_t)
+// 32bit compilation with long as int32_t
 // - resolve explicitly for input and output
-#if WM_ARCH_OPTION == 32
+//
+// Test works for gcc, icc, llvm.
+#if (__SIZEOF_LONG__ == 4)
     Istream& operator>>(Istream& is, long& val);
     Ostream& operator<<(Ostream& os, const long val);
 #endif
diff --git a/src/OpenFOAM/primitives/ints/int32/int32IO.C b/src/OpenFOAM/primitives/ints/int32/int32IO.C
index 634712d0ad63bbe48d92158ecaa9c4b90a7fd297..bbeb64472620fb189b7fd83cd2d1e0174d7b488b 100644
--- a/src/OpenFOAM/primitives/ints/int32/int32IO.C
+++ b/src/OpenFOAM/primitives/ints/int32/int32IO.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2014-2016 OpenFOAM Foundation
@@ -125,7 +125,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const int32_t val)
 }
 
 
-#if WM_ARCH_OPTION == 32
+#if (__SIZEOF_LONG__ == 4)
 Foam::Istream& Foam::operator>>(Istream& is, long& val)
 {
     return operator>>(is, reinterpret_cast<int32_t&>(val));
@@ -133,8 +133,7 @@ Foam::Istream& Foam::operator>>(Istream& is, long& val)
 
 Foam::Ostream& Foam::operator<<(Ostream& os, const long val)
 {
-    os << int32_t(val);
-    return os;
+    return (os << int32_t(val));
 }
 #endif
 
diff --git a/wmake/rules/General/general b/wmake/rules/General/general
index 6a6c7e130db88b54b31b802bb98a9804a9e6eb8a..20a452d3f2c02c407120115ad07821492b09e1b2 100644
--- a/wmake/rules/General/general
+++ b/wmake/rules/General/general
@@ -7,7 +7,7 @@ RANLIB     = ranlib
 CPP        = cpp
 LD         = ld
 
-GFLAGS     = -D$(WM_VERSION) -DWM_ARCH_OPTION=$(WM_ARCH_OPTION) \
+GFLAGS     = -D$(WM_VERSION) \
              -DWM_$(WM_PRECISION_OPTION) -DWM_LABEL_SIZE=$(WM_LABEL_SIZE)
 GINC       =
 GLIBS      = -lm