summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2024-02-10 13:08:13 +0100
committerGitHub <noreply@github.com>2024-02-10 13:08:13 +0100
commit686d1bc1eafef51de2989c095fc7f2eeaa055746 (patch)
tree571c727c8adcdeb77c5ac0c45f00d983430be990
parent9b42f9ab187c7234f73b9080d7f9fe84c9e441e6 (diff)
downloadspack-686d1bc1eafef51de2989c095fc7f2eeaa055746.tar.gz
spack-686d1bc1eafef51de2989c095fc7f2eeaa055746.tar.bz2
spack-686d1bc1eafef51de2989c095fc7f2eeaa055746.tar.xz
spack-686d1bc1eafef51de2989c095fc7f2eeaa055746.zip
mfem: fix self-referential dependencies (#42487)
-rw-r--r--var/spack/repos/builtin/packages/mfem/package.py71
1 files changed, 28 insertions, 43 deletions
diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py
index ddd7be363d..db4a6f78db 100644
--- a/var/spack/repos/builtin/packages/mfem/package.py
+++ b/var/spack/repos/builtin/packages/mfem/package.py
@@ -260,24 +260,21 @@ class Mfem(Package, CudaPackage, ROCmPackage):
depends_on("mpi", when="+mpi")
depends_on("hipsparse", when="@4.4.0:+rocm")
- depends_on("hypre@2.10.0:2.13", when="@:3.3+mpi")
- depends_on("hypre@:2.20.0", when="@3.4:4.2+mpi")
- depends_on("hypre@:2.23.0", when="@4.3.0+mpi")
- depends_on("hypre", when="+mpi")
- # Propagate 'cuda_arch' to 'hypre' without propagating the '+cuda'
- # variant because we want to allow 'mfem+cuda ^hypre~cuda':
+
+ with when("+mpi"):
+ depends_on("hypre")
+ depends_on("hypre@2.10.0:2.13", when="@:3.3")
+ depends_on("hypre@:2.20.0", when="@3.4:4.2")
+ depends_on("hypre@:2.23.0", when="@4.3.0")
+
+ # If hypre is built with +cuda, propagate cuda_arch
+ requires("^hypre@2.22.1:", when="+mpi+cuda ^hypre+cuda")
for sm_ in CudaPackage.cuda_arch_values:
- depends_on(
- "hypre@2.22.1:+cuda cuda_arch={0}".format(sm_),
- when="+mpi+cuda cuda_arch={0} ^hypre+cuda".format(sm_),
- )
- # Propagate 'amdgpu_target' to 'hypre' without propagating the '+rocm'
- # variant because we want to allow 'mfem+rocm ^hypre~rocm':
+ requires(f"^hypre cuda_arch={sm_}", when=f"+mpi+cuda cuda_arch={sm_} ^hypre+cuda")
+ # If hypre is built with +rocm, propagate amdgpu_target
+ requires("^hypre@2.23.0: ", when="+mpi+rocm ^hypre+rocm")
for gfx in ROCmPackage.amdgpu_targets:
- depends_on(
- "hypre@2.23.0:+rocm amdgpu_target={0}".format(gfx),
- when="+mpi+rocm amdgpu_target={0} ^hypre+rocm".format(gfx),
- )
+ requires(f"^hypre amdgpu_target={gfx}", when=f"+mpi+rocm amdgpu_target={gfx} ^hypre+rocm")
depends_on("metis", when="+metis")
depends_on("blas", when="+lapack")
@@ -311,19 +308,17 @@ class Mfem(Package, CudaPackage, ROCmPackage):
depends_on("gslib@1.0.7:", when="@4.3.0:+gslib")
depends_on("suite-sparse", when="+suite-sparse")
depends_on("superlu-dist", when="+superlu-dist")
- # Propagate 'cuda_arch' to 'superlu-dist' without propagating the '+cuda'
- # variant so we can build 'mfem+cuda+superlu-dist ^superlu-dist~cuda':
+ # If superlu-dist is built with +cuda, propagate cuda_arch
for sm_ in CudaPackage.cuda_arch_values:
- depends_on(
- "superlu-dist+cuda cuda_arch={0}".format(sm_),
- when="+superlu-dist+cuda cuda_arch={0} ^superlu-dist+cuda".format(sm_),
+ requires(
+ f"^superlu-dist cuda_arch={sm_}",
+ when=f"+superlu-dist+cuda cuda_arch={sm_} ^superlu-dist+cuda",
)
- # Propagate 'amdgpu_target' to 'superlu-dist' without propagating the '+rocm'
- # variant so we can build 'mfem+rocm+superlu-dist ^superlu-dist~rocm':
+ # If superlu-dist is built with +rocm, propagate amdgpu_target
for gfx in ROCmPackage.amdgpu_targets:
- depends_on(
- "superlu-dist+rocm amdgpu_target={0}".format(gfx),
- when="+superlu-dist+rocm amdgpu_target={0} ^superlu-dist+rocm".format(gfx),
+ requires(
+ f"^superlu-dist+rocm amdgpu_target={gfx}",
+ when=f"+superlu-dist+rocm amdgpu_target={gfx} ^superlu-dist+rocm",
)
depends_on("strumpack@3.0.0:", when="+strumpack~shared")
depends_on("strumpack@3.0.0:+shared", when="+strumpack+shared")
@@ -342,27 +337,17 @@ class Mfem(Package, CudaPackage, ROCmPackage):
# with MUMPS is not strictly required, so we do not require it here.
depends_on("petsc@3.8:+mpi+double+hypre", when="+petsc")
depends_on("slepc@3.8.0:", when="+slepc")
- # Propagate 'cuda_arch' to 'petsc'/'slepc' without propagating the '+cuda'
- # variant because we want to allow 'mfem+cuda+petsc ^petsc~cuda':
+ # If petsc is built with +cuda, propagate cuda_arch to petsc and slepc
for sm_ in CudaPackage.cuda_arch_values:
- depends_on(
- "petsc+cuda cuda_arch={0}".format(sm_),
- when="+cuda+petsc cuda_arch={0} ^petsc+cuda".format(sm_),
- )
- depends_on(
- "slepc+cuda cuda_arch={0}".format(sm_),
- when="+cuda+slepc cuda_arch={0} ^petsc+cuda".format(sm_),
- )
- # Propagate 'amdgpu_target' to 'petsc'/'slepc' without propagating the
- # '+rocm' variant because we want to allow 'mfem+rocm+petsc ^petsc~rocm':
+ requires(f"^petsc cuda_arch={sm_}", when=f"+cuda+petsc cuda_arch={sm_} ^petsc+cuda")
+ depends_on(f"slepc+cuda cuda_arch={sm_}", when=f"+cuda+slepc cuda_arch={sm_} ^petsc+cuda")
+ # If petsc is built with +rocm, propagate amdgpu_target to petsc and slepc
for gfx in ROCmPackage.amdgpu_targets:
- depends_on(
- "petsc+rocm amdgpu_target={0}".format(gfx),
- when="+rocm+petsc amdgpu_target={0} ^petsc+rocm".format(gfx),
+ requires(
+ f"^petsc amdgpu_target={gfx}", when=f"+rocm+petsc amdgpu_target={gfx} ^petsc+rocm"
)
depends_on(
- "slepc+rocm amdgpu_target={0}".format(gfx),
- when="+rocm+slepc amdgpu_target={0} ^petsc+rocm".format(gfx),
+ f"slepc+rocm amdgpu_target={gfx}", when=f"+rocm+slepc amdgpu_target={gfx} ^petsc+rocm"
)
depends_on("mpfr", when="+mpfr")
depends_on("netcdf-c@4.1.3:", when="+netcdf")