summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/alpaka/package.py
blob: 7a4b22c42065c88243570b9c9e07bdd9ca19e0b7 (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
# Copyright 2013-2024 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.package import *


class Alpaka(CMakePackage, CudaPackage):
    """Abstraction Library for Parallel Kernel Acceleration."""

    homepage = "https://alpaka.readthedocs.io"
    url = "https://github.com/alpaka-group/alpaka/archive/refs/tags/0.6.0.tar.gz"
    git = "https://github.com/alpaka-group/alpaka.git"

    maintainers("vvolkl")

    license("MPL-2.0-no-copyleft-exception")

    version("develop", branch="develop")
    version("0.8.0", sha256="e01bc377a7657d9a3e0c5f8d3f83dffbd7d0b830283c59efcbc1fb98cf88de43")
    version("0.7.0", sha256="4b61119a7b3b073f281ba15b63430db98b77dbd9420bc290a114f80121fbdd97")
    version("0.6.0", sha256="7424ecaee3af15e587b327e983998410fa379c61d987bfe923c7e95d65db11a3")
    version("0.5.0", sha256="0ba08ea19961dd986160219ba00d6162fe7758980d88a606eff6494d7b3a6cd1")
    version("0.4.0", sha256="ad7905b13c22abcee4344ba225a65078e3f452ad45a9eda907e7d27c08315e46")

    variant(
        "backend",
        multi=True,
        values=(
            "serial",
            "threads",
            "fiber",
            "tbb",
            "omp2_gridblock",
            "omp2_blockthread",
            "omp5",
            "oacc",
            "cuda",
            "cuda_only",
            "hip",
            "hip_only",
        ),
        description="Backends to enable",
        default="serial",
    )

    variant("examples", default=False, description="Build alpaka examples")

    depends_on("boost")
    depends_on("boost+fiber", when="backend=fiber")
    depends_on("cmake@3.18:", when="@0.7.0:")

    # make sure no other backend is enabled if using cuda_only or hip_only
    for v in (
        "serial",
        "threads",
        "fiber",
        "tbb",
        "oacc",
        "omp2_gridblock",
        "omp2_blockthread",
        "omp5",
        "cuda",
        "hip",
    ):
        conflicts("backend=cuda_only,%s" % v)
        conflicts("backend=hip_only,%s" % v)
    conflicts("backend=cuda_only,hip_only")
    for v in ("omp2_blockthread", "omp2_blockthread", "omp5"):
        conflicts("backend=oacc,%s" % v)

    # todo: add conflict between cuda 11.3 and gcc 10.3.0
    # see https://github.com/alpaka-group/alpaka/issues/1297

    def cmake_args(self):
        spec = self.spec
        args = []
        if "backend=serial" in spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLE", True))
        if "backend=threads" in self.spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_SEQ_T_THREADS_ENABLE", True))
        if "backend=fiber" in spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_SEQ_T_FIBERS_ENABLE", True))
        if "backend=tbb" in spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLE", True))
        if "backend=omp2_gridblock" in spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLE", True))
        if "backend=omp2_blockthread" in spec:
            args.append(self.define("ALPAKA_ACC_CPU_B_SEQ_T_OMP2_ENABLE", True))
        if "backend=omp5" in spec:
            args.append(self.define("ALPAKA_ACC_ANY_BT_OMP5_ENABLE", True))
        if "backend=oacc" in spec:
            args.append(self.define("ALPAKA_ACC_ANY_BT_OACC_ENABLE", True))
        if "backend=cuda" in spec:
            args.append(self.define("ALPAKA_ACC_GPU_CUDA_ENABLE", True))
        if "backend=cuda_only" in spec:
            args.append(self.define("ALPAKA_ACC_GPU_CUDA_ENABLE", True))
            args.append(self.define("ALPAKA_ACC_GPU_CUDA_ONLY_MODE", True))
        if "backend=hip" in spec:
            args.append(self.define("ALPAKA_ACC_GPU_HIP_ENABLE", True))
        if "backend=hip_only" in spec:
            args.append(self.define("ALPAKA_ACC_GPU_HIP_ENABLE", True))
            args.append(self.define("ALPAKA_ACC_GPU_HIP_ONLY_MODE", True))

        args.append(self.define_from_variant("alpaka_BUILD_EXAMPLES", "examples"))
        # need to define, as it is explicitly declared as an option by alpaka:
        args.append(self.define("BUILD_TESTING", self.run_tests))
        return args