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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# 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.package import *
# Wrapper around depends_on to propagate dependency variants
def dav_sdk_depends_on(spec, when=None, propagate=None):
# Do the basic depends_on
depends_on(spec, when=when)
# Strip spec string to just the base spec name
# ie. A +c ~b -> A
spec = Spec(spec).name
if "+" in when and len(when.split()) == 1:
when_not = when.replace("+", "~")
# If the package is in the spec tree then it must
# be enabled in the SDK.
conflicts(when_not, "^" + spec)
# Skip if there is nothing to propagate
if not propagate:
return
# Map the propagated variants to the dependency variant
if not type(propagate) is dict:
propagate = dict([(v, v) for v in propagate])
# Determine the base variant
base_variant = ""
if when:
base_variant = when
def is_boolean(variant):
return "=" not in variant
# Propagate variants to dependecy
for v_when, v_then in propagate.items():
if is_boolean(v_when):
depends_on(
"{0} +{1}".format(spec, v_then), when="{0} +{1}".format(base_variant, v_when)
)
depends_on(
"{0} ~{1}".format(spec, v_then), when="{0} ~{1}".format(base_variant, v_when)
)
else:
depends_on("{0} {1}".format(spec, v_then), when="{0} {1}".format(base_variant, v_when))
def exclude_variants(variants, exclude):
return [variant for variant in variants if variant not in exclude]
class EcpDataVisSdk(BundlePackage, CudaPackage, ROCmPackage):
"""ECP Data & Vis SDK"""
homepage = "https://github.com/chuckatkins/ecp-data-viz-sdk"
tags = ["ecp"]
maintainers = ["chuckatkins", "kwryankrattiger"]
version("1.0")
############################################################
# Variants
############################################################
# I/O
variant("adios2", default=False, description="Enable ADIOS2")
variant("darshan", default=False, description="Enable Darshan")
variant("faodel", default=False, description="Enable FAODEL")
variant("hdf5", default=False, description="Enable HDF5")
variant("pnetcdf", default=False, description="Enable PNetCDF")
variant("unifyfs", default=False, description="Enable UnifyFS")
variant("veloc", default=False, description="Enable VeloC")
# Vis
variant("ascent", default=False, description="Enable Ascent")
variant("cinema", default=False, description="Enable Cinema")
variant("paraview", default=False, description="Enable ParaView")
variant("sensei", default=False, description="Enable Sensei")
variant("sz", default=False, description="Enable SZ")
variant("visit", default=False, description="Enable VisIt")
variant("vtkm", default=False, description="Enable VTK-m")
variant("zfp", default=False, description="Enable ZFP")
############################################################
# Dependencies
############################################################
cuda_arch_variants = ["cuda_arch={0}".format(x) for x in CudaPackage.cuda_arch_values]
amdgpu_target_variants = ["amdgpu_target={0}".format(x) for x in ROCmPackage.amdgpu_targets]
dav_sdk_depends_on(
"adios2+shared+mpi+fortran+python+blosc+sst+ssc+dataman",
when="+adios2",
propagate=["hdf5", "sz", "zfp"],
)
dav_sdk_depends_on("darshan-runtime+mpi", when="+darshan", propagate=["hdf5"])
dav_sdk_depends_on("darshan-util", when="+darshan")
dav_sdk_depends_on("faodel+shared+mpi network=libfabric", when="+faodel", propagate=["hdf5"])
dav_sdk_depends_on("hdf5@1.12: +shared+mpi+fortran", when="+hdf5")
dav_sdk_depends_on("parallel-netcdf+shared+fortran", when="+pnetcdf")
dav_sdk_depends_on("unifyfs", when="+unifyfs ")
dav_sdk_depends_on("veloc", when="+veloc")
propagate_to_sensei = [(v, v) for v in ["adios2", "ascent", "hdf5"]]
propagate_to_sensei.extend([("paraview", "catalyst"), ("visit", "libsim")])
dav_sdk_depends_on(
"sensei@4: ~vtkio +python", when="+sensei", propagate=dict(propagate_to_sensei)
)
# Fortran support with ascent is problematic on some Cray platforms so the
# SDK is explicitly disabling it until the issues are resolved.
dav_sdk_depends_on(
"ascent+mpi~fortran+openmp+python+shared+vtkh+dray~test",
when="+ascent",
propagate=["adios2", "cuda"] + cuda_arch_variants,
)
# Need to explicitly turn off conduit hdf5_compat in order to build
# hdf5@1.12 which is required for SDK
depends_on("ascent ^conduit ~hdf5_compat", when="+ascent +hdf5")
# Disable configuring with @develop. This should be removed after ascent
# releases 0.8 and ascent can build with conduit@0.8: and vtk-m@1.7:
conflicts("ascent@develop", when="+ascent")
depends_on("py-cinemasci", when="+cinema")
dav_sdk_depends_on(
"paraview@5.10:+mpi+python3+kits+shared", when="+paraview", propagate=["hdf5", "adios2"]
)
# ParaView needs @5.11: in order to use cuda and be compatible with other
# SDK packages.
depends_on("paraview +cuda", when="+paraview +cuda ^paraview@5.11:")
for cuda_arch in cuda_arch_variants:
depends_on(
"paraview {0}".format(cuda_arch),
when="+paraview {0} ^paraview@5.11:".format(cuda_arch),
)
depends_on("paraview ~cuda", when="+paraview ~cuda")
conflicts("paraview@master", when="+paraview")
dav_sdk_depends_on("visit+mpi+python+silo", when="+visit", propagate=["hdf5", "adios2"])
dav_sdk_depends_on(
"vtk-m@1.7:+shared+mpi+openmp+rendering",
when="+vtkm",
propagate=["cuda", "rocm"] + cuda_arch_variants + amdgpu_target_variants,
)
# +python is currently broken in sz
# dav_sdk_depends_on('sz+shared+fortran+python+random_access',
dav_sdk_depends_on("sz+shared+fortran+random_access", when="+sz", propagate=["hdf5"])
dav_sdk_depends_on("zfp", when="+zfp", propagate=["cuda"] + cuda_arch_variants)
|