summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkwryankrattiger <80296582+kwryankrattiger@users.noreply.github.com>2024-09-28 06:05:31 -0500
committerGitHub <noreply@github.com>2024-09-28 13:05:31 +0200
commite08a72a3333739a0e483b625e38a3d87380213f1 (patch)
treec0b42d0b0c09d702972941906332515271ce27c1
parent1b6345828d0ef9a0af4a9fc8ca3855b7905b6271 (diff)
downloadspack-e08a72a3333739a0e483b625e38a3d87380213f1.tar.gz
spack-e08a72a3333739a0e483b625e38a3d87380213f1.tar.bz2
spack-e08a72a3333739a0e483b625e38a3d87380213f1.tar.xz
spack-e08a72a3333739a0e483b625e38a3d87380213f1.zip
dav-sdk: Add new DaV SDK Package (#45465)
This package is a post-ECP port of the Data and Vis SDK. The new DAV SDK drops the ECP prefix and some previously included packages.
-rw-r--r--var/spack/repos/builtin/packages/dav-sdk/package.py177
1 files changed, 177 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/dav-sdk/package.py b/var/spack/repos/builtin/packages/dav-sdk/package.py
new file mode 100644
index 0000000000..cb247efb0e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dav-sdk/package.py
@@ -0,0 +1,177 @@
+# 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 *
+
+
+# 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 the package is in the spec tree then it must be enabled in the SDK.
+ if "+" in when:
+ _when_variants = when.strip("+").split("+")
+ if any(tok in when for tok in ["~", "="]):
+ tty.error("Bad token in when clause, only positive boolean tokens allowed")
+
+ for variant in _when_variants:
+ conflicts("~" + variant, when="^" + spec)
+
+ # Skip if there is nothing to propagate
+ if not propagate:
+ return
+
+ # Map the propagated variants to the dependency variant. Some packages may need
+ # overrides to propagate a dependency as something else, e.g., {"visit": "libsim"}.
+ # Most call-sites will just use a list.
+ 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 DavSdk(BundlePackage, CudaPackage, ROCmPackage):
+ """Data & Vis SDK
+
+ ** This package is a post-ECP port from the ECP Data & Vis SDK **
+ """
+
+ homepage = "https://dav-sdk.github.io/"
+
+ tags = ["peso", "oasis", "sdk"]
+ maintainers("kwryankrattiger", "vicentebolea")
+
+ version("1.0")
+
+ ############################################################
+ # Variants
+ ############################################################
+
+ # Data
+ variant("adios2", default=False, description="Enable ADIOS2")
+ variant("hdf5", default=False, description="Enable HDF5")
+ variant("pnetcdf", default=False, description="Enable PNetCDF")
+ variant("diy", default=False, description="Enable DIY")
+
+ # Vis
+ variant("ascent", default=False, description="Enable Ascent")
+ variant("paraview", default=False, description="Enable ParaView")
+ variant("visit", default=False, description="Enable VisIt")
+ variant("vtkm", default=False, description="Enable VTK-m")
+ variant("zfp", default=False, description="Enable ZFP")
+
+ # Language Options
+ variant("fortran", default=True, sticky=True, description="Enable fortran language features.")
+
+ ############################################################
+ # 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+python+sst+dataman",
+ when="+adios2",
+ propagate=["cuda", "hdf5", "zfp", "fortran"] + cuda_arch_variants,
+ )
+
+ # HDF5 1.14 is a soft requirement for the ECP Data and Vis SDK.
+ # When building with VisIt and CinemaSci in the same SDK environment there is a conflict
+ # in the build dependency of py-setuptools which prevents building a py-h5py that is
+ # compatible with 'hdf5@1.14:'. Until there is a version of VisIt with an updated VTK or Spack
+ # allows the concretization of multiple versions of the same build only dependency
+ # concretization with VisIt and Cinema variants will not allow building VOLs.
+ dav_sdk_depends_on("hdf5@1.12: +shared+mpi", when="+hdf5", propagate=["fortran"])
+
+ # HDF5 VOL Adapters require hdf5@1.14:
+
+ # hdf5-vfd-gds needs cuda@11.7.1 or later, only enable when 11.7.1+ available.
+ depends_on("hdf5-vfd-gds@1.0.2:", when="+cuda+hdf5 ^cuda@11.7.1: ^hdf5@1.14:")
+ for cuda_arch in cuda_arch_variants:
+ depends_on(
+ "hdf5-vfd-gds@1.0.2: {0}".format(cuda_arch),
+ when="+cuda+hdf5 {0} ^cuda@11.7.1: ^hdf5@1.14:".format(cuda_arch),
+ )
+ conflicts("~cuda", when="^hdf5-vfd-gds@1.0.2:")
+ conflicts("~hdf5", when="^hdf5-vfd-gds@1.0.2:")
+ conflicts("~hdf5", when="^hdf5-vol-async")
+ conflicts("~hdf5", when="^hdf5-vol-cache")
+ conflicts("~hdf5", when="^hdf5-vol-log")
+ depends_on("hdf5-vol-async", when="+hdf5 ^hdf5@1.14:")
+ depends_on("hdf5-vol-cache", when="+hdf5 ^hdf5@1.14:")
+ depends_on("hdf5-vol-log", when="+hdf5 ^hdf5@1.14:")
+
+ dav_sdk_depends_on("parallel-netcdf+shared", when="+pnetcdf", propagate=["fortran"])
+
+ # 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+python+shared+vtkh+dray~test",
+ when="+ascent",
+ propagate=["adios2", "cuda"] + cuda_arch_variants,
+ )
+ depends_on("ascent+openmp", when="~rocm+ascent")
+ depends_on("ascent~openmp", when="+rocm+ascent")
+
+ # Need to explicitly turn off conduit hdf5_compat in order to build
+ # hdf5@1.12 which is required for SDK
+ depends_on("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")
+
+ dav_sdk_depends_on("diy@3:", when="+diy")
+
+ # ParaView needs @5.11: in order to use CUDA/ROCM, therefore it is the minimum
+ # required version since GPU capability is desired for ECP
+ dav_sdk_depends_on(
+ "paraview@5.11:+mpi+openpmd+python+kits+shared+catalyst+libcatalyst" " use_vtkm=on",
+ when="+paraview",
+ propagate=["adios2", "cuda", "hdf5", "rocm"] + amdgpu_target_variants + cuda_arch_variants,
+ )
+ dav_sdk_depends_on("libcatalyst@2:+mpi", when="+paraview")
+ 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+rendering",
+ when="+vtkm",
+ propagate=["cuda", "rocm"] + cuda_arch_variants + amdgpu_target_variants,
+ )
+ # TODO: When Ascent is updated to use VTK-m >= 1.8 move examples to
+ # the main spec.
+ conflicts("^vtk-m~examples", when="+vtkm ^vtk-m@1.8:")
+ depends_on("vtk-m+openmp", when="~rocm+vtkm")
+ depends_on("vtk-m~openmp", when="+rocm+vtkm")
+
+ dav_sdk_depends_on("zfp", when="+zfp", propagate=["cuda"] + cuda_arch_variants)