summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/totalview/package.py
blob: 70c64de321efb32e7078063f88c08124b6d5b2c1 (plain) (blame)
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()