diff --git a/wmake/rules/General/general b/wmake/rules/General/general
index 20a452d3f2c02c407120115ad07821492b09e1b2..b020887f3cda6cc64426366be56d70797e008d38 100644
--- a/wmake/rules/General/general
+++ b/wmake/rules/General/general
@@ -17,7 +17,7 @@ GLIB_LIBS  =
 COMPILER_TYPE   = $(shell echo "$(WM_COMPILER)" | sed -e 's/[0-9].*//')
 DEFAULT_RULES   = $(WM_DIR)/rules/$(WM_ARCH)$(COMPILER_TYPE)
 RULES           = $(WM_DIR)/rules/$(WM_ARCH)$(WM_COMPILER)
-WMAKE_BIN       = $(WM_DIR)/platforms/$(WM_ARCH)$(WM_COMPILER)
+WMAKE_BIN       = $(WM_PROJECT_DIR)/platforms/tools/$(WM_ARCH)$(WM_COMPILER)
 
 ifeq ($(WM_SCHEDULER),)
     AND = &&
diff --git a/wmake/src/Allmake b/wmake/src/Allmake
index 8e164107e2b1c87e4db901a4e61cd68e55b215db..9e78c5eb5284847bdb6acf6f07914ec6c403f673 100755
--- a/wmake/src/Allmake
+++ b/wmake/src/Allmake
@@ -1,23 +1,38 @@
 #!/bin/sh
-cd "${0%/*}" || exit 1                  # Run from this directory
+cd "${0%/*}" || exit            # This directory (/path/project/wmake/src)
 
-if [ -z "$WM_DIR" ]                     # Require WM_DIR
+if [ -z "$WM_DIR" ]             # Require WM_DIR (/path/project/wmake)
 then
-    WM_DIR="$(\cd $(dirname $0)/.. && \pwd -L)"
+    WM_DIR="$(dirname "$(pwd -L)")"
     export WM_DIR
 fi
 
+if [ -z "$WM_PROJECT_DIR" ]     # Expect WM_PROJECT_DIR (/path/project)
+then
+    echo "Warning (${0##*/}) : No WM_PROJECT_DIR set" 1>&2
+    WM_PROJECT_DIR="${WM_DIR%/*}"
+    export WM_PROJECT_DIR
+fi
+
+if [ -z "$WM_ARCH" ] || [ -z "$WM_COMPILER" ]
+then
+    echo "Error (${0##*/}) : No WM_ARCH or WM_COMPILER set"
+    echo "    Check your OpenFOAM environment and installation"
+    exit 1
+fi
+
 case "$WM_COMPILER" in
 Mingw*)
     # Host wmake toolchain with system gcc (when cross-compiling)
     make \
         WM_COMPILER=Gcc WM_COMPILER_TYPE=system \
-        WMAKE_BIN="${WM_DIR}/platforms/${WM_ARCH}${WM_COMPILER}"
+        WMAKE_BIN="${WM_PROJECT_DIR}/platforms/tools/${WM_ARCH}${WM_COMPILER}" \
+        "$@"
     ;;
 
 *)
-    # Compile wmake toolchain
-    make
+    # Regular wmake toolchain
+    make "$@"
     ;;
 esac
 
diff --git a/wmake/src/Makefile b/wmake/src/Makefile
index 1eea9ecac13af3186e3a6c651ff22773c9c1ca1f..d62cb9f804add6a64a1a2d4068ec91c01f5566fd 100644
--- a/wmake/src/Makefile
+++ b/wmake/src/Makefile
@@ -6,7 +6,7 @@
 #    \\/     M anipulation  |
 #------------------------------------------------------------------------------
 #     Copyright (C) 2011-2016 OpenFOAM Foundation
-#     Copyright (C) 2017-2019 OpenCFD Ltd.
+#     Copyright (C) 2017-2020 OpenCFD Ltd.
 #------------------------------------------------------------------------------
 # License
 #     This file is part of OpenFOAM.
@@ -63,10 +63,13 @@ archTarget  := $(shell basename $(WMAKE_BIN))
 # Targets
 #------------------------------------------------------------------------------
 
-.PHONY: all clean message
+.PHONY: all clean message old
 
 all: $(WMAKE_BIN)/wmkdepend$(EXT_EXE) message
 
+# Flex-based processing
+old: $(WMAKE_BIN)/wmkdep$(EXT_EXE)
+
 message:
 ifneq ($(archHost),$(archTarget))
 	@echo "built wmake-bin ($(archTarget)) for $(archHost) host"
@@ -76,14 +79,14 @@ endif
 
 clean:
 	@echo "clean wmake-bin ($(archTarget))"
-	@rm -rf $(WMAKE_BIN) 2>/dev/null
+	@rm -rf $(WMAKE_BIN)
 	@rmdir $(shell dirname $(WMAKE_BIN)) 2>/dev/null || true
 
 $(WMAKE_BIN)/wmkdep$(EXT_EXE): wmkdep.l
 	@mkdir -p $(WMAKE_BIN)
 	$(call QUIET_MESSAGE,flex,$(<F))
 	$E flex -o $@.c $(<F) && $(cc) $(cFLAGS) $@.c -o $@
-	@rm -f $@.c 2>/dev/null
+	@rm -f $@.c
 
 $(WMAKE_BIN)/wmkdepend$(EXT_EXE): wmkdepend.cpp
 	@mkdir -p $(WMAKE_BIN)
@@ -94,6 +97,6 @@ $(WMAKE_BIN)/wmkdepend$(EXT_EXE): wmkdepend.cpp
 # 	@mkdir -p $(WMAKE_BIN)
 # 	$(call QUIET_MESSAGE,ragel,$(<F))
 # 	$E ragel -G2 -o $@.cpp $(<F) && $(CC) $(c++FLAGS) $(c++LESSWARN) $@.cpp -o $@
-# 	@rm -f $@.cpp 2>/dev/null
+# 	@rm -f $@.cpp
 
 #------------------------------------------------------------------------------