Update ECP dav helper for propagating variants (#26175)

This commit is contained in:
kwryankrattiger 2021-10-20 10:22:07 -05:00 committed by GitHub
parent 029b47ad72
commit 45bea7cef7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,74 +45,76 @@ class EcpDataVisSdk(BundlePackage):
variant('visit', default=False, description="Enable VisIt") variant('visit', default=False, description="Enable VisIt")
conflicts('+visit') conflicts('+visit')
############################################################ # Wrapper around depends_on to propagate dependency variants
# This is a messy workaround until the clingo concretizer can be required. def dav_sdk_depends_on(spec, when=None, propagate=None):
# The intent is to map package variants to dependency variants: # Do the basic depends_on
# Package variants a, and b, mapping to dependency variants A and B depends_on(spec, when=when)
# produce the following set of dependencies:
# depends_on('foo+A+B', when='+a+b')
# depends_on('foo+A~B', when='+a~b')
# depends_on('foo~A+B', when='~a+b')
# depends_on('foo~A~B', when='~a~b')
# The clingo concretizer will allow that to be expressed much simpler by
# only considering defaults once everything else is resolved:
# depends_on('foo')
# depends_on('foo+A', when='+a')
# depends_on('foo+B', when='+b')
############################################################
# Helper function to generate dependencies on the Cartesian product of # Skip if there is nothing to propagate
# variants. If a dictionary is passed then it provides a mapping of if not propagate:
# package variant name to dependency variant name. Otherwise assume they return
# are the same variant name in both the package and dependency
def variants2deps(dep_spec, pkg_spec, variants): # Map the propagated variants to the dependency variant
if not type(variants) is dict: if not type(propagate) is dict:
variants = dict([(v, v) for v in variants]) propagate = dict([(v, v) for v in propagate])
n = len(variants)
for i in range(0, pow(2, n)): # Strip spec string to just the base spec name
state = ['+' if d == '1' else '~' for d in format(i, '0' + str(n) + 'b')] # ie. A +c ~b -> A
[pkg_vars, dep_vars] = [''.join(v) for v in zip( spec = Spec(spec).name
*[(s + pv, s + dv) for s, (pv, dv) in zip(state, variants.items())])]
dependency = ' '.join((dep_spec, dep_vars)) # Determine the base variant
predicate = ' '.join((pkg_spec, pkg_vars)) base_variant = ''
depends_on(dependency, when=predicate) if when:
base_variant = when
# Propagate variants to dependecy
for v_when, v_then in propagate.items():
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))
############################################################ ############################################################
# Dependencies # Dependencies
############################################################ ############################################################
variants2deps('adios2+shared+mpi+fortran+python+blosc+sst+ssc+dataman', dav_sdk_depends_on('adios2+shared+mpi+fortran+python+blosc+sst+ssc+dataman',
'+adios2', ['hdf5', 'sz', 'zfp']) when='+adios2',
propagate=['hdf5', 'sz', 'zfp'])
depends_on('darshan-runtime+mpi', when='+darshan') dav_sdk_depends_on('darshan-runtime+mpi', when='+darshan')
depends_on('darshan-util', when='+darshan') dav_sdk_depends_on('darshan-util', when='+darshan')
variants2deps('faodel+shared+mpi network=libfabric', '+faodel', ['hdf5']) dav_sdk_depends_on('faodel+shared+mpi network=libfabric',
when='+faodel',
propagate=['hdf5'])
depends_on('hdf5 +shared+mpi', when='+hdf5') dav_sdk_depends_on('hdf5 +shared+mpi+fortran', when='+hdf5')
# +fortran breaks the concretizer... Needs new concretizer
# depends_on('hdf5 +shared+mpi+fortran', when='+hdf5')
depends_on('parallel-netcdf+shared+fortran', when='+pnetcdf') dav_sdk_depends_on('parallel-netcdf+shared+fortran', when='+pnetcdf')
variants2deps('unifyfs', '+unifyfs ', ['hdf5']) dav_sdk_depends_on('unifyfs', when='+unifyfs ', propagate=['hdf5'])
depends_on('veloc', when='+veloc') dav_sdk_depends_on('veloc', when='+veloc')
depends_on('ascent+shared+mpi+fortran+openmp+python+vtkh+dray', when='+ascent') dav_sdk_depends_on('ascent+shared+mpi+fortran+openmp+python+vtkh+dray',
depends_on('catalyst', when='+catalyst') when='+ascent')
dav_sdk_depends_on('catalyst', when='+catalyst')
depends_on('py-cinemasci', when='+cinema') depends_on('py-cinemasci', when='+cinema')
variants2deps('paraview+shared+mpi+python3+kits', '+paraview', ['hdf5'])
# +adios2 is not yet enabled in the paraview package # +adios2 is not yet enabled in the paraview package
# depends_on('paraview+adios2', when='+paraview +adios2') dav_sdk_depends_on('paraview+shared+mpi+python3+kits',
when='+paraview',
propagate=['hdf5'])
depends_on('visit', when='+visit') dav_sdk_depends_on('visit', when='+visit')
depends_on('vtk-m+shared+mpi+openmp+rendering', when='+vtkm') dav_sdk_depends_on('vtk-m+shared+mpi+openmp+rendering', when='+vtkm')
# +python is currently broken in sz # +python is currently broken in sz
# variants2deps('sz+shared+fortran+python+random_access', '+sz', ['hdf5']) # dav_sdk_depends_on('sz+shared+fortran+python+random_access',
variants2deps('sz+shared+fortran+random_access', '+sz', ['hdf5']) dav_sdk_depends_on('sz+shared+fortran+random_access',
when='+sz',
propagate=['hdf5'])
depends_on('zfp', when='+zfp') dav_sdk_depends_on('zfp', when='+zfp')