commit:     53da9141ac01271e8abb862025df966e852d68a4
Author:     Benda Xu <heroxbd <AT> gentoo <DOT> org>
AuthorDate: Sat Feb  6 16:15:07 2021 +0000
Commit:     Benda XU <heroxbd <AT> gentoo <DOT> org>
CommitDate: Sat Feb  6 16:19:49 2021 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=53da9141

dev-util/Tensile: move to standard directories.

Let cmake to be able to locate Tensile.

Move source code out of the python site-packages tree.

Reported-by: Yiyang Wu <xgreenlandforwyy <AT> gmail.com>, Alexey Chernov
Closes: https://bugs.gentoo.org/768474
Package-Manager: Portage-3.0.12, Repoman-3.0.1
Signed-off-by: Benda Xu <heroxbd <AT> gentoo.org>

 dev-util/Tensile/Tensile-4.0.0-r1.ebuild           | 62 ++++++++++++++++++++++
 dev-util/Tensile/Tensile-4.0.0.ebuild              | 37 +++++++++++--
 dev-util/Tensile/files/Tensile-4.0.0-cmake.patch   | 38 +++++++++++++
 .../files/Tensile-4.0.0-locate-commands.patch      | 62 ++++++++++++++++++++++
 .../files/Tensile-4.0.0-output-currentISA.patch    | 22 ++++++++
 .../files/Tensile-4.0.0-setup.py-cmake.patch       | 13 +++++
 6 files changed, 231 insertions(+), 3 deletions(-)

diff --git a/dev-util/Tensile/Tensile-4.0.0-r1.ebuild 
b/dev-util/Tensile/Tensile-4.0.0-r1.ebuild
new file mode 100644
index 000000000..eda97d225
--- /dev/null
+++ b/dev-util/Tensile/Tensile-4.0.0-r1.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{7,8,9} )
+DISTUTILS_USE_SETUPTOOLS=rdepend
+
+inherit distutils-r1
+
+DESCRIPTION="Stretching GPU performance for GEMMs and tensor contractions"
+HOMEPAGE="https://github.com/ROCmSoftwarePlatform/Tensile";
+SRC_URI="https://github.com/ROCmSoftwarePlatform/Tensile/archive/rocm-${PV}.tar.gz
 -> rocm-Tensile-${PV}.tar.gz"
+
+LICENSE="MIT"
+KEYWORDS="~amd64"
+SLOT="0"
+IUSE=""
+
+RDEPEND="${PYTHON_DEPS}
+       dev-python/pyyaml[${PYTHON_USEDEP}]
+       dev-python/msgpack[${PYTHON_USEDEP}]"
+DEPEND="${RDEPEND}
+       dev-util/hip"
+
+PATCHES=( "${FILESDIR}"/${PN}-4.0.0-cmake.patch
+                 "${FILESDIR}"/${PN}-4.0.0-setup.py-cmake.patch
+                 "${FILESDIR}"/${PN}-4.0.0-locate-commands.patch
+                 "${FILESDIR}"/${PN}-4.0.0-output-currentISA.patch )
+
+S="${WORKDIR}/${PN}-rocm-${PVR}"
+CMAKE_USE_DIR="${WORKDIR}/Source"
+
+src_prepare() {
+       distutils-r1_src_prepare
+
+       mv ${PN}/Source "${WORKDIR}"/ || die
+       sed -e "/ROCM_SMI_ROOT/s,lib,$(get_libdir)," \
+               -i "${WORKDIR}"/Source/cmake/FindROCmSMI.cmake || die
+       sed -r -e "/TENSILE_USE_LLVM/s/ON/OFF/" \
+               -i "${WORKDIR}"/Source/CMakeLists.txt || die
+
+       mv ${PN}/cmake "${T}"/ || die
+
+       sed -e "/HipClangVersion/s/0,0,0/$(ver_rs 1-3 ,)/" \
+               -e 
"/SourcePath/s,os\.path\.join.*$,\"${EPREFIX}/usr/share/${PN}\"," \
+               -i ${PN}/Common.py || die
+
+       sed -e "s|os\.path\.dirname.*$|\"${EPREFIX}/usr/share/Tensile\", 
end='')|" \
+               -i ${PN}/__init__.py || die
+}
+
+src_install() {
+       distutils-r1_src_install
+
+       insinto /usr/$(get_libdir)/cmake/${PN}
+       doins "${T}"/cmake/*.cmake
+
+       insinto /usr/share/${PN}
+       doins -r "${WORKDIR}"/Source/*
+       dosym . /usr/share/${PN}/Source
+}

diff --git a/dev-util/Tensile/Tensile-4.0.0.ebuild 
b/dev-util/Tensile/Tensile-4.0.0.ebuild
index b930c3d69..eda97d225 100644
--- a/dev-util/Tensile/Tensile-4.0.0.ebuild
+++ b/dev-util/Tensile/Tensile-4.0.0.ebuild
@@ -4,6 +4,7 @@
 EAPI=7
 
 PYTHON_COMPAT=( python3_{7,8,9} )
+DISTUTILS_USE_SETUPTOOLS=rdepend
 
 inherit distutils-r1
 
@@ -19,13 +20,43 @@ IUSE=""
 RDEPEND="${PYTHON_DEPS}
        dev-python/pyyaml[${PYTHON_USEDEP}]
        dev-python/msgpack[${PYTHON_USEDEP}]"
-DEPEND="${RDEPEND}"
+DEPEND="${RDEPEND}
+       dev-util/hip"
+
+PATCHES=( "${FILESDIR}"/${PN}-4.0.0-cmake.patch
+                 "${FILESDIR}"/${PN}-4.0.0-setup.py-cmake.patch
+                 "${FILESDIR}"/${PN}-4.0.0-locate-commands.patch
+                 "${FILESDIR}"/${PN}-4.0.0-output-currentISA.patch )
 
 S="${WORKDIR}/${PN}-rocm-${PVR}"
+CMAKE_USE_DIR="${WORKDIR}/Source"
+
+src_prepare() {
+       distutils-r1_src_prepare
+
+       mv ${PN}/Source "${WORKDIR}"/ || die
+       sed -e "/ROCM_SMI_ROOT/s,lib,$(get_libdir)," \
+               -i "${WORKDIR}"/Source/cmake/FindROCmSMI.cmake || die
+       sed -r -e "/TENSILE_USE_LLVM/s/ON/OFF/" \
+               -i "${WORKDIR}"/Source/CMakeLists.txt || die
+
+       mv ${PN}/cmake "${T}"/ || die
+
+       sed -e "/HipClangVersion/s/0,0,0/$(ver_rs 1-3 ,)/" \
+               -e 
"/SourcePath/s,os\.path\.join.*$,\"${EPREFIX}/usr/share/${PN}\"," \
+               -i ${PN}/Common.py || die
+
+       sed -e "s|os\.path\.dirname.*$|\"${EPREFIX}/usr/share/Tensile\", 
end='')|" \
+               -i ${PN}/__init__.py || die
+}
 
 src_install() {
        distutils-r1_src_install
 
-       dodir "/usr/$(get_libdir)/cmake"
-       mv "${ED}/usr/cmake" "${ED}/usr/$(get_libdir)/cmake/${PN}" || die
+       insinto /usr/$(get_libdir)/cmake/${PN}
+       doins "${T}"/cmake/*.cmake
+
+       insinto /usr/share/${PN}
+       doins -r "${WORKDIR}"/Source/*
+       dosym . /usr/share/${PN}/Source
 }

diff --git a/dev-util/Tensile/files/Tensile-4.0.0-cmake.patch 
b/dev-util/Tensile/files/Tensile-4.0.0-cmake.patch
new file mode 100644
index 000000000..0c39f747c
--- /dev/null
+++ b/dev-util/Tensile/files/Tensile-4.0.0-cmake.patch
@@ -0,0 +1,38 @@
+Index: Tensile-rocm-4.0.0/Tensile/cmake/TensileConfig.cmake
+===================================================================
+--- Tensile-rocm-4.0.0.orig/Tensile/cmake/TensileConfig.cmake
++++ Tensile-rocm-4.0.0/Tensile/cmake/TensileConfig.cmake
+@@ -26,7 +26,7 @@ if(NOT DEFINED Tensile_ROOT)
+ get_filename_component(Tensile_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+ get_filename_component(Tensile_PREFIX "${Tensile_PREFIX}" PATH)
+ 
+-execute_process(COMMAND "${Tensile_PREFIX}/bin/TensileGetPath" 
OUTPUT_VARIABLE Tensile_ROOT)
++execute_process(COMMAND "TensileGetPath" OUTPUT_VARIABLE Tensile_ROOT)
+ endif()
+ list(APPEND CMAKE_MODULE_PATH "${Tensile_ROOT}/Source/cmake/")
+ list(APPEND CMAKE_MODULE_PATH "${Tensile_ROOT}/Source/")
+@@ -93,7 +93,7 @@ function(TensileCreateLibraryFiles
+     set(Tensile_MERGE_FILES OFF)
+   endif()
+ 
+-  set(Script "${Tensile_ROOT}/bin/TensileCreateLibrary")
++  set(Script "TensileCreateLibrary")
+   message(STATUS "Tensile script: ${Script}")
+ 
+   set(Options "--new-client-only" "--no-legacy-components")
+Index: Tensile-rocm-4.0.0/Tensile/Source/TensileCreateLibrary.cmake
+===================================================================
+--- Tensile-rocm-4.0.0.orig/Tensile/Source/TensileCreateLibrary.cmake
++++ Tensile-rocm-4.0.0/Tensile/Source/TensileCreateLibrary.cmake
+@@ -52,10 +52,7 @@ function(TensileCreateLibraryCmake
+   message(STATUS "Tensile_ARCHITECTURE        from TensileCreateLibraryCmake 
: ${Tensile_ARCHITECTURE}")
+   message(STATUS "Tensile_LIBRARY_FORMAT      from TensileCreateLibraryCmake 
: ${Tensile_LIBRARY_FORMAT}")
+ 
+-  execute_process(COMMAND chmod 755 ${Tensile_ROOT}/bin/TensileCreateLibrary)
+-  execute_process(COMMAND chmod 755 ${Tensile_ROOT}/bin/Tensile)
+-
+-  set(Tensile_CREATE_COMMAND "${Tensile_ROOT}/bin/TensileCreateLibrary")
++  set(Tensile_CREATE_COMMAND "TensileCreateLibrary")
+ 
+   set(Tensile_SOURCE_PATH "${PROJECT_BINARY_DIR}/Tensile")
+   message(STATUS "Tensile_SOURCE_PATH=${Tensile_SOURCE_PATH}")

diff --git a/dev-util/Tensile/files/Tensile-4.0.0-locate-commands.patch 
b/dev-util/Tensile/files/Tensile-4.0.0-locate-commands.patch
new file mode 100644
index 000000000..78d467349
--- /dev/null
+++ b/dev-util/Tensile/files/Tensile-4.0.0-locate-commands.patch
@@ -0,0 +1,62 @@
+Index: Tensile-rocm-4.0.0/Tensile/Common.py
+===================================================================
+--- Tensile-rocm-4.0.0.orig/Tensile/Common.py
++++ Tensile-rocm-4.0.0/Tensile/Common.py
+@@ -155,7 +155,7 @@ globalParameters["PrintTensorRef"] = 0
+ globalParameters["PrintIndexAssignments"] = 0      # Print the tensor index 
assignment info
+ globalParameters["PrintTensorRef"] = 0          # Print reference tensor.  
0x1=after init; 0x2=after copy-back; 0x3=both
+ globalParameters["PrintWinnersOnly"] = False      # Only print the solutions 
which become the fastest
+-globalParameters["PrintCodeCommands"] = False  # print the commands used to 
generate the code objects (asm,link,hip-clang, etc)
++globalParameters["PrintCodeCommands"] = True  # print the commands used to 
generate the code objects (asm,link,hip-clang, etc)
+ 
+ # TODO - remove this when NewClient is mainstream
+ globalParameters["OldClientSourceTmp"] = True      # Use an intermediate 
sourceTmp dir to detect file changes and minimize rebuilds on old client
+@@ -1521,14 +1521,14 @@ def assignGlobalParameters( config ):
+       print2(" %24s: %8s (unspecified)" % (key, defaultValue))
+ 
+   # ROCm Agent Enumerator Path
+-  globalParameters["ROCmAgentEnumeratorPath"] = locateExe("/opt/rocm/bin", 
"rocm_agent_enumerator")
++  globalParameters["ROCmAgentEnumeratorPath"] = locateExe("", 
"rocm_agent_enumerator")
+   if "CxxCompiler" in config:
+     globalParameters["CxxCompiler"] = config["CxxCompiler"]
+ 
+   if "TENSILE_ROCM_ASSEMBLER_PATH" in os.environ:
+     globalParameters["AssemblerPath"] = 
os.environ.get("TENSILE_ROCM_ASSEMBLER_PATH")
+   elif globalParameters["AssemblerPath"] is None and 
globalParameters["CxxCompiler"] == "hipcc":
+-    globalParameters["AssemblerPath"] = locateExe("/opt/rocm/llvm/bin", 
"clang++")
++    globalParameters["AssemblerPath"] = locateExe("", "clang++")
+   elif globalParameters["AssemblerPath"] is None and 
globalParameters["CxxCompiler"] == "hcc":
+     globalParameters["AssemblerPath"] = locateExe("/opt/rocm/bin", "hcc")
+ 
+@@ -1536,8 +1536,8 @@ def assignGlobalParameters( config ):
+   if globalParameters["CxxCompiler"] == "hcc":
+     globalParameters["ExtractKernelPath"] = locateExe("/opt/rocm/bin", 
"extractkernel")
+   else:
+-    globalParameters["ExtractKernelPath"] = locateExe("/opt/rocm/hip/bin", 
"extractkernel")
+-    globalParameters["ClangOffloadBundlerPath"] = 
locateExe("/opt/rocm/llvm/bin", "clang-offload-bundler")
++    globalParameters["ExtractKernelPath"] = locateExe("", "extractkernel")
++    globalParameters["ClangOffloadBundlerPath"] = locateExe("", 
"clang-offload-bundler")
+ 
+   if "ROCmAgentEnumeratorPath" in config:
+     globalParameters["ROCmAgentEnumeratorPath"] = 
config["ROCmAgentEnumeratorPath"]
+@@ -1579,20 +1579,6 @@ def assignGlobalParameters( config ):
+   # Due to platform.linux_distribution() being deprecated, just try to run 
dpkg regardless.
+   # The alternative would be to install the `distro` package.
+   # See 
https://docs.python.org/3.7/library/platform.html#platform.linux_distribution
+-  try:
+-    if globalParameters["CxxCompiler"] == "hipcc":
+-      output = subprocess.run(["dpkg", "-l", "hip-rocclr"], check=True, 
stdout=subprocess.PIPE).stdout.decode()
+-    elif globalParameters["CxxCompiler"] == "hcc":
+-      output = subprocess.run(["dpkg", "-l", "hcc"], check=True, 
stdout=subprocess.PIPE).stdout.decode()
+-
+-    for line in output.split('\n'):
+-      if 'hipcc' in line:
+-        globalParameters['HipClangVersion'] = line.split()[2]
+-      elif 'hcc' in line:
+-        globalParameters['HccVersion'] = line.split()[2]
+-
+-  except (subprocess.CalledProcessError, OSError) as e:
+-      printWarning("Error: {} looking for package {}: {}".format('dpkg', 
'hip-rocclr', e))
+ 
+   for key in config:
+     value = config[key]

diff --git a/dev-util/Tensile/files/Tensile-4.0.0-output-currentISA.patch 
b/dev-util/Tensile/files/Tensile-4.0.0-output-currentISA.patch
new file mode 100644
index 000000000..a00f9fdca
--- /dev/null
+++ b/dev-util/Tensile/files/Tensile-4.0.0-output-currentISA.patch
@@ -0,0 +1,22 @@
+Index: Tensile-rocm-4.0.0/Tensile/TensileCreateLibrary.py
+===================================================================
+--- Tensile-rocm-4.0.0.orig/Tensile/TensileCreateLibrary.py
++++ Tensile-rocm-4.0.0/Tensile/TensileCreateLibrary.py
+@@ -132,7 +132,7 @@ def buildSourceCodeObjectFile(CxxCompile
+         return globalParameters["AsmCaps"][arch]["SupportedISA"] and \
+                globalParameters["AsmCaps"][arch]["SupportedSource"]
+ 
+-    archs = ['gfx'+''.join(map(str,arch)) for arch in 
globalParameters['SupportedISA'] \
++    archs = ['gfx'+''.join(map(str,arch)) for arch in 
[globalParameters['CurrentISA']] \
+              if isSupported(arch)]
+ 
+     archFlags = ['--amdgpu-target=' + arch for arch in archs]
+@@ -1004,7 +1004,7 @@ def buildObjectFileNames(solutionWriter,
+   kernelHelperOjbNmaes = [ko.getKernelName() for ko in kernelHelperOjbs]
+ 
+   # Source based kernels are built for all supported architectures
+-  sourceArchs = ['gfx'+''.join(map(str,arch)) for arch in 
globalParameters['SupportedISA'] \
++  sourceArchs = ['gfx'+''.join(map(str,arch)) for arch in 
[globalParameters['CurrentISA']] \
+              if isSupported(arch)]
+ 
+   # Asm based kernels target the configured ISA

diff --git a/dev-util/Tensile/files/Tensile-4.0.0-setup.py-cmake.patch 
b/dev-util/Tensile/files/Tensile-4.0.0-setup.py-cmake.patch
new file mode 100644
index 000000000..e020842b2
--- /dev/null
+++ b/dev-util/Tensile/files/Tensile-4.0.0-setup.py-cmake.patch
@@ -0,0 +1,13 @@
+Index: Tensile-rocm-4.0.0/setup.py
+===================================================================
+--- Tensile-rocm-4.0.0.orig/setup.py
++++ Tensile-rocm-4.0.0/setup.py
+@@ -30,8 +30,6 @@ setup(
+   install_requires=readRequirementsFromTxt(),
+   python_requires='>=3.5',
+   packages=["Tensile"],
+-  package_data={ "Tensile": ["Tensile/cmake/*"] },
+-  data_files=[ ("cmake", ["Tensile/cmake/TensileConfig.cmake", 
"Tensile/cmake/TensileConfigVersion.cmake"]) ],
+   include_package_data=True,
+   entry_points={"console_scripts": [
+     # user runs a benchmark

Reply via email to