summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/pmemkv/package.py
blob: 2d140f31af036d23c0e03eff9a4013ea52e71ef8 (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
# 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 import *


class Pmemkv(CMakePackage):
    """pmemkv is a local/embedded key-value datastore,
    optimized for persistent memory.
    """

    homepage = "https://pmem.io/pmemkv/"
    url      = "https://github.com/pmem/pmemkv/archive/1.4.tar.gz"
    git      = "https://github.com/pmem/pmemkv.git"

    version('master',    branch='master')
    version('1.4',       sha256='6630917e0203eff7a520071c858baa7b7e108088da2fe8c4b31ec5f8c661fbe9')
    version('1.3',       sha256='f1b946ef3545bcc2751fa2e4faab0538cd3072b66d4c4575f21712e0cc53bae8')
    version('1.2',       sha256='22de74392e0a6eea5aa1955ed2d59462bf45ec69a01eb1cf2115e39e7bdc4754')
    version('1.1',       sha256='c4ca07c1fecad39b5dbf197673f033f27d74c9f9987f036f6eaf5c7f23a342f3')
    version('1.0.3',     sha256='cae393a01ba69364271c5894046bf2c611f677ac88012f2473fadf6fcd20ff29')
    version('1.0.2',     sha256='a0cbbb60c0342d6fd0b73d2cee1a1423c6a894b8d21daf669016809961fe23b8')

    depends_on('libpmemobj-cpp@develop', when='@master')
    depends_on('libpmemobj-cpp@1.12:',   when='@1.4:')
    depends_on('libpmemobj-cpp@1.11:',   when='@1.3:')
    depends_on('libpmemobj-cpp@1.10:',   when='@1.2:')
    depends_on('libpmemobj-cpp@1.9:',    when='@1.1:')
    depends_on('libpmemobj-cpp@1.8:',    when='@1.0.2:')

    depends_on('pmdk@master', when='@master')
    depends_on('pmdk@master', when='@1.4:')
    depends_on('pmdk@1.8:',   when='@1.1:')
    depends_on('pmdk@1.7:',   when='@1.0.2:')

    depends_on('memkind@1.8.0:')

    depends_on('rapidjson')

    # tbb is one of virtual dependencies.
    # Please refer https://spack.readthedocs.io/en/latest/packaging_guide.html#virtual-dependencies
    # we can use any packages which provides 'tbb'
    # For example, 'intel-tbb' or 'intel-oneapi-tbb'
    # Default is 'intel-tbb' (etc/spack/defaults/packages.yaml)
    depends_on('tbb')

    depends_on('cmake@3.3:')

    variant('cmap',  default=True,  description='enable cmap engine.')
    variant('vcmap', default=True,  description='enable vcmap engine.')
    variant('vsmap', default=True,  description='enable vsmap engine.')
    variant('csmap', default=False, description='enable experimental csmap engine.')
    variant('stree', default=True,  description='enable experimental stree engine.')
    variant('tree3', default=False, description='enable experimental tree3 engine.')
    variant('radix', default=False, description='enable experimental radix engine.')
    variant('robinhood',  default=False, description='enable experimental robinhood engine.')
    variant('dram_vcmap', default=False, description='enable testing dram_vcmap engine.')

    def cmake_args(self):
        spec = self.spec

        args = [
            self.define('BUILD_DOC', False),
            self.define('BUILD_EXAMPLES', False),
            self.define('BUILD_TESTS', False),
            self.define('BUILD_JSON_CONFIG', True),
            self.define('TESTS_LONG', False),
            self.define('TESTS_USE_FORCED_PMEM', False),
            self.define('TESTS_USE_VALGRIND', False),
            self.define('TESTS_PMEMOBJ_DRD_HELGRIND', False),
            self.define('TESTS_JSON', False),
            self.define_from_variant('ENGINE_CMAP', 'cmap'),
            self.define_from_variant('ENGINE_VCMAP', 'vcmap'),
            self.define_from_variant('ENGINE_VSMAP', 'vsmap'),
            self.define_from_variant('ENGINE_CSMAP', 'csmap'),
            self.define_from_variant('ENGINE_STREE', 'stree'),
            self.define_from_variant('ENGINE_TREE3', 'tree3'),
            self.define_from_variant('ENGINE_RADIX', 'radix'),
            self.define_from_variant('ENGINE_ROBINHOOD', 'robinhood'),
            self.define_from_variant('ENGINE_DRAM_VCMAP', 'dram_vcmap'),
        ]

        if ('+csmap' in spec) or ('+robinhood' in spec):
            args.append(self.define('CXX_STANDARD', 14))

        return args