nvidia-nsight-systems: new package (#47355)
Co-authored-by: Scot Halverson <shalverson@nvidia.com>
This commit is contained in:
parent
b4b3320f71
commit
8076134c91
@ -0,0 +1,127 @@
|
||||
# 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 os
|
||||
import platform
|
||||
import re
|
||||
import shutil
|
||||
from glob import glob
|
||||
|
||||
from spack.package import *
|
||||
|
||||
# FIXME Remove hack for polymorphic versions
|
||||
# This package uses a ugly hack to be able to dispatch, given the same
|
||||
# version, to different binary packages based on the platform that is
|
||||
# running spack. See #13827 for context.
|
||||
# If you need to add a new version, please be aware that:
|
||||
# - versions in the following dict are automatically added to the package
|
||||
# - version tuple must be in the form (checksum, url)
|
||||
# - checksum must be sha256
|
||||
# - package key must be in the form '{os}-{arch}' where 'os' is in the
|
||||
# format returned by platform.system() and 'arch' by platform.machine()
|
||||
_versions = {
|
||||
"2024.6.1": {
|
||||
"Linux-aarch64": (
|
||||
"24700c28dfda9f95d4e93de218b86ab1ba0ee8b74cb61c3c581767296159c75c",
|
||||
"https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2024_6/nsight-systems-2024.6.1-2024.6.1.90_3490548-0.aarch64.rpm",
|
||||
),
|
||||
"Linux-x86_64": (
|
||||
"dd4359a47ff3857395c55a0da483b64f5c0c3a1a2e57dd543a512dc3d2cd2674",
|
||||
"https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2024_6/nsight-systems-2024.6.1-2024.6.1.90_3490548-0.x86_64.rpm",
|
||||
),
|
||||
},
|
||||
"2024.1.1": {
|
||||
"Linux-aarch64": (
|
||||
"41dc15ae128ef1de8e582b66bb465ac6bd67b9d20ef77fc70528b735d80fb3ec",
|
||||
"https://developer.download.nvidia.com/devtools/repos/rhel8/arm64/nsight-systems-2024.1.1-2024.1.1.59_3380207-0.aarch64.rpm",
|
||||
),
|
||||
"Linux-ppc64le": (
|
||||
"8c98b511df1747c4c782430504ae6fa4b3fce6fa72623083a828fc0a1e11f1b8",
|
||||
"https://developer.download.nvidia.com/devtools/repos/rhel8/ppc64le/nsight-systems-cli-2024.1.1-2024.1.1.59_3380207-0.ppc64le.rpm",
|
||||
),
|
||||
"Linux-x86_64": (
|
||||
"96f57548e0bd69cb02cd1fe8c70ed4a650636ecb3a5ea5ec490c8049adc2beb5",
|
||||
"https://developer.download.nvidia.com/devtools/repos/rhel8/x86_64/nsight-systems-2024.1.1-2024.1.1.59_3380207-0.x86_64.rpm",
|
||||
),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
class NvidiaNsightSystems(Package):
|
||||
"""NVIDIA Nsight™ Systems is a system-wide performance analysis tool designed
|
||||
to visualize an application’s algorithms, identify the largest opportunities
|
||||
to optimize, and tune to scale efficiently across any quantity or size of CPUs
|
||||
and GPUs, from large servers to the smallest system on a chip"""
|
||||
|
||||
homepage = "https://developer.nvidia.com/nsight-systems"
|
||||
url = "https://developer.download.nvidia.com/devtools/repos/"
|
||||
maintainers("scothalverson")
|
||||
license("NVIDIA Software License Agreement")
|
||||
|
||||
executables = ["^nsys$"]
|
||||
|
||||
# Used to unpack the source RPM archives.
|
||||
depends_on("libarchive programs='bsdtar'", type="build")
|
||||
|
||||
for ver, packages in _versions.items():
|
||||
key = "{0}-{1}".format(platform.system(), platform.machine())
|
||||
pkg = packages.get(key)
|
||||
if pkg:
|
||||
version(ver, sha256=pkg[0], url=pkg[1], expand=False)
|
||||
|
||||
@classmethod
|
||||
def determine_version(cls, exe):
|
||||
output = Executable(exe)("--version", output=str, error=str)
|
||||
# Example output:
|
||||
# NVIDIA Nsight Systems version 2024.1.1.59-241133802077v0
|
||||
# but we only want to match 2024.1.1
|
||||
match = re.search(r"NVIDIA Nsight Systems version ((?:[0-9]+.){2}[0-9])", output)
|
||||
return match.group(1) if match else None
|
||||
|
||||
def install(self, spec, prefix):
|
||||
bsdtar = which("bsdtar")
|
||||
rpm_file = glob(join_path(self.stage.source_path, "nsight-systems*.rpm"))[0]
|
||||
params = ["-x", "-f", rpm_file]
|
||||
ver = prefix.split("/")[-1].split("-")[-2]
|
||||
bsdtar(*params)
|
||||
|
||||
arch = self.spec.target.family
|
||||
if arch == "aarch64":
|
||||
folders = ["documentation", "host-linux-armv8", "target-linux-sbsa-armv8"]
|
||||
elif arch == "ppc64le":
|
||||
folders = ["documentation", "host-linux-ppc64le", "target-linux-ppc64le"]
|
||||
elif arch == "x86_64":
|
||||
folders = ["documentation", "host-linux-x64", "target-linux-x64"]
|
||||
if os.path.exists(join_path("opt", "nvidia", "nsight-systems-cli")):
|
||||
base_path = join_path("opt", "nvidia", "nsight-systems-cli")
|
||||
elif os.path.exists(join_path("opt", "nvidia", "nsight-systems")):
|
||||
base_path = join_path("opt", "nvidia", "nsight-systems")
|
||||
else:
|
||||
raise InstallError("Couldn't determine subdirectories to install.")
|
||||
|
||||
for sd in folders:
|
||||
shutil.copytree(join_path(base_path, ver, sd), join_path(prefix, sd))
|
||||
os.mkdir(join_path(prefix, "bin"))
|
||||
if arch == "aarch64":
|
||||
os.symlink(
|
||||
join_path(prefix, "host-linux-armv8", "nsys-ui"),
|
||||
join_path(prefix, "bin", "nsys-ui"),
|
||||
)
|
||||
os.symlink(
|
||||
join_path(prefix, "target-linux-sbsa-armv8", "nsys"),
|
||||
join_path(prefix, "bin", "nsys"),
|
||||
)
|
||||
elif arch == "ppc64le":
|
||||
# `nsys-ui` is missing in the PowerPC version of the package.
|
||||
os.symlink(
|
||||
join_path(prefix, "target-linux-ppc64le", "nsys"), join_path(prefix, "bin", "nsys")
|
||||
)
|
||||
elif arch == "x86_64":
|
||||
os.symlink(
|
||||
join_path(prefix, "host-linux-x64", "nsys-ui"), join_path(prefix, "bin", "nsys-ui")
|
||||
)
|
||||
os.symlink(
|
||||
join_path(prefix, "target-linux-x64", "nsys"), join_path(prefix, "bin", "nsys")
|
||||
)
|
Loading…
Reference in New Issue
Block a user