mpi: Factorize openmpi setup build phase.

* gnu/packages/mpi.scm (%openmpi-setup): New variable.
* gnu/packages/maths.scm (scalapack, slepc-openmpi, mumps-openmpi)
(superlu-dist, p4est, petsc-openmpi, hypre-openmpi, elemental)
(sundials-openmpi, arpack-ng-openmpi)[arguments]: Use it in #:phases.
This commit is contained in:
Eric Bavier 2018-08-16 15:47:41 -05:00 committed by Eric Bavier
parent 5882078e8c
commit bbe46a4af5
No known key found for this signature in database
GPG key ID: FD73CAC719D32566
2 changed files with 34 additions and 82 deletions

View file

@ -511,14 +511,8 @@ (define-public arpack-ng-openmpi
''("--enable-mpi"))
((#:phases phases '%standard-phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t))))))
(add-before 'check 'mpi-setup
,%openmpi-setup)))))
(synopsis "Fortran subroutines for solving eigenvalue problems with MPI")))
(define-public lapack
@ -579,14 +573,8 @@ (define-public scalapack
(arguments
`(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES")
#:phases (modify-phases %standard-phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because
;; 'ssh' could not be found in $PATH. Define this
;; variable to placate Open MPI without adding a
;; dependency on OpenSSH (the agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t)))))
(add-before 'check 'mpi-setup
,%openmpi-setup))))
(home-page "http://www.netlib.org/scalapack/")
(synopsis "Library for scalable numerical linear algebra")
(description
@ -1717,14 +1705,8 @@ (define-public petsc-openmpi
,@(delete "--with-mpi=0" ,cf)))
((#:phases phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t))))))
(add-before 'check 'mpi-setup
,%openmpi-setup)))))
(synopsis "Library to solve PDEs (with MPI support)")))
(define-public petsc-complex-openmpi
@ -1855,14 +1837,8 @@ (define-public slepc-openmpi
(substitute-keyword-arguments (package-arguments slepc)
((#:phases phases '%standard-phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t))))))
(add-before 'check 'mpi-setup
,%openmpi-setup)))))
(inputs
`(("mpi" ,openmpi)
("arpack" ,arpack-ng-openmpi)
@ -2032,14 +2008,8 @@ (define-public mumps-openmpi
(substitute-keyword-arguments (package-arguments mumps)
((#:phases phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t))
(add-before 'check 'mpi-setup
,%openmpi-setup)
(replace 'check
(lambda _
((assoc-ref ,phases 'check)
@ -2285,13 +2255,10 @@ (define-public superlu-dist
"/" dir)))
'("lib" "include"))
#t))
(add-before 'check 'mpi-setup
,%openmpi-setup)
(replace 'check
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to placate
;; Open MPI without adding a dependency on OpenSSH (the agent
;; isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
(with-directory-excursion "EXAMPLE"
(invoke "mpirun" "-n" "2"
"./pddrive" "-r" "1" "-c" "2" "g20.rua")
@ -2384,15 +2351,8 @@ (define-public scotch
;; "SCOTCH_PTHREAD_NUMBER=2"
"restrict=__restrict"))))
#t))
(add-after
'build 'build-esmumps
(add-after 'build 'build-esmumps
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to placate
;; Open MPI without adding a dependency on OpenSSH (the agent
;; isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
(invoke "make"
(format #f "-j~a" (parallel-job-count))
"esmumps")))
@ -2575,14 +2535,8 @@ (define-public p4est
(assoc-ref %build-inputs "lapack")
" -llapack"))
#:phases (modify-phases %standard-phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because
;; 'ssh' could not be found in $PATH. Define this
;; variable to placate Open MPI without adding a
;; dependency on OpenSSH (the agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t)))))
(add-before 'check 'mpi-setup
,%openmpi-setup))))
(home-page "http://www.p4est.org")
(synopsis "Adaptive mesh refinement on forests of octrees")
(description
@ -3649,14 +3603,8 @@ (define-public hypre-openmpi
,@(delete "--without-MPI" ,flags)))
((#:phases phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
#t))))))
(add-before 'check 'mpi-setup
,%openmpi-setup)))))
(synopsis "Parallel solvers and preconditioners for linear equations")
(description
"HYPRE is a software library of high performance preconditioners and
@ -3939,6 +3887,8 @@ (define-public elemental
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DGFORTRAN_LIB=gfortran")
#:phases (modify-phases %standard-phases
(add-before 'check 'mpi-setup
,%openmpi-setup)
(add-before 'check 'setup-tests
(lambda _
;; Parallelism is done at the MPI layer.
@ -4123,16 +4073,6 @@ (define-public sundials-openmpi
,flags))
((#:phases phases '%standard-phases)
`(modify-phases ,phases
(add-before 'check 'set-test-environment
(lambda _
;; By default, running the test suite would fail because 'ssh'
;; could not be found in $PATH. Define this variable to
;; placate Open MPI without adding a dependency on OpenSSH (the
;; agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
;; Allow oversubscription in case there are less
;; physical cores available in the build environment
;; than SUNDIALS wants while testing.
(setenv "OMPI_MCA_rmaps_base_oversubscribe" "yes")
#t))))))
(add-before 'check 'mpi-setup
,%openmpi-setup)))))
(synopsis "SUNDIALS with OpenMPI support")))

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014, 2015, 2018 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
@ -250,3 +250,15 @@ (define-public openmpi-thread-multiple
work correctly with all transports (such as @code{openib}), and the
performance is generally worse than the vanilla @code{openmpi} package, which
only provides @code{MPI_THREAD_FUNNELED}.")))
;;; Build phase to be used for packages that execute MPI code.
(define-public %openmpi-setup
'(lambda _
;; By default, running the test suite would fail because 'ssh' could not
;; be found in $PATH. Define this variable to placate Open MPI without
;; adding a dependency on OpenSSH (the agent isn't used anyway.)
(setenv "OMPI_MCA_plm_rsh_agent" (which "false"))
;; Allow oversubscription in case there are less physical cores available
;; in the build environment than the package wants while testing.
(setenv "OMPI_MCA_rmaps_base_oversubscribe" "yes")
#t))