diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/hipcub/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/hipcub/package.py | 46 |
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)) |