From a2189cb9b4a0422a905dc66dca031a0ba0f59367 Mon Sep 17 00:00:00 2001
From: Ronald Rahaman <rrahaman6@gatech.edu>
Date: Tue, 16 Jan 2024 03:27:13 -0600
Subject: mvapich2: add pmi_version variant for pmix, pmi1 support (#40665)

---
 .../repos/builtin/packages/mvapich2/package.py     | 30 +++++++++++++++++-----
 1 file changed, 24 insertions(+), 6 deletions(-)

(limited to 'var')

diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index 246d013e3b..7e9204ffbd 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -83,6 +83,15 @@ class Mvapich2(AutotoolsPackage):
         .with_non_feature_values("auto"),
     )
 
+    variant(
+        "pmi_version",
+        description=("The pmi version to be used with slurm"),
+        when="process_managers=slurm",
+        default="pmi2",
+        values=("pmi1", "pmi2", "pmix"),
+        multi=False,
+    )
+
     variant(
         "fabrics",
         description="Select the fabric to be enabled for this build."
@@ -133,6 +142,7 @@ class Mvapich2(AutotoolsPackage):
     depends_on("rdma-core", when="fabrics=nemesisibtcp")
     depends_on("libfabric", when="fabrics=nemesisofi")
     depends_on("slurm", when="process_managers=slurm")
+    depends_on("pmix", when="pmi_version=pmix")
 
     # Fix segmentation fault in `MPIR_Attr_delete_list`:
     # <https://lists.osu.edu/pipermail/mvapich-discuss/2023-January/010695.html>.
@@ -277,11 +287,14 @@ class Mvapich2(AutotoolsPackage):
 
         # See: http://slurm.schedmd.com/mpi_guide.html#mvapich2
         if "process_managers=slurm" in spec:
-            opts = [
-                "--with-pmi=pmi2",
-                "--with-pm=slurm",
-                "--with-slurm={0}".format(spec["slurm"].prefix),
-            ]
+            opts = ["--with-pm=slurm", "--with-slurm={0}".format(spec["slurm"].prefix)]
+            if "pmi_version=pmi1" in spec:
+                opts.append("--with-pmi=pmi1")
+            elif "pmi_version=pmi2" in spec:
+                opts.append("--with-pmi=pmi2")
+            elif "pmi_version=pmix" in spec:
+                opts.append("--with-pmi=pmix")
+                opts.append("--with-pmix={0}".format(spec["pmix"].prefix))
 
         return opts
 
@@ -347,7 +360,12 @@ class Mvapich2(AutotoolsPackage):
 
     def setup_run_environment(self, env):
         if "process_managers=slurm" in self.spec:
-            env.set("SLURM_MPI_TYPE", "pmi2")
+            if "pmi_version=pmi1" in self.spec:
+                env.set("SLURM_MPI_TYPE", "pmi1")
+            elif "pmi_version=pmi2" in self.spec:
+                env.set("SLURM_MPI_TYPE", "pmi2")
+            elif "pmi_version=pmix" in self.spec:
+                env.set("SLURM_MPI_TYPE", "pmix")
 
         env.set("MPI_ROOT", self.prefix)
 
-- 
cgit v1.2.3-70-g09d2