273 lines
9.9 KiB
Python
273 lines
9.9 KiB
Python
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
import os
|
|
import re
|
|
|
|
from spack.package import *
|
|
|
|
|
|
class RocmOpencl(CMakePackage):
|
|
"""OpenCL: Open Computing Language on ROCclr"""
|
|
|
|
homepage = "https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime"
|
|
git = "https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime.git"
|
|
tags = ["rocm"]
|
|
|
|
maintainers("srekolam", "renjithravindrankannath")
|
|
libraries = ["libOpenCL"]
|
|
|
|
def url_for_version(self, version):
|
|
if version == Version("3.5.0"):
|
|
return (
|
|
"https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/archive/roc-3.5.0.tar.gz"
|
|
)
|
|
|
|
url = "https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/archive/rocm-{0}.tar.gz"
|
|
return url.format(version)
|
|
|
|
version("master", branch="main")
|
|
version("5.6.1", sha256="ec26049f7d93c95050c27ba65472736665ec7a40f25920a868616b2970f6b845")
|
|
version("5.6.0", sha256="52ab260d00d279c2a86c353901ffd88ee61b934ad89e9eb480f210656705f04e")
|
|
version("5.5.1", sha256="a8a62a7c6fc5398406d2203b8cb75621a24944688e545d917033d87de2724498")
|
|
version("5.5.0", sha256="0df9fa0b8aa0c8e6711d34eec0fdf1ed356adcd9625bc8f1ce9b3e72090f3e4f")
|
|
version("5.4.3", sha256="b0f8339c844a2e62773bd85cd1e7c5ecddfe71d7c8e8d604e1a1d60900c30873")
|
|
version("5.4.0", sha256="a294639478e76c75dac0e094b418f9bd309309b07faf6af126cdfad9aab3c5c7")
|
|
version("5.3.3", sha256="cab394e6ef16c35bab8de29a66b96a7dc0e7d1297aaacba3718fa1d369233c9f")
|
|
version("5.3.0", sha256="d251e2efe95dc12f536ce119b2587bed64bbda013969fa72be58062788044a9e")
|
|
version("5.2.3", sha256="932ea3cd268410010c0830d977a30ef9c14b8c37617d3572a062b5d4595e2b94")
|
|
version("5.2.1", sha256="eb4ff433f8894ca659802f81792646034f8088b47aca6ad999292bcb8d6381d5")
|
|
version("5.2.0", sha256="80f73387effdcd987a150978775a87049a976aa74f5770d4420847b004dd59f0")
|
|
version("5.1.3", sha256="44a7fac721abcd93470e1a7e466bdea0c668c253dee93e4f1ea9a72dbce4ba31")
|
|
version("5.1.0", sha256="362d81303048cf7ed5d2f69fb65ed65425bc3da4734fff83e3b8fbdda51b0927")
|
|
version(
|
|
"5.0.2",
|
|
sha256="3edb1992ba28b4a7f82dd66fbd121f62bd859c1afb7ceb47fa856bd68feedc95",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"5.0.0",
|
|
sha256="2aa3a628b336461f83866c4e76225ef5338359e31f802987699d6308515ae1be",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.5.2",
|
|
sha256="96b43f314899707810db92149caf518bdb7cf39f7c0ad86e98ad687ffb0d396d",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.5.0",
|
|
sha256="3a163aed24619b3faf5e8ba17325bdcedd1667a904ea20914ac6bdd33fcdbca8",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.3.1",
|
|
sha256="7f98f7d4707b4392f8aa7017aaca9e27cb20263428a1a81fb7ec7c552e60c4ca",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.3.0",
|
|
sha256="d37bddcc6835b6c0fecdf4d02c204ac1d312076f3eef2b1faded1c4c1bc651e9",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.2.0",
|
|
sha256="18133451948a83055ca5ebfb5ba1bd536ed0bcb611df98829f1251a98a38f730",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.1.0",
|
|
sha256="0729e6c2adf1e3cf649dc6e679f9cb936f4f423f4954ad9852857c0a53ef799c",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"4.0.0",
|
|
sha256="d43ea5898c6b9e730b5efabe8367cc136a9260afeac5d0fe85b481d625dd7df1",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"3.10.0",
|
|
sha256="3aa9dc5a5f570320b04b35ee129ce9ff21062d2770df934c6c307913f975e93d",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"3.9.0",
|
|
sha256="286ff64304905384ce524cd8794c28aee216befd6c9267d4187a12e5a21e2daf",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"3.8.0",
|
|
sha256="7f75dd1abf3d771d554b0e7b0a7d915ab5f11a74962c92b013ee044a23c1270a",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"3.7.0",
|
|
sha256="283e1dfe4c3d2e8af4d677ed3c20e975393cdb0856e3ccd77b9c7ed2a151650b",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"3.5.0",
|
|
sha256="511b617d5192f2d4893603c1a02402b2ac9556e9806ff09dd2a91d398abf39a0",
|
|
deprecated=True,
|
|
)
|
|
|
|
depends_on("cmake@3:", type="build")
|
|
depends_on("gl@4.5:", type="link")
|
|
depends_on("numactl", type="link", when="@3.7.0:")
|
|
|
|
for d_version, d_shasum in [
|
|
("5.6.1", "cc9a99c7e4de3d9360c0a471b27d626e84a39c9e60e0aff1e8e1500d82391819"),
|
|
("5.6.0", "864f87323e793e60b16905284fba381a7182b960dd4a37fb67420c174442c03c"),
|
|
("5.5.1", "1375fc7723cfaa0ae22a78682186d4804188b0a54990bfd9c0b8eb421b85e37e"),
|
|
("5.5.0", "efbae9a1ef2ab3de5ca44091e9bb78522e76759c43524c1349114f9596cc61d1"),
|
|
("5.4.3", "71d9668619ab57ec8a4564d11860438c5aad5bd161a3e58fbc49555fbd59182d"),
|
|
("5.4.0", "46a1579310b3ab9dc8948d0fb5bed4c6b312f158ca76967af7ab69e328d43138"),
|
|
("5.3.3", "f8133a5934f9c53b253d324876d74f08a19e2f5b073bc94a62fe64b0d2183a18"),
|
|
("5.3.0", "2bf14116b5e2270928265f5d417b3d0f0f2e13cbc8ec5eb8c80d4d4a58ff7e94"),
|
|
("5.2.3", "0493c414d4db1af8e1eb30a651d9512044644244488ebb13478c2138a7612998"),
|
|
("5.2.1", "465ca9fa16869cd89dab8c2d66d9b9e3c14f744bbedaa1d215b0746d77a500ba"),
|
|
("5.2.0", "37f5fce04348183bce2ece8bac1117f6ef7e710ca68371ff82ab08e93368bafb"),
|
|
("5.1.3", "ddee63cdc6515c90bab89572b13e1627b145916cb8ede075ef8446cbb83f0a48"),
|
|
("5.1.0", "f4f265604b534795a275af902b2c814f416434d9c9e16db81b3ed5d062187dfa"),
|
|
("5.0.2", "34decd84652268dde865f38e66f8fb4750a08c2457fea52ad962bced82a03e5e"),
|
|
("5.0.0", "6b72faf8819628a5c109b2ade515ab9009606d10f11316f0d7e4c4c998d7f724"),
|
|
("4.5.2", "6581916a3303a31f76454f12f86e020fb5e5c019f3dbb0780436a8f73792c4d1"),
|
|
("4.5.0", "ca8d6305ff0e620d9cb69ff7ac3898917db9e9b6996a7320244b48ab6511dd8e"),
|
|
]:
|
|
resource(
|
|
name="rocclr",
|
|
url="https://github.com/ROCm-Developer-Tools/ROCclr/archive/rocm-{0}.tar.gz".format(
|
|
d_version
|
|
),
|
|
sha256=d_shasum,
|
|
expand=True,
|
|
destination="",
|
|
placement="rocclr",
|
|
when="@{0}".format(d_version),
|
|
)
|
|
# Patch to set package installation path for OpenCL.
|
|
patch("0001-fix-build-error-rocm-opencl-5.1.0.patch", when="@5.1.0:5.1")
|
|
|
|
for ver in [
|
|
"3.5.0",
|
|
"3.7.0",
|
|
"3.8.0",
|
|
"3.9.0",
|
|
"3.10.0",
|
|
"4.0.0",
|
|
"4.1.0",
|
|
"4.2.0",
|
|
"4.3.0",
|
|
"4.3.1",
|
|
"master",
|
|
]:
|
|
depends_on("hip-rocclr@" + ver, type="build", when="@" + ver)
|
|
for ver in [
|
|
"3.5.0",
|
|
"3.7.0",
|
|
"3.8.0",
|
|
"3.9.0",
|
|
"3.10.0",
|
|
"4.0.0",
|
|
"4.1.0",
|
|
"4.2.0",
|
|
"4.3.0",
|
|
"4.3.1",
|
|
"4.5.0",
|
|
"4.5.2",
|
|
"5.0.0",
|
|
"5.0.2",
|
|
"5.1.0",
|
|
"5.1.3",
|
|
"5.2.0",
|
|
"5.2.1",
|
|
"5.2.3",
|
|
"5.3.0",
|
|
"5.3.3",
|
|
"5.4.0",
|
|
"5.4.3",
|
|
"5.5.0",
|
|
"5.5.1",
|
|
"5.6.0",
|
|
"5.6.1",
|
|
"master",
|
|
]:
|
|
depends_on("comgr@" + ver, type="build", when="@" + ver)
|
|
depends_on("hsa-rocr-dev@" + ver, type="link", when="@" + ver)
|
|
|
|
for ver in ["5.5.0", "5.5.1", "5.6.0", "5.6.1"]:
|
|
depends_on("rocm-core@" + ver, when="@" + ver)
|
|
|
|
@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 flag_handler(self, name, flags):
|
|
# The includes are messed up in ROCm 3.5.0:
|
|
# ROCM-OpenCL-Runtime uses flat includes
|
|
# and the find_package(ROCclr) bit it
|
|
# commented out. So instead we provide
|
|
# all the includes...
|
|
|
|
if self.spec.satisfies("@:4.3.2") and name in ("cflags", "cxxflags"):
|
|
rocclr = self.spec["hip-rocclr"].prefix
|
|
extra_includes = [
|
|
"include",
|
|
"include/compiler/lib/include",
|
|
"include/elf",
|
|
"compiler/lib",
|
|
"compiler/lib/include",
|
|
"elf/utils/libelf",
|
|
"elf/utils/common",
|
|
]
|
|
|
|
for p in extra_includes:
|
|
flag = "-I {0}".format(join_path(rocclr, p))
|
|
flags.append(flag)
|
|
|
|
return (flags, None, None)
|
|
|
|
def cmake_args(self):
|
|
args = ["-DUSE_COMGR_LIBRARY=yes", "-DBUILD_TESTS=ON"]
|
|
if self.spec.satisfies("@:4.3.0"):
|
|
"-DROCclr_DIR={0}".format(self.spec["hip-rocclr"].prefix),
|
|
"-DLIBROCclr_STATIC_DIR={0}/lib".format
|
|
(self.spec["hip-rocclr"].prefix)
|
|
if "@4.5.0:" in self.spec:
|
|
args.append(self.define("ROCCLR_PATH", self.stage.source_path + "/rocclr"))
|
|
args.append(self.define("AMD_OPENCL_PATH", self.stage.source_path))
|
|
return args
|
|
|
|
def setup_run_environment(self, env):
|
|
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib),
|
|
env.set("OCL_ICD_VENDORS", self.prefix.vendors + "/")
|
|
|
|
@run_after("install")
|
|
def post_install(self):
|
|
vendor_config_path = join_path(self.prefix + "/vendors")
|
|
mkdirp(vendor_config_path)
|
|
|
|
config_file_name = "amdocl64_30800.icd"
|
|
with open(join_path(vendor_config_path, config_file_name), "w") as f:
|
|
f.write("libamdocl64.so")
|
|
|
|
test_src_dir = "tests/ocltst"
|
|
|
|
def test(self):
|
|
test_dir = join_path(self.spec["rocm-opencl"].prefix, self.test_src_dir)
|
|
with working_dir(test_dir, create=True):
|
|
os.environ["LD_LIBRARY_PATH"] += os.pathsep + test_dir
|
|
args = ["-m", "liboclruntime.so", "-A", "oclruntime.exclude"]
|
|
self.run_test("ocltst", args)
|
|
args = ["-m", "liboclperf.so", "-A", "oclperf.exclude"]
|
|
self.run_test("ocltst", args)
|