diff options
author | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2024-02-10 13:08:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-10 13:08:13 +0100 |
commit | 686d1bc1eafef51de2989c095fc7f2eeaa055746 (patch) | |
tree | 571c727c8adcdeb77c5ac0c45f00d983430be990 | |
parent | 9b42f9ab187c7234f73b9080d7f9fe84c9e441e6 (diff) | |
download | spack-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.py | 71 |
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") |