Subject: [bug#72062] [PATCH 3/4] gnu: Add openmpi-5.

From: Romain GARBAGE <[email-masked]>
Date: Thu, 11 Jul 2024 16:35:24 +0200

* gnu/packages/mpi.scm (openmpi-5): New variable.

Change-Id: I048692b2e928077c9cfa9fb8076ceb356251e1db
---
 gnu/packages/mpi.scm | 52 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 6270108b16..8cde8ef044 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2018–2022 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2018 Paul Garlick <[email-masked]>
 ;;; Copyright © 2019, 2021 Ricardo Wurmus <[email-masked]>
+;;; Copyright © 2024 Romain Garbage <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +50,7 @@ (define-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages parallel)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages valgrind)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
@@ -307,6 +309,56 @@ (define-public openmpi
     ;; See file://LICENSE
     (license license:bsd-2)))
 
+(define-public openmpi-5
+  (package/inherit openmpi
+    (version "5.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.open-mpi.org/software/ompi/v"
+                           (version-major+minor version)
+                           "/downloads/openmpi-" version ".tar.bz2"))
+       (sha256
+        (base32 "02x9xmpggw77mdpikjjx83j6i4v3gkqbncda73lk5axk0vr841cr"))))
+
+    (inputs (modify-inputs (package-inputs openmpi)
+              ;; As of Open MPI 5.0.X, PMIx is used to communicate
+              ;; with SLURM, so SLURM'S PMI is no longer needed.
+              (delete "slurm")
+              (append ucx)              ;for Infiniband support
+              (append openpmix)         ;for PMI support (launching via "srun")
+              (append prrte)))          ;for PMI support (launching via "srun")
+    (native-inputs (modify-inputs (package-native-inputs openmpi)
+                     (append python)))
+
+    (outputs '("out" "debug"))
+    (arguments
+     (substitute-keyword-arguments (package-arguments openmpi)
+       ((#:configure-flags flags)
+        #~(append (list "--enable-prte-prefix-by-default" ;replaces --enable-mpirun-prefix-by-default
+                        ;; Enable support for the 'Process Management
+                        ;; Interface for Exascale' (PMIx) used e.g. by
+                        ;; Slurm for the management communication and
+                        ;; coordination of MPI processes.
+                        (string-append "--with-pmix=" #$(this-package-input "openpmix"))
+                        (string-append "--with-prrte=" #$(this-package-input "prrte"))
+
+                        ;; Since 5.x, Infiniband support is provided by ucx.
+                        (string-append "--with-ucx=" #$(this-package-input "ucx")))
+                  (filter (lambda (e)
+                            (and (not (string-contains e "pmi")) ;; Since 5.x, OpenMPI doesn't support PMI/PMI-2
+                                 ;; Deprecated since 5.x.
+                                 (not (string-contains e "enable-mpirun-prefix-by-default"))
+                                 ;; Infiniband support is deprecated and superseded by ucx
+                                 ;; See https://docs.open-mpi.org/en/main/release-notes/networks.html#miscellaneous-network-notes
+                                 (not (string-contains e "openib"))))
+                          #$flags)))
+
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (delete 'remove-absolute)
+            (delete 'scrub-timestamps)))))))
+
 (define-public openmpi-c++
   (package/inherit openmpi
     (name "openmpi-c++")
-- 
2.45.1