166 lines
7.1 KiB
Python
166 lines
7.1 KiB
Python
# Copyright 2013-2024 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 re
|
|
|
|
from spack.package import *
|
|
from spack.pkg.builtin.boost import Boost
|
|
|
|
|
|
class MiopenHip(CMakePackage):
|
|
"""AMD's library for high performance machine learning primitives."""
|
|
|
|
homepage = "https://github.com/ROCm/MIOpen"
|
|
git = "https://github.com/ROCm/MIOpen.git"
|
|
url = "https://github.com/ROCm/MIOpen/archive/rocm-6.0.2.tar.gz"
|
|
tags = ["rocm"]
|
|
|
|
maintainers("srekolam", "renjithravindrankannath")
|
|
libraries = ["libMIOpen"]
|
|
|
|
license("MIT")
|
|
version("6.1.0", sha256="3b373117eaeaf618aab9b39bb22e9950fd49bd0e264c8587b0c51fa348afe0d1")
|
|
version("6.0.2", sha256="e6f671bd6af59f7470f42cda2ff9e77441d8f6c2105772bbf855d31da1085ffa")
|
|
version("6.0.0", sha256="a0718a48353be30ff98118ade511f0c1b454e394d8f934aefe7dd6946562b2e9")
|
|
version("5.7.1", sha256="912a658fe21ce6f1982b0f2ff251c3f7bb618f2e7e9876d983bcb54e3cd7129e")
|
|
version("5.7.0", sha256="5cd0b62254469e1c246d5890d2b78f8aedcf42cf8a327eabc1a391b83bcd14e1")
|
|
version("5.6.1", sha256="ff627d68ed9e52433a3c808b5d3ff179a398b77ce81b00cfea7b2c4da5162c6c")
|
|
version("5.6.0", sha256="d620ddab5b488bdf81242654fefa337c6b71dc410c2ff26d30a4ee86a8d22d11")
|
|
version("5.5.1", sha256="2cd75071b8ee876c69a94f028b6c8a9346d6d2fde7d4b64e6d635f3b6c994262")
|
|
version("5.5.0", sha256="791087242551669e546225e36123c21663f0dad14dbcfd6d0ce0e7bad0ab0de1")
|
|
version("5.4.3", sha256="37ffe2ed3d7942da8ea2f6bdb85c7a2f58e3ccd31767db158a322769d3604efd")
|
|
version("5.4.0", sha256="b4153791f9eeee4cbc5534bc6ad8b32c0947bcd38e08b77ebe144065a4fa5456")
|
|
version("5.3.3", sha256="7efc98215d23a2caaf212378c37e9a6484f54a4ed3e9660719286e4f287d3715")
|
|
version("5.3.0", sha256="c5819f593d71beeda2eb24b89182912240cc40f83b2b8f9de695a8e230aa4ea6")
|
|
with default_args(deprecated=True):
|
|
version("5.2.3", sha256="28747847446955b3bab24f7fc65c1a6b863a12f12ad3a35e0312072482d38122")
|
|
version("5.2.1", sha256="0977a8876d41bbd2fa268341c93892f35878d7efc1711194ad87582f877ff500")
|
|
version("5.2.0", sha256="5fda69426e81df9f8fb6658e579176b9c4fcce3516fc8488d3cfd2b6f6f2b3b4")
|
|
version("5.1.3", sha256="510461f5c5bdbcf8dc889099d1e5960b9f84bd845a9fc9154588a9898c701c1d")
|
|
version("5.1.0", sha256="bb50201334d68addf153b84b88ab803027c4913d71bdbda6f5ccde3f672f6fdd")
|
|
|
|
depends_on("cmake@3.5:", type="build")
|
|
depends_on("pkgconfig", type="build")
|
|
|
|
# TODO: replace this with an explicit list of components of Boost,
|
|
# for instance depends_on('boost +filesystem')
|
|
# See https://github.com/spack/spack/pull/22303 for reference
|
|
depends_on(Boost.with_default_variants)
|
|
depends_on("boost@1.67.0:1.73.0")
|
|
depends_on("bzip2")
|
|
depends_on("sqlite")
|
|
depends_on("half")
|
|
depends_on("zlib-api")
|
|
|
|
patch("miopen-hip-include-nlohmann-include-directory.patch", when="@5.4.0:5.7")
|
|
patch("0002-add-include-dir-miopen-hip-6.0.0.patch", when="@6.0")
|
|
patch("0002-add-include-dir-miopen-hip-6.1.0.patch", when="@6.1")
|
|
# https://github.com/ROCm/MIOpen/pull/2276/commits/f60aa1ff89f8fb596b4a6a4c70aa7d557803db87.patch
|
|
patch(
|
|
"f60aa1ff89f8fb596b4a6a4c70aa7d557803db87.patch",
|
|
when="@5.7",
|
|
)
|
|
|
|
for ver in [
|
|
"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",
|
|
"5.7.0",
|
|
"5.7.1",
|
|
"6.0.0",
|
|
"6.0.2",
|
|
"6.1.0",
|
|
]:
|
|
depends_on(f"rocm-cmake@{ver}:", type="build", when=f"@{ver}")
|
|
depends_on(f"hip@{ver}", when=f"@{ver}")
|
|
depends_on(f"rocm-clang-ocl@{ver}", when=f"@{ver}")
|
|
depends_on(f"rocblas@{ver}", when=f"@{ver}")
|
|
|
|
for ver in ["5.1.0", "5.1.3", "5.2.0", "5.2.1", "5.2.3", "5.3.0", "5.3.3"]:
|
|
depends_on(f"mlirmiopen@{ver}", when=f"@{ver}")
|
|
|
|
for ver in ["5.5.1", "5.6.0", "5.6.1", "5.7.0", "5.7.1", "6.0.0", "6.0.2", "6.1.0"]:
|
|
depends_on("nlohmann-json", type="link")
|
|
depends_on(f"composable-kernel@{ver}", when=f"@{ver}")
|
|
for ver in ["5.4.0", "5.4.3", "5.5.0"]:
|
|
depends_on("nlohmann-json", type="link")
|
|
depends_on(f"rocmlir@{ver}", when=f"@{ver}")
|
|
for ver in ["6.0.0", "6.0.2", "6.1.0"]:
|
|
depends_on("roctracer-dev@" + ver, when="@" + ver)
|
|
for ver in ["6.1.0"]:
|
|
depends_on("googletest")
|
|
|
|
def setup_build_environment(self, env):
|
|
lib_dir = self.spec["zlib-api"].libs.directories[0]
|
|
env.prepend_path("LIBRARY_PATH", lib_dir)
|
|
|
|
def get_bitcode_dir(self):
|
|
return self.spec["llvm-amdgpu"].prefix.amdgcn.bitcode
|
|
|
|
@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 cmake_args(self):
|
|
spec = self.spec
|
|
|
|
args = [
|
|
self.define("MIOPEN_BACKEND", "HIP"),
|
|
self.define(
|
|
"CMAKE_CXX_COMPILER", "{0}/bin/clang++".format(spec["llvm-amdgpu"].prefix)
|
|
),
|
|
self.define(
|
|
"MIOPEN_AMDGCN_ASSEMBLER", "{0}/bin/clang".format(spec["llvm-amdgpu"].prefix)
|
|
),
|
|
self.define("Boost_USE_STATIC_LIBS", "Off"),
|
|
self.define("HIP_PREFIX_PATH", spec["hip"].prefix),
|
|
self.define("DEVICELIBS_PREFIX_PATH", self.get_bitcode_dir()),
|
|
]
|
|
if self.spec.satisfies("@5.1.0:5.3"):
|
|
mlir_inc = spec["mlirmiopen"].prefix.include
|
|
args.append(self.define("CMAKE_CXX_FLAGS", "-I{0}".format(mlir_inc)))
|
|
if self.spec.satisfies("@5.4.0:"):
|
|
args.append(
|
|
"-DNLOHMANN_JSON_INCLUDE={0}".format(self.spec["nlohmann-json"].prefix.include)
|
|
)
|
|
if self.spec.satisfies("@5.4.0:5.5.0"):
|
|
args.append(self.define("MIOPEN_USE_COMPOSABLEKERNEL", "OFF"))
|
|
args.append(self.define("MIOPEN_USE_MLIR", "ON"))
|
|
args.append(self.define("MIOPEN_ENABLE_AI_KERNEL_TUNING", "OFF"))
|
|
if self.spec.satisfies("@5.5.1:"):
|
|
args.append(self.define("MIOPEN_USE_COMPOSABLEKERNEL", "ON"))
|
|
args.append(self.define("MIOPEN_ENABLE_AI_KERNEL_TUNING", "OFF"))
|
|
args.append(self.define("MIOPEN_USE_MLIR", "OFF"))
|
|
if self.spec.satisfies("@5.7.0:"):
|
|
args.append(self.define("MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK", "OFF"))
|
|
args.append(
|
|
"-DNLOHMANN_JSON_INCLUDE={0}".format(self.spec["nlohmann-json"].prefix.include)
|
|
)
|
|
if self.spec.satisfies("@6.0.0:"):
|
|
args.append(
|
|
"-DROCTRACER_INCLUDE_DIR={0}".format(self.spec["roctracer-dev"].prefix.include)
|
|
)
|
|
args.append("-DROCTRACER_LIB_DIR={0}".format(self.spec["roctracer-dev"].prefix.lib))
|
|
if self.spec.satisfies("@6.1:"):
|
|
args.append("-DSQLITE_INCLUDE_DIR={0}".format(self.spec["sqlite"].prefix.include))
|
|
return args
|