# 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 * class MiopenTensile(CMakePackage): """MIOpenTensile provides host-callable interfaces to Tensile library. MIOpenTensile supports one programming model: HIP""" homepage = "https://github.com/ROCmSoftwarePlatform/MIOpenTensile" git = "https://github.com/ROCmSoftwarePlatform/MIOpenTensile.git" url = "https://github.com/ROCmSoftwarePlatform/MIOpentensile/archive/rocm-5.0.0.tar.gz" tags = ["rocm"] maintainers("srekolam") libraries = ["libMIOpenTensile"] version("5.1.0", sha256="f1ae57bd4df8c154357b3f17caf0cfd5f80ba16ffff67bf6219a56f1eb5f897d") version( "5.0.2", sha256="7b85a6a37d0905b0a3baa8361fd71a5a32ad90f3a562fd5e1af7e2ba68099fa6", deprecated=True, ) version( "5.0.0", sha256="276ada52e2e8431851296a60df538e0171f8a1c4e9894de8954ffa9306cda2d8", deprecated=True, ) version( "4.5.2", sha256="eae14b20aec5ad57815c85d0571b7aecc3704696147f3cdbe34287e88da0c9e9", deprecated=True, ) version( "4.5.0", sha256="5f181f536040c0612bf889600f75951e7ec031ae5c4cb9c2c44f6ac3b15b004b", deprecated=True, ) tensile_architecture = ("all", "gfx906", "gfx908", "gfx803", "gfx900") variant( "tensile_architecture", default="all", description="AMD GPU architecture", values=tensile_architecture, multi=True, ) variant( "build_type", default="Release", values=("Release", "Debug", "RelWithDebInfo"), description="CMake build type", ) patch("0002-Improve-compilation-by-using-local-tensile-path.patch", when="@4.5.0:") depends_on("cmake@3.5:", type="build") depends_on("msgpack-c@3:") depends_on("python@3.6:", type="build") depends_on("py-virtualenv", type="build") depends_on("perl-file-which", type="build") depends_on("py-pyyaml", type="build") depends_on("py-wheel", type="build") depends_on("py-msgpack", type="build") depends_on("py-pip", type="build") resource( name="Tensile", git="https://github.com/ROCmSoftwarePlatform/Tensile.git", commit="9cbabb07f81e932b9c98bf5ae48fbd7fcef615cf", when="@4.5.0:", ) for ver in ["4.5.0", "4.5.2", "5.0.0", "5.0.2", "5.1.0"]: depends_on("rocm-cmake@%s:" % ver, type="build", when="@" + ver) depends_on("hip@" + ver, when="@" + ver) depends_on("llvm-amdgpu@" + ver, when="@" + ver) depends_on("rocminfo@" + ver, when="@" + ver) def setup_build_environment(self, env): env.set("CXX", self.spec["hip"].hipcc) @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): arch = self.spec.variants["tensile_architecture"].value tensile_path = join_path(self.stage.source_path, "Tensile") args = [ self.define("TENSILE_USE_MSGPACK", "ON"), self.define("COMPILER", "hipcc"), self.define("TENSILE_USE_LLVM", "OFF"), self.define("CODE_OBJECT_VERSION", "V3"), self.define("TENSILE_LIBRARY_FORMAT", "msgpack"), self.define("MIOPEN_TENSILE_SRC", "asm_full"), self.define("Tensile_TEST_LOCAL_PATH", tensile_path), ] args.append(self.define("Tensile_ARCHITECTURE", arch)) return args