Trilinos: enable x11 when +exodus (#25033)

* trilinos: rearrange dependencies

* trilinos: refactor tpl enables and add libx11 for +exodus

Fixes #25028
This commit is contained in:
Seth R. Johnson 2021-07-22 12:27:29 -04:00 committed by GitHub
parent 68dbca64e7
commit 8735d0a281
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -252,6 +252,8 @@ class Trilinos(CMakePackage, CudaPackage):
placement='packages/mesquite',
when='+mesquite @develop')
# ###################### Conflicts ##########################
# Epetra packages
with when('~epetra'):
conflicts('+amesos')
@ -297,12 +299,12 @@ class Trilinos(CMakePackage, CudaPackage):
conflicts('+tempus', when='~nox')
conflicts('+zoltan2', when='~zoltan')
# Only allow DTK with Trilinos 12.14 and develop
# Only allow DTK with Trilinos 12
conflicts('+dtk', when='~boost')
conflicts('+dtk', when='~intrepid2')
conflicts('+dtk', when='@0:12.12.99,master')
conflicts('+dtk', when='@0:12.12.99,develop,master')
# Only allow Mesquite with Trilinos 12.12 and up, and develop
# Only allow Mesquite with older Trilinos 12.12 up to 13
conflicts('+mesquite', when='@0:12.10.99,master,develop')
# Can only use one type of SuperLU
conflicts('+superlu-dist', when='+superlu')
@ -325,10 +327,10 @@ class Trilinos(CMakePackage, CudaPackage):
'+shared', when='+stk platform=darwin',
msg='Cannot build Trilinos with STK as a shared library on Darwin.'
)
# ADIOS2 was only added after v12.14.1
conflicts('+adios2', when='@:12.14.1')
conflicts('+adios2', when='@xsdk-0.2.0')
conflicts('+pnetcdf', when='~netcdf')
conflicts('+pnetcdf', when='~mpi')
conflicts('+cuda_rdc', when='~cuda')
conflicts('+wrapper', when='~cuda')
conflicts('+wrapper', when='%clang')
@ -358,26 +360,23 @@ class Trilinos(CMakePackage, CudaPackage):
# ###################### Dependencies ##########################
# Explicit dependency variants
depends_on('adios2', when='+adios2')
depends_on('blas')
depends_on('lapack')
depends_on('boost', when='+boost')
depends_on('cgns', when='+cgns')
depends_on('hdf5+hl', when='+hdf5')
depends_on('hdf5~mpi', when='+hdf5~mpi')
depends_on('hdf5+mpi', when="+hdf5+mpi")
depends_on('lapack')
depends_on('matio', when='+matio')
depends_on('mpi', when='+mpi')
depends_on('netcdf-c+mpi+parallel-netcdf', when="+netcdf+pnetcdf@master,12.12.1:")
depends_on('netcdf-c+mpi', when="+netcdf~pnetcdf+mpi")
depends_on('netcdf-c', when="+netcdf")
depends_on('suite-sparse', when='+suite-sparse')
depends_on('zlib', when="+zlib")
# MPI related dependencies
depends_on('mpi', when='+mpi')
depends_on('hdf5+mpi', when="+hdf5+mpi")
depends_on('netcdf-c', when="+netcdf")
depends_on('netcdf-c+mpi', when="+netcdf~pnetcdf+mpi")
depends_on('netcdf-c+mpi+parallel-netcdf', when="+netcdf+pnetcdf@master,12.12.1:")
depends_on('parallel-netcdf', when="+netcdf+pnetcdf@master,12.12.1:")
depends_on('metis', when='+zoltan')
depends_on('parmetis', when='+mpi +zoltan')
depends_on('parmetis', when='+scorec')
depends_on('cgns', when='+cgns')
depends_on('adios2', when='+adios2')
# Trilinos' Tribits config system is limited which makes it very tricky to
# link Amesos with static MUMPS, see
# https://trilinos.org/docs/dev/packages/amesos2/doc/html/classAmesos2_1_1MUMPS.html
@ -410,9 +409,13 @@ class Trilinos(CMakePackage, CudaPackage):
depends_on('hwloc', when='@13: +kokkos')
depends_on('hwloc+cuda', when='@13: +kokkos+cuda')
# Dependencies/conflicts when MPI is disabled
depends_on('hdf5~mpi', when='+hdf5~mpi')
conflicts('+pnetcdf', when='~mpi')
# Variant requirements from packages
depends_on('metis', when='+zoltan')
depends_on('libx11', when='+exodus')
depends_on('parmetis', when='+mpi +zoltan')
depends_on('parmetis', when='+scorec')
# ###################### Patches ##########################
patch('umfpack_from_suitesparse.patch', when='@11.14.1:12.8.1')
patch('xlf_seacas.patch', when='@12.10.1:12.12.1 %xl')
@ -425,20 +428,20 @@ class Trilinos(CMakePackage, CudaPackage):
patch('cray_secas_12_12_1.patch', when='@12.12.1%cce')
patch('cray_secas.patch', when='@12.14.1:%cce')
# workaround an NVCC bug with c++14 (https://github.com/trilinos/Trilinos/issues/6954)
# avoid calling deprecated functions with CUDA-11
patch('fix_cxx14_cuda11.patch', when='@13.0.0:13.0.1 cxxstd=14 ^cuda@11:')
# Allow building with +teko gotype=long
patch('https://github.com/trilinos/Trilinos/commit/b17f20a0b91e0b9fc5b1b0af3c8a34e2a4874f3f.patch',
sha256='dee6c55fe38eb7f6367e1896d6bc7483f6f9ab8fa252503050cc0c68c6340610',
when='@13.0.0:13.0.1 +teko gotype=long')
def flag_handler(self, name, flags):
if self.spec.satisfies('%cce'):
if name == 'ldflags':
flags.append('-fuse-ld=gold')
return (None, None, flags)
# workaround an NVCC bug with c++14 (https://github.com/trilinos/Trilinos/issues/6954)
# avoid calling deprecated functions with CUDA-11
patch('fix_cxx14_cuda11.patch', when='@13.0.0:13.0.1 cxxstd=14 ^cuda@11:')
patch('https://github.com/trilinos/Trilinos/commit/b17f20a0b91e0b9fc5b1b0af3c8a34e2a4874f3f.patch',
sha256='dee6c55fe38eb7f6367e1896d6bc7483f6f9ab8fa252503050cc0c68c6340610',
when='@13.0.0:13.0.1 +teko gotype=long')
def url_for_version(self, version):
url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-{0}.tar.gz"
return url.format(version.dashed)
@ -608,41 +611,35 @@ def define_tpl_enable(cmake_var, spec_var=None):
# ######################### TPLs #############################
blas = spec['blas'].libs
lapack = spec['lapack'].libs
options.extend([
define('TPL_ENABLE_BLAS', True),
define('BLAS_LIBRARY_NAMES', blas.names),
define('BLAS_LIBRARY_DIRS', blas.directories),
define('TPL_ENABLE_LAPACK', True),
define('LAPACK_LIBRARY_NAMES', lapack.names),
define('LAPACK_LIBRARY_DIRS', lapack.directories),
define_tpl_enable('Matio'),
])
options.append(define_tpl_enable('Netcdf'))
if '+netcdf' in spec:
options.append(define('NetCDF_ROOT', spec['netcdf-c'].prefix))
options.append(define_tpl_enable('HYPRE'))
if '+hypre' in spec:
# Enable TPLs based on whether they're in our spec, not whether they're
# variant names: packages/features should disable availability
for tpl_name, dep_name in [
('ADIOS2', 'adios2'),
('BLAS', 'blas'),
('Boost', 'boost'),
('CGNS', 'cgns'),
('HDF5', 'hdf5'),
('HYPRE', 'hypre'),
('HWLOC', 'hwloc'),
('LAPACK', 'lapack'),
('Matio', 'matio'),
('METIS', 'metis'),
('Netcdf', 'netcdf-c'),
('STRUMPACK', 'strumpack'),
('SuperLU', 'superlu'),
('X11', 'libx11'),
('Zlib', 'zlib'),
]:
have_dep = (dep_name in spec)
options.append(define('TPL_ENABLE_' + tpl_name, have_dep))
if not have_dep:
continue
depspec = spec[dep_name]
options.extend([
define('HYPRE_INCLUDE_DIRS', spec['hypre'].prefix.include),
define('HYPRE_LIBRARY_DIRS', spec['hypre'].prefix.lib),
])
options.append(define_tpl_enable('Boost'))
if '+boost' in spec:
options.extend([
define('Boost_INCLUDE_DIRS', spec['boost'].prefix.include),
define('Boost_LIBRARY_DIRS', spec['boost'].prefix.lib),
])
options.append(define_tpl_enable('HDF5'))
if '+hdf5' in spec:
options.extend([
define('HDF5_INCLUDE_DIRS', spec['hdf5'].prefix.include),
define('HDF5_LIBRARY_DIRS', spec['hdf5'].prefix.lib),
define('TPL_' + tpl_name + '_INCLUDE_DIRS', depspec.prefix.include),
define(tpl_name + '_ROOT', depspec.prefix),
define(tpl_name + '_LIBRARY_NAMES', depspec.libs.names),
define(tpl_name + '_LIBRARY_DIRS', depspec.libs.directories),
])
if '+suite-sparse' in spec:
@ -730,22 +727,8 @@ def define_tpl_enable(cmake_var, spec_var=None):
define('HAVE_SUPERLUDIST_LUSTRUCTINIT_2ARG', True),
])
options.append(define_tpl_enable('SuperLU'))
if '+superlu' in spec:
options.extend([
define('SuperLU_LIBRARY_DIRS', spec['superlu'].prefix.lib),
define('SuperLU_INCLUDE_DIRS', spec['superlu'].prefix.include),
])
options.append(define_tpl_enable('STRUMPACK'))
if '+strumpack' in spec:
options.extend([
define('Amesos2_ENABLE_STRUMPACK', True),
define('STRUMPACK_LIBRARY_DIRS',
spec['strumpack'].libs.directories[0]),
define('STRUMPACK_INCLUDE_DIRS',
spec['strumpack'].headers.directories[0]),
])
options.append(define('Amesos2_ENABLE_STRUMPACK', True))
options.append(define_tpl_enable('Pnetcdf'))
if '+pnetcdf' in spec:
@ -755,25 +738,7 @@ def define_tpl_enable(cmake_var, spec_var=None):
define('PNetCDF_ROOT', spec['parallel-netcdf'].prefix),
])
options.append(define_tpl_enable('Zlib'))
if '+zlib' in spec:
options.extend([
define('TPL_ENABLE_Zlib', True),
define('Zlib_ROOT', spec['zlib'].prefix),
])
options.append(define_tpl_enable('CGNS'))
if '+cgns' in spec:
options.extend([
define('TPL_ENABLE_CGNS', True),
define('CGNS_INCLUDE_DIRS', spec['cgns'].prefix.include),
define('CGNS_LIBRARY_DIRS', spec['cgns'].prefix.lib),
])
options.append(define_from_variant('TPL_ENABLE_ADIOS2', 'adios2'))
if '@13: +kokkos' in spec:
options.append(define('TPL_ENABLE_HWLOC', True))
kkmarch = Kokkos.spack_micro_arch_map.get(spec.target.name, None)
if kkmarch:
options.append(define("Kokkos_ARCH_" + kkmarch.upper(), True))