1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# Copyright 2013-2022 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
from spack.package import *
class Totalview(Package):
"""Totalview parallel debugger.
Source must be made available to Spack
externally, either by having the tarballs in the current working directory
or having the tarballs in a Spack mirror.
The documentation tarball will
be used as the primary source and the architecture appropriate tarball will
be downloaded as a resource."""
homepage = "https://www.roguewave.com/products-services/totalview"
maintainers = ["dshrader"]
manual_download = True
license_required = True
license_comment = "#"
license_files = ["licenses/license.dat"]
license_vars = ["TV_LICENSE_FILE"]
# As the install of Totalview is via multiple tarballs, the base install
# will be the documentation. The architecture-specific tarballs are added
# as resources dependent on the specific architecture used.
version("2021.1.16", sha256="4c51c7b6ab6b6afa7635ba2e9fc3b0ef833806f775a0ad0da26b13d6320625dd")
version("2019.2.18", sha256="09e5c554032af945f8cf147dd548421267e50e906cc9686fb5cd0e8e63fcf650")
# Distributed with Totalview
variant("memoryscape", default=True, description="Install memoryscape")
# Because the actual source tarball is architecture dependent, the main
# download is the documentation tarball and the source is downloaded as a
# resource once the target architecture is known.
resource(
name="x86_64",
url="totalview_{0}_linux_x86-64.tar".format(version),
destination=".",
sha256="3b0ab078deff3654ddc912a004d256f1376978aa1c4dd5a8a41fa9fbb474d07c",
when="@2019.2.18 target=x86_64:",
)
resource(
name="aarch64",
url="totalview_{0}_linux_arm64.tar".format(version),
destination=".",
sha256="3bbda1aa7c06ce82874c1517bf949c9f6cbd0f4c9ebe283d21f0643f6e724b6b",
when="@2019.2.18 target=aarch64:",
)
resource(
name="ppcle",
url="totalview_{0}_linux_powerle.tar".format(version),
destination=".",
sha256="c0e4dbf145312fc7143ad0b7e9474e653933581990e0b9d07237c73dbdff8365",
when="@2019.2.18 target=ppc64le:",
)
resource(
name="x86_64",
url="totalview_{0}_linux_x86-64.tar".format(version),
destination=".",
sha256="129e991d3ce4df9f9f04adbf79b62d3c2706d7732ec305f3d3c97a6b4d1f5a13",
when="@2021.1.16 target=x86_64:",
)
resource(
name="aarch64",
url="totalview_{0}_linux_arm64.tar".format(version),
destination=".",
sha256="d559c0e090b2a6b935986324a2f1b20c02c5a2991432b8305952c120db41cdb5",
when="@2021.1.16 target=aarch64:",
)
resource(
name="ppcle",
url="totalview_{0}_linux_powerle.tar".format(version),
destination=".",
sha256="88c6bf82bd0807f826e2920967b288ac40e9bc56554e55966dfea793bc9c2b0a",
when="@2021.1.16 target=ppcle:",
)
def url_for_version(self, version):
return "file://{0}/totalview.{1}-doc.tar".format(os.getcwd(), version)
def setup_run_environment(self, env):
env.prepend_path(
"PATH",
join_path(self.prefix, "toolworks", "totalview.{0}".format(self.version), "bin"),
)
env.prepend_path(
"TVROOT", join_path(self.prefix, "toolworks", "totalview.{0}".format(self.version))
)
env.prepend_path("TVDSVRLAUNCHCMD", "ssh")
def install(self, spec, prefix):
# Assemble install line
install_cmd = which("./Install")
arg_list = ["-agree", "-nosymlink", "-directory", "{0}".format(prefix)]
# Platform specification.
if spec.target.family == "x86_64":
arg_list.extend(["-platform", "linux-x86-64"])
elif spec.target.family == "x86":
arg_list.extend(["-platform", "linux-x86"])
elif spec.target.family == "aarch64":
arg_list.extend(["-platform", "linux-arm64"])
elif spec.target.family == "ppc64le":
arg_list.extend(["-platform", "linux-powerle"])
elif spec.target.family == "ppc64":
arg_list.extend(["-platform", "linux-power"])
else:
raise InstallError("Architecture {0} not permitted!".format(spec.target.family))
# Docs are the 'base' install used with every architecture.
install_cmd.exe.extend(arg_list)
install_cmd("-install", "doc-pdf")
# Run install script for totalview and memoryscape (optional).
with working_dir("./totalview.{0}".format(self.version)):
install_cmd = which("./Install")
arg_list.extend(["-install", "totalview"])
# If including memoryscape.
if "+memoryscape" in spec:
arg_list.append("memoryscape")
install_cmd.exe.extend(arg_list)
install_cmd()
|