summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/totalview/package.py
blob: b985fc094f43bca83bdfa12ed252d62d94235c74 (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
# Copyright 2013-2021 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)

from spack import *

import os


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 = ['nicholas-sly']
    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('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:')

    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()