summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/kokkos/package.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py
index 92daad8bd0..5eb7ce5cca 100644
--- a/var/spack/repos/builtin/packages/kokkos/package.py
+++ b/var/spack/repos/builtin/packages/kokkos/package.py
@@ -139,6 +139,17 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
cuda_arches = spack_cuda_arch_map.values()
conflicts("+cuda", when="cuda_arch=none")
+ # Kokkos support only one cuda_arch at a time
+ variant(
+ "cuda_arch",
+ description="CUDA architecture",
+ values=("none",) + CudaPackage.cuda_arch_values,
+ default="none",
+ multi=False,
+ sticky=True,
+ when="+cuda",
+ )
+
amdgpu_arch_map = {
"gfx900": "vega900",
"gfx906": "vega906",
@@ -282,11 +293,16 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
spack_microarches = []
if "+cuda" in spec:
- # this is a list
- for cuda_arch in spec.variants["cuda_arch"].value:
- if not cuda_arch == "none":
- kokkos_arch_name = self.spack_cuda_arch_map[cuda_arch]
- spack_microarches.append(kokkos_arch_name)
+ if isinstance(spec.variants["cuda_arch"].value, str):
+ cuda_arch = spec.variants["cuda_arch"].value
+ else:
+ if len(spec.variants["cuda_arch"].value) > 1:
+ msg = "Kokkos supports only one cuda_arch at a time."
+ raise InstallError(msg)
+ cuda_arch = spec.variants["cuda_arch"].value[0]
+ if cuda_arch != "none":
+ kokkos_arch_name = self.spack_cuda_arch_map[cuda_arch]
+ spack_microarches.append(kokkos_arch_name)
kokkos_microarch_name = self.get_microarch(spec.target)
if kokkos_microarch_name: