From 37e1da82ff1e0fc083ae025bb3ef2021191a4c73 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Tue, 31 May 2022 15:15:36 +0200
Subject: [PATCH] CONFIG: add ARM64 nvidia rules

CONFIG: revise Pstream/OpenFOAM linkage (nvidia)

- double-pass linkage seems to be unnecessary
---
 src/Allwmake                              |  2 +-
 wmake/rules/linuxARM64Nvidia/c            | 15 +++++++++++++++
 wmake/rules/linuxARM64Nvidia/c++          | 17 +++++++++++++++++
 wmake/rules/linuxARM64Nvidia/c++Debug     |  2 ++
 wmake/rules/linuxARM64Nvidia/c++Opt       |  2 ++
 wmake/rules/linuxARM64Nvidia/c++Prof      |  2 ++
 wmake/rules/linuxARM64Nvidia/cDebug       |  2 ++
 wmake/rules/linuxARM64Nvidia/cOpt         |  2 ++
 wmake/rules/linuxARM64Nvidia/cProf        |  2 ++
 wmake/rules/linuxARM64Nvidia/general      | 13 +++++++++++++
 wmake/rules/linuxARM64Nvidia/mplibOPENMPI |  3 +++
 11 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100644 wmake/rules/linuxARM64Nvidia/c
 create mode 100644 wmake/rules/linuxARM64Nvidia/c++
 create mode 100644 wmake/rules/linuxARM64Nvidia/c++Debug
 create mode 100644 wmake/rules/linuxARM64Nvidia/c++Opt
 create mode 100644 wmake/rules/linuxARM64Nvidia/c++Prof
 create mode 100644 wmake/rules/linuxARM64Nvidia/cDebug
 create mode 100644 wmake/rules/linuxARM64Nvidia/cOpt
 create mode 100644 wmake/rules/linuxARM64Nvidia/cProf
 create mode 100644 wmake/rules/linuxARM64Nvidia/general
 create mode 100644 wmake/rules/linuxARM64Nvidia/mplibOPENMPI

diff --git a/src/Allwmake b/src/Allwmake
index 62983dcf1f5..ff447a10756 100755
--- a/src/Allwmake
+++ b/src/Allwmake
@@ -30,7 +30,7 @@ OpenFOAM/Alltouch -check 2>/dev/null
 OSspecific/"${WM_OSTYPE:-POSIX}"/Allwmake $targetType $*
 
 case "$WM_COMPILER" in
-(Mingw* | Nvidia*)
+(Mingw*)
     # Pstream/OpenFOAM cyclic dependency
     # 1st pass: link as Pstream as single .o object
     WM_MPLIB=dummy Pstream/Allwmake libo
diff --git a/wmake/rules/linuxARM64Nvidia/c b/wmake/rules/linuxARM64Nvidia/c
new file mode 100644
index 00000000000..b1447dd9fec
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/c
@@ -0,0 +1,15 @@
+#------------------------------------------------------------------------------
+include $(GENERAL_RULES)/Nvidia/c
+
+cARCH       =
+
+# Compile option is non-mandatory, but must be non-empty
+sinclude $(DEFAULT_RULES)/c$(WM_COMPILE_OPTION)
+
+cFLAGS      = $(cARCH) $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
+
+ctoo        = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $< -o $@
+
+include $(GENERAL_RULES)/Nvidia/link-c
+
+#------------------------------------------------------------------------------
diff --git a/wmake/rules/linuxARM64Nvidia/c++ b/wmake/rules/linuxARM64Nvidia/c++
new file mode 100644
index 00000000000..e3e45d17886
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/c++
@@ -0,0 +1,17 @@
+#------------------------------------------------------------------------------
+include $(GENERAL_RULES)/Nvidia/c++
+
+c++ARCH     =
+
+include $(DEFAULT_RULES)/c++$(WM_COMPILE_OPTION)
+
+c++FLAGS    = $(c++ARCH) $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
+
+Ctoo        = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $< -o $@
+cctoo       = $(Ctoo)
+cpptoo      = $(Ctoo)
+cxxtoo      = $(Ctoo)
+
+include $(GENERAL_RULES)/Nvidia/link-c++
+
+#------------------------------------------------------------------------------
diff --git a/wmake/rules/linuxARM64Nvidia/c++Debug b/wmake/rules/linuxARM64Nvidia/c++Debug
new file mode 100644
index 00000000000..48f0b6643e1
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/c++Debug
@@ -0,0 +1,2 @@
+c++DBUG     = -g -DFULLDEBUG
+c++OPT      = -O0
diff --git a/wmake/rules/linuxARM64Nvidia/c++Opt b/wmake/rules/linuxARM64Nvidia/c++Opt
new file mode 100644
index 00000000000..2aedabd6280
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/c++Opt
@@ -0,0 +1,2 @@
+c++DBUG     =
+c++OPT      = -O3
diff --git a/wmake/rules/linuxARM64Nvidia/c++Prof b/wmake/rules/linuxARM64Nvidia/c++Prof
new file mode 100644
index 00000000000..3bda4dad55e
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/c++Prof
@@ -0,0 +1,2 @@
+c++DBUG    = -pg
+c++OPT     = -O2
diff --git a/wmake/rules/linuxARM64Nvidia/cDebug b/wmake/rules/linuxARM64Nvidia/cDebug
new file mode 100644
index 00000000000..7b7adf10dea
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/cDebug
@@ -0,0 +1,2 @@
+cDBUG       = -g -DFULLDEBUG
+cOPT        = -O0
diff --git a/wmake/rules/linuxARM64Nvidia/cOpt b/wmake/rules/linuxARM64Nvidia/cOpt
new file mode 100644
index 00000000000..17318709f1f
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/cOpt
@@ -0,0 +1,2 @@
+cDBUG       =
+cOPT        = -O3
diff --git a/wmake/rules/linuxARM64Nvidia/cProf b/wmake/rules/linuxARM64Nvidia/cProf
new file mode 100644
index 00000000000..ca3ac9bf5f0
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/cProf
@@ -0,0 +1,2 @@
+cDBUG       = -pg
+cOPT        = -O2
diff --git a/wmake/rules/linuxARM64Nvidia/general b/wmake/rules/linuxARM64Nvidia/general
new file mode 100644
index 00000000000..5cfb798fac4
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/general
@@ -0,0 +1,13 @@
+CPP        = cpp -traditional-cpp $(GFLAGS)
+
+include $(GENERAL_RULES)/standard
+## include $(GENERAL_RULES)/Pgi/openmp
+
+ifneq (,$(findstring ~openmp,$(WM_COMPILE_CONTROL)))
+    include $(GENERAL_RULES)/no-openmp
+endif
+
+include $(DEFAULT_RULES)/c
+include $(DEFAULT_RULES)/c++
+
+# -----------------------------------------------------------------------------
diff --git a/wmake/rules/linuxARM64Nvidia/mplibOPENMPI b/wmake/rules/linuxARM64Nvidia/mplibOPENMPI
new file mode 100644
index 00000000000..0faf49ed1e5
--- /dev/null
+++ b/wmake/rules/linuxARM64Nvidia/mplibOPENMPI
@@ -0,0 +1,3 @@
+PFLAGS     = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
+PINC       = -I$(MPI_ARCH_PATH)/include
+PLIBS      = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi
-- 
GitLab