spack/var/spack/repos/builtin/packages/ecp-data-vis-sdk/package.py
2022-03-02 13:39:36 -05:00

165 lines
6.4 KiB
Python

# 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 EcpDataVisSdk(BundlePackage, CudaPackage):
"""ECP Data & Vis SDK"""
homepage = "https://github.com/chuckatkins/ecp-data-viz-sdk"
tags = ['ecp']
maintainers = ['chuckatkins']
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('paraview', default=False, description="Enable ParaView")
variant('sz', default=False, description="Enable SZ")
variant('vtkm', default=False, description="Enable VTK-m")
variant('zfp', default=False, description="Enable ZFP")
# Cinema
variant('cinema', default=False, description="Enable Cinema")
# Outstanding build issues
variant('sensei', default=False, description="Enable Sensei")
conflicts('+sensei')
variant('visit', default=False, description="Enable VisIt")
conflicts('+visit')
# 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]
############################################################
# Dependencies
############################################################
cuda_arch_variants = ['cuda_arch={0}'.format(x)
for x in CudaPackage.cuda_arch_values]
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')
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')
# Currenly only develop has necessary patches. Update this after SC21 release
propagate_to_sensei = [(v, v) for v in ['adios2', 'ascent', 'hdf5', 'vtkm']]
propagate_to_sensei.extend([('paraview', 'catalyst'), ('visit', 'libsim')])
dav_sdk_depends_on('sensei@develop +vtkio +python ~miniapps', when='+sensei',
propagate=dict(propagate_to_sensei))
dav_sdk_depends_on('ascent+mpi+fortran+openmp+python+shared+vtkh+dray',
when='+ascent',
propagate=['adios2'] + 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')
depends_on('ascent~cuda', when='+ascent~cuda')
depends_on('ascent+cuda', when='+ascent+cuda ^vtk-m@1.7:')
# 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')
depends_on('py-cinemasci', when='+cinema')
dav_sdk_depends_on('paraview+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')
dav_sdk_depends_on('visit', when='+visit')
dav_sdk_depends_on('vtk-m+shared+mpi+openmp+rendering',
when='+vtkm',
propagate=['cuda'] + cuda_arch_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)