summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/axl/package.py
blob: 9d5eaa3dbab3ef31b856214b35b1e50c761c2de4 (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
# 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)

from spack.error import SpackError
from spack.package import *


def async_api_validator(pkg_name, variant_name, values):
    if 'none' in values and len(values) != 1:
        raise SpackError("The value 'none' is not usable"
                         " with other async_api values.")
    if 'intel_cppr' in values and 'cray_dw' in values:
        raise SpackError("The 'intel_cppr' and 'cray_dw' asynchronous"
                         " APIs are incompatible.")


class Axl(CMakePackage):
    """Asynchronous transfer library"""

    homepage = "https://github.com/ecp-veloc/AXL"
    url      = "https://github.com/ecp-veloc/AXL/archive/v0.4.0.tar.gz"
    git      = "https://github.com/ecp-veloc/axl.git"
    tags = ['ecp']

    maintainers = ['CamStan', 'gonsie']

    version('main',  branch='main')
    version('0.5.0', sha256='9f3bbb4de563896551bdb68e889ba93ea1984586961ad8c627ed766bff020acf')
    version('0.4.0', sha256='0530142629d77406a00643be32492760c2cf12d1b56c6b6416791c8ff5298db2')
    version('0.3.0', sha256='737d616b669109805f7aed1858baac36c97bf0016e1115b5c56ded05d792613e')
    version('0.2.0', sha256='d04a445f102b438fe96a1ff3429790b0c035f0d23c2797bb5601a00b582a71fc', deprecated=True)
    version('0.1.1', sha256='36edac007938fe47d979679414c5c27938944d32536e2e149f642916c5c08eaa', deprecated=True)

    depends_on('kvtree')
    depends_on('zlib', type='link')

    variant('async_api', default='daemon',
            description='Set of async transfer APIs to enable',
            values=['cray_dw', 'intel_cppr', 'daemon', 'none'], multi=True,
            validator=async_api_validator)

    variant('bbapi', default=True, description='Enable IBM BBAPI support')

    variant('bbapi_fallback', default=False,
            description='Using BBAPI, if source or destination don\'t support \
            file extents then fallback to pthreads')

    variant('dw', default=False, description='Enable Cray DataWarp support')

    variant('shared', default=True, description='Build with shared libraries')
    depends_on('kvtree+shared', when='@0.5: +shared')
    depends_on('kvtree~shared', when='@0.5: ~shared')

    def cmake_args(self):
        spec = self.spec
        args = []
        args.append(self.define('WITH_KVTREE_PREFIX', spec['kvtree'].prefix))

        if spec.satisfies('@:0.3.0'):
            apis = list(spec.variants['async_api'].value)
            if 'daemon' in apis:
                args.append('-DAXL_ASYNC_DAEMON=ON')
                apis.remove('daemon')

            for api in apis:
                args.append('-DAXL_ASYNC_API={0}'.format(api.upper()))

        if spec.satisfies('@0.4.0:'):
            args.append(self.define_from_variant(
                'ENABLE_BBAPI_FALLBACK', 'bbapi_fallback'
            ))

        if spec.satisfies('@0.5.0:'):
            args.append(self.define_from_variant('ENABLE_IBM_BBAPI', 'bbapi'))
            args.append(self.define_from_variant('ENABLE_CRAY_DW', 'dw'))
            args.append(self.define_from_variant('BUILD_SHARED_LIBS', 'shared'))
        else:
            if spec.satisfies('platform=cray'):
                args.append(self.define('AXL_LINK_STATIC', True))

        return args