summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/hipcub/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/hipcub/package.py')
-rw-r--r--var/spack/repos/builtin/packages/hipcub/package.py46
1 files changed, 38 insertions, 8 deletions
diff --git a/var/spack/repos/builtin/packages/hipcub/package.py b/var/spack/repos/builtin/packages/hipcub/package.py
index 0c946897e0..95364a2a54 100644
--- a/var/spack/repos/builtin/packages/hipcub/package.py
+++ b/var/spack/repos/builtin/packages/hipcub/package.py
@@ -6,7 +6,7 @@
from spack.package import *
-class Hipcub(CMakePackage):
+class Hipcub(CMakePackage, CudaPackage, ROCmPackage):
"""Radeon Open Compute Parallel Primitives Library"""
homepage = "https://github.com/ROCmSoftwarePlatform/hipCUB"
@@ -96,6 +96,22 @@ class Hipcub(CMakePackage):
deprecated=True,
)
+ # default to an 'auto' variant until amdgpu_targets can be given a better default than 'none'
+ amdgpu_targets = ROCmPackage.amdgpu_targets
+ variant(
+ "amdgpu_target",
+ values=spack.variant.DisjointSetsOfValues(("auto",), ("none",), amdgpu_targets)
+ .with_default("auto")
+ .with_error(
+ "the values 'auto' and 'none' are mutually exclusive with any of the other values"
+ )
+ .with_non_feature_values("auto", "none"),
+ sticky=True,
+ )
+ variant("rocm", default=True, description="Enable ROCm support")
+ conflicts("+cuda +rocm", msg="CUDA and ROCm support are mutually exclusive")
+ conflicts("~cuda ~rocm", msg="CUDA or ROCm support is required")
+
variant(
"build_type",
default="Release",
@@ -105,7 +121,9 @@ class Hipcub(CMakePackage):
depends_on("cmake@3.10.2:", type="build", when="@4.2.0:")
depends_on("cmake@3.5.1:", type="build")
- depends_on("numactl", type="link", when="@3.7.0:")
+
+ depends_on("hip +cuda", when="+cuda")
+
depends_on("googletest@1.10.0:", type="test")
for ver in [
@@ -133,20 +151,32 @@ class Hipcub(CMakePackage):
"5.4.0",
"5.4.3",
]:
- depends_on("hip@" + ver, when="@" + ver)
- depends_on("rocprim@" + ver, when="@" + ver)
+ depends_on("rocprim@" + ver, when="+rocm @" + ver)
depends_on("rocm-cmake@%s:" % ver, type="build", when="@" + ver)
+ # fix hardcoded search in /opt/rocm and broken config mode search
+ patch("find-hip-cuda-rocm-5.1.patch", when="@5.1:5.2 +cuda")
+ patch("find-hip-cuda-rocm-5.3.patch", when="@5.3: +cuda")
+
def setup_build_environment(self, env):
- env.set("CXX", self.spec["hip"].hipcc)
+ if self.spec.satisfies("+rocm"):
+ env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
args = [self.define("BUILD_TEST", self.run_tests)]
- if self.spec.satisfies("^cmake@3.21.0:3.21.2"):
+ if self.spec.satisfies("+rocm ^cmake@3.21.0:3.21.2"):
args.append(self.define("__skip_rocmclang", "ON"))
- if self.spec.satisfies("@:5.1"):
- args.append(self.define("CMAKE_MODULE_PATH", self.spec["hip"].prefix.cmake))
+
+ # FindHIP.cmake was used for +rocm until 3.7.0 and is still used for +cuda
+ if self.spec.satisfies("@:3.7.0") or self.spec.satisfies("+cuda"):
+ if self.spec["hip"].satisfies("@:5.1"):
+ args.append(self.define("CMAKE_MODULE_PATH", self.spec["hip"].prefix.cmake))
+ else:
+ args.append(
+ self.define("CMAKE_MODULE_PATH", self.spec["hip"].prefix.lib.cmake.hip)
+ )
+
if self.spec.satisfies("@5.2.0:"):
args.append(self.define("BUILD_FILE_REORG_BACKWARD_COMPATIBILITY", True))