spack/var/spack/repos/spack_repo/builtin/packages/rccl/package.py
Harmen Stoppels b932c14008
builtin: use api v2.0 and update dir structure (#49275)
* Bump the package API of the `builtin` repo to `v2.0`
* Move `var/spack/repos/builtin` -> `var/spack/repos/spack_repo/builtin`
* Move test repos `var/spack/repos/{builtin.mock,tutorial,...}` -> `var/spack/test_repos/`
* Update package dir names to v2 format (`-` -> `_` etc)
* Change absolute imports `from spack.pkg.builtin.my_pkg ...` to relative imports `from ..my_pkg.package ...`

Users who have a repo on top of builtin should change imports from

```python
from spack.pkg.builtin.my_pkg import MyPkg
```

to

```python
from spack_repo.builtin.packages.my_pkg.package import MyPkg
```

and can configure their editors with

```
PYTHONPATH=$spack/lib/spack:$spack/var/spack/repos
```

[skip-verify-checksums]
2025-05-06 12:05:44 +02:00

181 lines
6.4 KiB
Python

# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import re
from spack.package import *
class Rccl(CMakePackage):
"""RCCL (pronounced "Rickle") is a stand-alone library
of standard collective communication routines for GPUs,
implementing all-reduce, all-gather, reduce, broadcast,
and reduce-scatter."""
homepage = "https://github.com/ROCm/rccl"
git = "https://github.com/ROCm/rccl.git"
url = "https://github.com/ROCm/rccl/archive/rocm-6.2.4.tar.gz"
tags = ["rocm"]
maintainers("srekolam", "renjithravindrankannath", "afzpatel")
libraries = ["librccl"]
version(
"6.3.3",
tag="rocm-6.3.3",
commit="9a0e6a114c8f7371fa3050b413a350d6945fb7db",
submodules=True,
)
version(
"6.3.2",
tag="rocm-6.3.2",
commit="9a0e6a114c8f7371fa3050b413a350d6945fb7db",
submodules=True,
)
version(
"6.3.1",
tag="rocm-6.3.1",
commit="4ab67f5a5946d851a963b281cd9aa7b86eee752a",
submodules=True,
)
version(
"6.3.0",
tag="rocm-6.3.0",
commit="eef7b2918cef592a18b6e59859558e6a3f0f0614",
submodules=True,
)
version("6.2.4", sha256="12a04743ed89a74b4a08aa046b6a549d385e15d6866042fd41eac8f085f50eea")
version("6.2.1", sha256="0f5e35c7afbb21c1d49ff201b7d1ddf163d853c27c75c3eaf7b449f4dc1e2188")
version("6.2.0", sha256="a29c94ea3b9c1a0121d7b1450cb01a697f9f9132169632312b9b0bf744d3c0e3")
version("6.1.2", sha256="98af99c12d800f5439c7740d797162c35810a25e08e3b11b397d3300d3c0148e")
version("6.1.1", sha256="6368275059ba190d554535d5aeaa5c2510d944b56efd85c90a1701d0292a14c5")
version("6.1.0", sha256="c6308f6883cbd63dceadbe4ee154cc6fa9e6bdccbd2f0fda295b564b0cf01e9a")
version("6.0.2", sha256="5c8495acba3d620b751e729d1157e7b4eea8f5e5692c50ce47c5204d3dfd443c")
version("6.0.0", sha256="0496d5a5f2e48c92cd390ab318df31a53cf7ec590988c2574c9f3d99c38b0fa7")
version("5.7.1", sha256="fb4c1f0084196d1226ce8a726d0f012d3890b54508a06ca87bbda619be8b90b1")
version("5.7.0", sha256="4c2825a3e4323ef3c2f8855ef445c1a81cf1992fb37e3e8a07a50db354aa3954")
version("5.6.1", sha256="27ec6b86a1a329684d808f728c1fce134517ac8e6e7047689f95dbf8386c077e")
version("5.6.0", sha256="cce13c8a9e233e7ddf91a67b1626b7aaeaf818fefe61af8de6b6b6ff47cb358c")
version("5.5.1", sha256="f6b9dc6dafeb49d95c085825876b09317d8252771c746ccf5aa19a9204a404b2")
version("5.5.0", sha256="be2964b408741d046bcd606d339a233d1d1deac7b841647ec53d6d62d71452ba")
with default_args(deprecated=True):
version("5.4.3", sha256="a2524f602bd7b3b6afeb8ba9aff660216ee807fa836e46442d068b5ed5f51a4d")
version("5.4.0", sha256="213f4f3d75389be588673e43f563e5c0d6908798228b0b6a71f27138fd4ed0c7")
version("5.3.3", sha256="8995a2d010ad0748fc85ac06e8da7e8d110ba996db04d42b77526c9c059c05bb")
version("5.3.0", sha256="51da5099fa58c2be882319cebe9ceabe2062feebcc0c5849e8c109030882c10a")
amdgpu_targets = ROCmPackage.amdgpu_targets
variant(
"amdgpu_target",
description="AMD GPU architecture",
values=auto_or_any_combination_of(*amdgpu_targets),
sticky=True,
)
variant("asan", default=False, description="Build with address-sanitizer enabled or disabled")
patch("0003-Fix-numactl-rocm-smi-path-issue.patch", when="@5.2.3:5.6")
patch("0004-Set-rocm-core-path-for-version-file.patch", when="@6.0:6.2")
patch("0004-Set-rocm-core-path-for-version-file-6.3.patch", when="@6.3")
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
depends_on("cmake@3.5:", type="build")
depends_on("chrpath", when="@5.3.0:5", type="build")
depends_on("numactl@2:")
for ver in [
"5.3.0",
"5.3.3",
"5.4.0",
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
"5.7.0",
"5.7.1",
"6.0.0",
"6.0.2",
"6.1.0",
"6.1.1",
"6.1.2",
"6.2.0",
"6.2.1",
"6.2.4",
"6.3.0",
"6.3.1",
"6.3.2",
"6.3.3",
]:
depends_on(f"rocm-cmake@{ver}:", type="build", when=f"@{ver}")
depends_on(f"hip@{ver}", when=f"@{ver}")
depends_on(f"comgr@{ver}", when=f"@{ver}")
depends_on(f"hsa-rocr-dev@{ver}", when=f"@{ver}")
depends_on(f"rocm-smi-lib@{ver}", when=f"@{ver}")
for ver in [
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
"5.7.0",
"5.7.1",
"6.0.0",
"6.0.2",
"6.1.0",
"6.1.2",
"6.2.0",
"6.2.1",
"6.2.4",
"6.3.0",
"6.3.1",
"6.3.2",
"6.3.3",
]:
depends_on(f"rocm-core@{ver}", when=f"@{ver}")
depends_on("googletest@1.11.0:", type="test", when="@5.3:")
@classmethod
def determine_version(cls, lib):
match = re.search(r"lib\S*\.so\.\d+\.\d+\.(\d)(\d\d)(\d\d)", lib)
if match:
ver = "{0}.{1}.{2}".format(
int(match.group(1)), int(match.group(2)), int(match.group(3))
)
else:
ver = None
return ver
def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
env.set("ROCMCORE_PATH", self.spec["rocm-core"].prefix)
if self.spec.satisfies("+asan"):
env.set("ASAN_OPTIONS", "detect_leaks=0")
env.set("CFLAGS", "-fsanitize=address -shared-libasan")
env.set("CXXFLAGS", "-fsanitize=address -shared-libasan")
env.set("LDFLAGS", "-fuse-ld=lld")
def cmake_args(self):
args = [
self.define("NUMACTL_DIR", self.spec["numactl"].prefix),
self.define("ROCM_SMI_DIR", self.spec["rocm-smi-lib"].prefix),
self.define("ROCM_PATH", self.spec["hip"].prefix),
]
if "auto" not in self.spec.variants["amdgpu_target"]:
args.append(self.define_from_variant("AMDGPU_TARGETS", "amdgpu_target"))
if self.spec.satisfies("^cmake@3.21.0:3.21.2"):
args.append(self.define("__skip_rocmclang", True))
if self.spec.satisfies("@5.3.0:"):
args.append(self.define("BUILD_TESTS", self.run_tests))
return args
def test_unit(self):
"""Run unit tests"""
unit_tests = which(join_path(self.prefix.bin, "rccl-UnitTests"))
unit_tests()