trilinos: simplify some variants (#24820)

* trilinos: rename basker variant

The Basker solver is part of amesos2 but is clearer without the extra
scoping.

* trilinos: automatically enable teuchos and remove variant

Basically everything in trilinos needs teuchos

* trilinos: group top-level dependencies

* trilinos: update dependencies, removing unused

- GLM, X11 are unused (x11 lacks dependency specs too)
- Python variant is more like a TPL so rearrange that
- Gtest internal package shouldn't be compiled or exported
- Add MPI4PY requirement for pytrilinos

* trilinos: remove package meta-options

- XSDK settings and "all opt packages" are not used anywhere
- all optional packages are dangerous

* trilinos: Use hwloc iff kokkos

See #19119, also the HWLOC tpl name was misspelled so this was being ignored before.

* Flake

* Fix trilinos +netcdf~mpi

* trilinos: default to disabling external dependencies

* Remove teuchos from downstream dependencies

* fixup! trilinos: Use hwloc iff kokkos

* Add netcdf requirements to packages with ^trilinos+exodus

* trilinos: disable exodus by default

* fixup! Add netcdf requirements to packages with ^trilinos+exodus

* trilinos: only enable hwloc when @13: +kokkos

* xyce: propagate trilinos dependencies more simply

* dtk: fix missing boost dependency

* trilinos: remove explicit metis dependency

* trilinos: require metis/parmetis for zoltan

Disable zoltan by default to minimize default dependencies

* trilinos: mark mesquite disabled and fix kokkos arch

* xsdk: fix trilinos to also list zoltan [with zoltan2]

* ci: remove nonexistent variant from trilinos

* trilinos: add missing boost dependency

Co-authored-by: Satish Balay <balay@mcs.anl.gov>
This commit is contained in:
Seth R. Johnson 2021-07-16 14:36:06 -04:00 committed by GitHub
parent c56f2a935d
commit 624c72afae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 140 additions and 189 deletions

View file

@ -283,7 +283,7 @@ spack:
# - sz
# - tasmanian
# - tau
#- trilinos@13.0.1 +amesos +amesos2 +anasazi +aztec +belos +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +teuchos +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long
#- trilinos@13.0.1 +amesos +amesos2 +anasazi +aztec +belos +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +boost +superlu-dist gotype=long
# - turbine
# - umap
# - unifyfs@0.9.1

View file

@ -284,7 +284,7 @@ spack:
- sz
- tasmanian
- tau
- trilinos@13.0.1 +amesos +amesos2 +anasazi +aztec +belos +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +teuchos +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long
- trilinos@13.0.1 +amesos +amesos2 +anasazi +aztec +belos +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +boost +superlu-dist gotype=long
- turbine
- umap
- unifyfs@0.9.1

View file

@ -20,7 +20,7 @@ class Camellia(CMakePackage):
variant('moab', default=True, description='Compile with MOAB to include support for reading standard mesh formats')
depends_on('trilinos+amesos+amesos2+belos+epetra+epetraext+exodus+ifpack+ifpack2+intrepid+intrepid2+kokkos+ml+muelu+sacado+shards+teuchos+tpetra+zoltan+mumps+superlu-dist+hdf5+zlib+pnetcdf@master,12.12.1:')
depends_on('trilinos+amesos+amesos2+belos+epetra+epetraext+exodus+ifpack+ifpack2+intrepid+intrepid2+kokkos+ml+muelu+sacado+shards+tpetra+zoltan+mumps+superlu-dist+hdf5+zlib+mpi+netcdf+pnetcdf@master,12.12.1:')
depends_on('moab@:4', when='+moab')
# Cameilla needs hdf5 but the description "hdf5@:1.8" is

View file

@ -27,9 +27,10 @@ class Datatransferkit(CMakePackage):
description='enable the build of shared lib')
depends_on('arborx@1.0:', when='+external-arborx')
depends_on('boost')
depends_on('cmake', type='build')
depends_on('trilinos+intrepid2+shards~dtk', when='+serial')
depends_on('trilinos+intrepid2+shards+openmp~dtk', when='+openmp')
depends_on('trilinos+intrepid2+shards~dtk')
depends_on('trilinos+openmp', when='+openmp')
depends_on('trilinos+stratimikos+belos', when='@master')
depends_on('trilinos@13:13.99', when='@3.1-rc2')

View file

@ -210,16 +210,11 @@ class Dealii(CMakePackage, CudaPackage):
depends_on('symengine@0.6:', when='@9.2:+symengine')
depends_on('tbb', when='+threads')
# do not require +rol to make concretization of xsdk possible
depends_on('trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado+teuchos',
when='+trilinos+mpi~int64~cuda')
depends_on('trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado+teuchos~hypre',
when='+trilinos+mpi+int64~cuda')
depends_on('trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado', when='+trilinos')
depends_on('trilinos~hypre', when='+trilinos+int64')
# TODO: temporary disable Tpetra when using CUDA due to
# namespace "Kokkos::Impl" has no member "cuda_abort"
depends_on('trilinos@master+amesos+aztec+epetra+ifpack+ml+muelu+rol+sacado+teuchos~amesos2~ifpack2~intrepid2~kokkos~tpetra~zoltan2',
when='+trilinos+mpi~int64+cuda')
depends_on('trilinos@master+amesos+aztec+epetra+ifpack+ml+muelu+rol+sacado+teuchos~hypre~amesos2~ifpack2~intrepid2~kokkos~tpetra~zoltan2',
when='+trilinos+mpi+int64+cuda')
depends_on('trilinos@master+rol~amesos2~ifpack2~intrepid2~kokkos~tpetra~zoltan2', when='+trilinos+cuda')
# Explicitly provide a destructor in BlockVector,
# otherwise deal.II may fail to build with Intel compilers.

View file

@ -55,7 +55,7 @@ class Fortrilinos(CMakePackage):
depends_on('trilinos@12.17.1', when='@2.0.dev1')
# Baseline trilinos dependencies
depends_on('trilinos+teuchos gotype=long_long')
depends_on('trilinos gotype=long_long')
# Full trilinos dependencies
depends_on('trilinos+amesos2+anasazi+belos+kokkos+ifpack2+muelu+nox+tpetra'
'+stratimikos', when='+hl')

View file

@ -52,19 +52,21 @@ class NaluWind(CMakePackage, CudaPackage):
depends_on('mpi')
depends_on('yaml-cpp@0.5.3:')
depends_on('trilinos@master,develop ~cuda~wrapper+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist~superlu+hdf5+zlib+pnetcdf+shards~hypre cxxstd=14', when='~cuda')
# Cannot build Trilinos as a shared library with STK on Darwin
# https://github.com/trilinos/Trilinos/issues/2994
depends_on('trilinos@master,develop ~cuda~wrapper+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist~superlu+hdf5+zlib+pnetcdf+shards~hypre~shared cxxstd=14', when=(sys.platform == 'darwin'))
depends_on('openfast@master,develop +cxx', when='+openfast')
depends_on('tioga@master,develop', when='+tioga')
depends_on('hypre@develop,2.18.2: +int64+mpi~superlu-dist', when='+hypre')
depends_on('kokkos-nvcc-wrapper', type='build', when='+cuda')
depends_on('trilinos@master,develop +exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist~superlu+hdf5+zlib+pnetcdf+shards~hypre cxxstd=14')
# Cannot build Trilinos as a shared library with STK on Darwin
# https://github.com/trilinos/Trilinos/issues/2994
depends_on('trilinos~shared', when=(sys.platform == 'darwin'))
# Propagate cuda options to trilinos and hypre
depends_on('trilinos~cuda~wrapper', when='~cuda')
depends_on('trilinos+cuda+wrapper+cuda_rdc', when='+cuda')
depends_on('hypre@develop +cuda', when='+cuda')
for _arch in CudaPackage.cuda_arch_values:
depends_on('trilinos@master,develop ~shared+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist~superlu+hdf5+zlib+pnetcdf+shards~hypre+cuda+cuda_rdc+wrapper cxxstd=14 cuda_arch={0}'.format(_arch),
when='+cuda cuda_arch={0}'.format(_arch))
depends_on('hypre@develop +mpi+cuda+int64~superlu-dist cuda_arch={0}'.format(_arch),
when='+hypre+cuda cuda_arch={0}'.format(_arch))
depends_on('trilinos cuda_arch=' + _arch, when='+cuda cuda_arch=' + _arch)
depends_on('hypre cuda_arch=' + _arch, when='+hypre+cuda cuda_arch=' + _arch)
depends_on('trilinos-catalyst-ioss-adapter', when='+catalyst')
depends_on('fftw+mpi', when='+fftw')
depends_on('boost cxxstd=14', when='+boost')

View file

@ -35,7 +35,7 @@ class Nalu(CMakePackage):
# Cannot build Trilinos as a shared library with STK on Darwin
# which is why we have a 'shared' variant for Nalu
# https://github.com/trilinos/Trilinos/issues/2994
depends_on('trilinos+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+shards~hypre@master,develop', when='+shared')
depends_on('trilinos+mpi+netcdf+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+shards~hypre@master,develop', when='+shared')
depends_on('trilinos~shared+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+shards~hypre@master,develop', when='~shared')
# Optional dependencies
depends_on('tioga', when='+tioga+shared')

View file

@ -41,7 +41,7 @@ class OmegaH(CMakePackage):
depends_on('gmsh', when='+examples', type='build')
depends_on('mpi', when='+mpi')
depends_on('trilinos +kokkos +teuchos', when='+trilinos')
depends_on('trilinos +kokkos', when='+trilinos')
depends_on('zlib', when='+zlib')
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86610

View file

@ -25,7 +25,7 @@ class Percept(CMakePackage):
depends_on('opennurbs@percept')
depends_on('boost+graph+mpi')
depends_on('yaml-cpp+pic~shared@0.5.3:')
depends_on('trilinos~shared+exodus+tpetra+epetra+epetraext+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+aztec+sacado~openmp+shards+intrepid+cgns@master,12.14.1:')
depends_on('trilinos~shared+exodus+netcdf+mpi+tpetra+epetra+epetraext+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+aztec+sacado~openmp+shards+intrepid+cgns@master,12.14.1:')
def cmake_args(self):
spec = self.spec

View file

@ -124,7 +124,7 @@ class Phist(CMakePackage):
depends_on('eigen', when='kernel_lib=eigen')
depends_on('ghost', when='kernel_lib=ghost')
depends_on('trilinos+anasazi+belos+teuchos', when='+trilinos')
depends_on('trilinos+anasazi+belos', when='+trilinos')
depends_on('parmetis+int64', when='+parmetis+int64')
depends_on('parmetis~int64', when='+parmetis~int64')

View file

@ -21,7 +21,7 @@ class Quinoa(CMakePackage):
depends_on('hdf5+mpi')
depends_on("charmpp backend=mpi")
depends_on("trilinos+exodus")
depends_on("trilinos+exodus+mpi+netcdf")
depends_on("boost")
depends_on("hypre~internal-superlu")
depends_on("random123")

View file

@ -60,8 +60,6 @@ class Trilinos(CMakePackage, CudaPackage):
# Other
# not everyone has py-numpy activated, keep it disabled by default to avoid
# configure errors
variant('python', default=False,
description='Build python wrappers')
# Build options
variant('complex', default=False,
@ -76,50 +74,42 @@ class Trilinos(CMakePackage, CudaPackage):
description='global ordinal type for Tpetra')
variant('fortran', default=True,
description='Compile with Fortran support')
variant('python', default=False,
description='Build PyTrilinos wrappers')
variant('wrapper', default=False,
description="Use nvcc-wrapper for CUDA build")
variant('cuda_rdc', default=False,
description='turn on RDC for CUDA build')
variant('cxxstd', default='11', values=['11', '14', '17'], multi=False)
variant('hwloc', default=False,
description='Enable hwloc')
variant('openmp', default=False,
description='Enable OpenMP')
variant('shared', default=True,
description='Enables the build of shared libraries')
variant('debug', default=False,
description='Enable runtime safety and debug checks')
variant('xsdkflags', default=False,
description='Compile using the default xSDK configuration')
# TPLs (alphabet order)
variant('boost', default=True,
variant('boost', default=False,
description='Compile with Boost')
variant('cgns', default=False,
description='Enable CGNS')
variant('adios2', default=False,
description='Enable ADIOS2')
variant('glm', default=True,
description='Compile with GLM')
variant('gtest', default=False,
description='Compile with Gtest')
variant('hdf5', default=True,
variant('hdf5', default=False,
description='Compile with HDF5')
variant('hypre', default=True,
variant('hypre', default=False,
description='Compile with Hypre preconditioner')
variant('matio', default=True,
variant('matio', default=False,
description='Compile with Matio')
variant('metis', default=True,
description='Compile with METIS and ParMETIS')
variant('mpi', default=True,
description='Compile with MPI parallelism')
variant('mumps', default=True,
variant('mumps', default=False,
description='Compile with support for MUMPS solvers')
variant('netcdf', default=True,
variant('netcdf', default=False,
description='Compile with netcdf')
variant('pnetcdf', default=False,
description='Compile with parallel-netcdf')
variant('suite-sparse', default=True,
variant('suite-sparse', default=False,
description='Compile with SuiteSparse solvers')
variant('superlu-dist', default=False,
description='Compile with SuperluDist solvers')
@ -127,14 +117,10 @@ class Trilinos(CMakePackage, CudaPackage):
description='Compile with SuperLU solvers')
variant('strumpack', default=False,
description='Compile with STRUMPACK solvers')
variant('x11', default=False,
description='Compile with X11')
variant('zlib', default=False,
description='Compile with zlib')
# Package options (alphabet order)
variant('alloptpkgs', default=False,
description='Compile with all optional packages')
variant('amesos', default=True,
description='Compile with Amesos')
variant('amesos2', default=True,
@ -154,7 +140,8 @@ class Trilinos(CMakePackage, CudaPackage):
description='Compile with Epetra')
variant('epetraext', default=True,
description='Compile with EpetraExt')
variant('exodus', default=True,
# Disable Exodus by default as it requires netcdf
variant('exodus', default=False,
description='Compile with Exodus from SEACAS')
variant('ifpack', default=True,
description='Compile with Ifpack')
@ -200,20 +187,18 @@ class Trilinos(CMakePackage, CudaPackage):
description='Compile with Teko')
variant('tempus', default=False,
description='Compile with Tempus')
variant('teuchos', default=True,
description='Compile with Teuchos')
variant('tpetra', default=True,
description='Compile with Tpetra')
variant('trilinoscouplings', default=False,
description='Compile with TrilinosCouplings')
variant('zoltan', default=True,
variant('zoltan', default=False,
description='Compile with Zoltan')
variant('zoltan2', default=True,
variant('zoltan2', default=False,
description='Compile with Zoltan2')
# Internal package options (alphabetical order)
variant('amesos2basker', default=False,
description='Compile with Basker in Amesos2')
variant('basker', default=False,
description='Compile with the Basker solver in Amesos2')
variant('epetraextbtf', default=False,
description='Compile with BTF in EpetraExt')
variant('epetraextexperimental', default=False,
@ -223,11 +208,11 @@ class Trilinos(CMakePackage, CudaPackage):
# External package options
variant('dtk', default=False,
description='Enable DataTransferKit')
description='Enable DataTransferKit (deprecated)')
variant('scorec', default=False,
description='Enable SCOREC')
variant('mesquite', default=False,
description='Enable Mesquite')
description='Enable Mesquite (deprecated)')
resource(name='dtk',
git='https://github.com/ornl-cees/DataTransferKit.git',
@ -267,71 +252,58 @@ class Trilinos(CMakePackage, CudaPackage):
placement='packages/mesquite',
when='+mesquite @develop')
conflicts('+amesos2', when='~teuchos')
conflicts('+amesos2', when='~tpetra')
conflicts('+amesos', when='~epetra')
conflicts('+amesos', when='~teuchos')
conflicts('+anasazi', when='~teuchos')
conflicts('+aztec', when='~epetra')
conflicts('+belos', when='~teuchos')
conflicts('+epetraext', when='~epetra')
conflicts('+epetraext', when='~teuchos')
conflicts('+exodus', when='~netcdf')
conflicts('+ifpack2', when='~belos')
conflicts('+ifpack2', when='~teuchos')
conflicts('+ifpack2', when='~tpetra')
conflicts('+ifpack', when='~epetra')
conflicts('+ifpack', when='~teuchos')
conflicts('+intrepid2', when='~kokkos')
conflicts('+intrepid2', when='~shards')
conflicts('+intrepid2', when='~teuchos')
conflicts('+intrepid', when='~sacado')
conflicts('+intrepid', when='~shards')
conflicts('+intrepid', when='~teuchos')
conflicts('+isorropia', when='~epetra')
conflicts('+isorropia', when='~epetraext')
conflicts('+isorropia', when='~teuchos')
conflicts('+isorropia', when='~zoltan')
conflicts('+muelu', when='~teuchos')
conflicts('+nox', when='~teuchos')
conflicts('+phalanx', when='~kokkos')
conflicts('+phalanx', when='~sacado')
conflicts('+phalanx', when='~teuchos')
conflicts('+piro', when='~teuchos')
conflicts('+rol', when='~teuchos')
conflicts('+rythmos', when='~teuchos')
# Epetra packages
with when('~epetra'):
conflicts('+amesos')
conflicts('+aztec')
conflicts('+epetraext')
conflicts('+ifpack')
conflicts('+isorropia')
with when('~epetraext'):
conflicts('+isorropia')
conflicts('+teko')
conflicts('+epetraextbtf')
conflicts('+epetraextexperimental')
conflicts('+epetraextgraphreorderings')
conflicts('+teko', when='~amesos')
conflicts('+teko', when='~anasazi')
conflicts('+teko', when='~aztec')
conflicts('+teko', when='~epetraext')
conflicts('+teko', when='~ifpack')
conflicts('+teko', when='~ml')
# Tpetra packages
with when('~kokkos'):
conflicts('+cuda')
conflicts('+tpetra')
conflicts('+intrepid2')
conflicts('+phalanx')
with when('~tpetra'):
conflicts('+amesos2')
conflicts('+dtk')
conflicts('+ifpack2')
conflicts('+teko')
conflicts('+zoltan2')
conflicts('+basker', when='~amesos2')
conflicts('+exodus', when='~netcdf')
conflicts('+ifpack2', when='~belos')
conflicts('+intrepid', when='~sacado')
conflicts('+intrepid', when='~shards')
conflicts('+intrepid2', when='~shards')
conflicts('+isorropia', when='~zoltan')
conflicts('+phalanx', when='~sacado')
conflicts('+teko', when='~stratimikos')
conflicts('+teko', when='~teuchos')
conflicts('+teko', when='~tpetra')
conflicts('+teko', when='@:12 gotype=long')
conflicts('+tempus', when='~nox')
conflicts('+tempus', when='~teuchos')
conflicts('+tpetra', when='~kokkos')
conflicts('+tpetra', when='~teuchos')
conflicts('+zoltan2', when='~teuchos')
conflicts('+zoltan2', when='~tpetra')
conflicts('+zoltan2', when='~zoltan')
conflicts('+epetraextbtf', when='~epetraext')
conflicts('+epetraextexperimental', when='~epetraext')
conflicts('+epetraextgraphreorderings', when='~epetraext')
conflicts('+amesos2basker', when='~amesos2')
# Only allow DTK with Trilinos 12.14 and develop
conflicts('+dtk', when='~boost')
conflicts('+dtk', when='~intrepid2')
conflicts('+dtk', when='~kokkos')
conflicts('+dtk', when='~teuchos')
conflicts('+dtk', when='~tpetra')
# Only allow DTK with Trilinos 12.14 and develop
conflicts('+dtk', when='@0:12.12.99,master')
# Only allow Mesquite with Trilinos 12.12 and up, and develop
conflicts('+mesquite', when='@0:12.10.99,master')
conflicts('+mesquite', when='@0:12.10.99,master,develop')
# Can only use one type of SuperLU
conflicts('+superlu-dist', when='+superlu')
# For Trilinos v11 we need to force SuperLUDist=OFF, since only the
@ -346,7 +318,6 @@ class Trilinos(CMakePackage, CudaPackage):
# https://trilinos.org/pipermail/trilinos-users/2015-March/004802.html
conflicts('+superlu-dist', when='+complex+amesos2')
conflicts('+strumpack', when='@:13.0.99')
conflicts('+strumpack', when='~metis')
# PnetCDF was only added after v12.10.1
conflicts('+pnetcdf', when='@0:12.10.1')
# https://github.com/trilinos/Trilinos/issues/2994
@ -366,8 +337,7 @@ class Trilinos(CMakePackage, CudaPackage):
conflicts('cxxstd=14', when='+wrapper ^cuda@6.5.14:8.0.61')
conflicts('cxxstd=17', when='+wrapper ^cuda@6.5.14:10.2.89')
# SCOREC requires parmetis, shards, stk, and zoltan
conflicts('+scorec', when='~metis')
# SCOREC requires shards, stk, and zoltan
conflicts('+scorec', when='~mpi')
conflicts('+scorec', when='~shards')
conflicts('+scorec', when='~stk')
@ -385,26 +355,27 @@ class Trilinos(CMakePackage, CudaPackage):
# ###################### Dependencies ##########################
# Everything should be compiled position independent (-fpic)
depends_on('blas')
depends_on('lapack')
depends_on('boost', when='+boost')
depends_on('glm', when='+glm')
depends_on('hdf5+hl', when='+hdf5')
depends_on('matio', when='+matio')
depends_on('metis@5:', when='+metis')
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('parmetis', when='+metis+mpi')
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')
depends_on('boost', when='+minitensor')
# 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
@ -430,11 +401,12 @@ class Trilinos(CMakePackage, CudaPackage):
depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0+hypre')
depends_on('hypre@develop~internal-superlu', when='@develop+hypre')
depends_on('python', when='+python')
depends_on('py-mpi4py', when='+mpi +python', type=('build', 'run'))
depends_on('py-numpy', when='+python', type=('build', 'run'))
depends_on('swig', when='+python')
depends_on('kokkos-nvcc-wrapper', when='+wrapper')
depends_on('hwloc', when='+hwloc')
depends_on('hwloc +cuda', when='+hwloc+cuda')
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')
@ -493,24 +465,17 @@ def setup_build_environment(self, env):
def cmake_args(self):
spec = self.spec
define = CMakePackage.define
define_from_variant = self.define_from_variant
def define_trilinos_enable(cmake_var, spec_var=None):
if spec_var is None:
spec_var = cmake_var.lower()
return self.define_from_variant(
'Trilinos_ENABLE_' + cmake_var, spec_var)
return define_from_variant('Trilinos_ENABLE_' + cmake_var, spec_var)
def define_tpl_enable(cmake_var, spec_var=None):
if spec_var is None:
spec_var = cmake_var.lower()
return self.define_from_variant('TPL_ENABLE_' + cmake_var,
spec_var)
def define_prefix_enable(prefix, cmake_var, spec_var=None):
if spec_var is None:
spec_var = cmake_var.lower()
return self.define_from_variant(
'%s' % prefix, spec_var)
return define_from_variant('TPL_ENABLE_' + cmake_var, spec_var)
cxx_flags = []
options = []
@ -522,15 +487,14 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
define('Trilinos_ENABLE_TESTS', False),
define('Trilinos_ENABLE_EXAMPLES', False),
define('Trilinos_ENABLE_CXX11', True),
self.define_from_variant('BUILD_SHARED_LIBS', 'shared'),
define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"),
define_from_variant('BUILD_SHARED_LIBS', 'shared'),
define_trilinos_enable('DEBUG', 'debug'),
# The following can cause problems on systems that don't have
# static libraries available for things like dl and pthreads
# for example when trying to build static libs
# define('TPL_FIND_SHARED_LIBS', (
# 'ON' if '+shared' in spec else 'OFF'))
# define('Trilinos_LINK_SEARCH_START_STATIC', (
# 'OFF' if '+shared' in spec else 'ON'))
# define_from_variant('TPL_FIND_SHARED_LIBS', 'shared')
# define('Trilinos_LINK_SEARCH_START_STATIC', '+shared' not in spec)
])
# MPI settings
@ -549,7 +513,6 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
# ################## Trilinos Packages #####################
options.extend([
define_trilinos_enable('ALL_OPTIONAL_PACKAGES', 'alloptpkgs'),
define_trilinos_enable('Amesos'),
define_trilinos_enable('Amesos2'),
define_trilinos_enable('Anasazi'),
@ -582,22 +545,18 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
define_trilinos_enable('Stratimikos'),
define_trilinos_enable('Teko'),
define_trilinos_enable('Tempus'),
define_trilinos_enable('Teuchos'),
define_trilinos_enable('Tpetra'),
define_trilinos_enable('TrilinosCouplings'),
define_trilinos_enable('Zoltan'),
define_trilinos_enable('Zoltan2'),
define_prefix_enable('EpetraExt_BUILD_BTF', 'epetraextbtf'),
define_prefix_enable('EpetraExt_BUILD_EXPERIMENTAL',
'epetraextexperimental'),
define_prefix_enable('EpetraExt_BUILD_GRAPH_REORDERINGS',
'epetraextgraphreorderings'),
define_prefix_enable('Amesos2_ENABLE_Basker', 'amesos2basker'),
define_from_variant('EpetraExt_BUILD_BTF', 'epetraextbtf'),
define_from_variant('EpetraExt_BUILD_EXPERIMENTAL',
'epetraextexperimental'),
define_from_variant('EpetraExt_BUILD_GRAPH_REORDERINGS',
'epetraextgraphreorderings'),
define_from_variant('Amesos2_ENABLE_Basker', 'basker'),
])
options.append(self.define_from_variant('USE_XSDK_DEFAULTS',
'xsdkflags'))
if '+dtk' in spec:
options.extend([
define('Trilinos_EXTRA_REPOSITORIES', 'DataTransferKit'),
@ -656,15 +615,9 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
define('TPL_ENABLE_LAPACK', True),
define('LAPACK_LIBRARY_NAMES', lapack.names),
define('LAPACK_LIBRARY_DIRS', lapack.directories),
define_tpl_enable('GLM'),
define_tpl_enable('Matio'),
define_tpl_enable('X11'),
define_trilinos_enable('Gtest', 'gtest'),
])
if '+hwloc' in spec:
options.append(define_tpl_enable('hwloc'))
options.append(define_tpl_enable('Netcdf'))
if '+netcdf' in spec:
options.append(define('NetCDF_ROOT', spec['netcdf-c'].prefix))
@ -715,14 +668,22 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
define('TPL_ENABLE_UMFPACK', False),
])
options.append(define_tpl_enable('METIS'))
options.append(define_tpl_enable('ParMETIS', 'metis'))
if '+metis' in spec:
# METIS and ParMETIS mostly depend on transitive dependencies
# STRUMPACK and SuperLU-dist, so don't provide a separate variant for
# them.
have_metis = 'metis' in spec
options.append(define('TPL_ENABLE_METIS', have_metis))
if have_metis:
options.extend([
define('METIS_LIBRARY_DIRS', spec['metis'].prefix.lib),
define('METIS_LIBRARY_NAMES', 'metis'),
define('TPL_METIS_INCLUDE_DIRS', spec['metis'].prefix.include),
define('TPL_ENABLE_ParMETIS', True),
])
have_parmetis = 'parmetis' in spec
options.append(define('TPL_ENABLE_ParMETIS', have_parmetis))
if have_parmetis:
options.extend([
define('ParMETIS_LIBRARY_DIRS', [
spec['parmetis'].prefix.lib, spec['metis'].prefix.lib
]),
@ -777,7 +738,6 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
options.append(define_tpl_enable('STRUMPACK'))
if '+strumpack' in spec:
options.extend([
define('TPL_ENABLE_STRUMPACK', True),
define('Amesos2_ENABLE_STRUMPACK', True),
define('STRUMPACK_LIBRARY_DIRS',
spec['strumpack'].libs.directories[0]),
@ -808,12 +768,13 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
define('CGNS_LIBRARY_DIRS', spec['cgns'].prefix.lib),
])
options.append(self.define_from_variant('TPL_ENABLE_ADIOS2', 'adios2'))
options.append(define_from_variant('TPL_ENABLE_ADIOS2', 'adios2'))
options.append(define(
"Kokkos_ARCH_" +
Kokkos.spack_micro_arch_map[spec.target.name].upper(),
True))
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))
# ################# Miscellaneous Stuff ######################
# CUDA
@ -835,10 +796,6 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
if '+wrapper' in spec:
cxx_flags.extend(['--expt-extended-lambda'])
# Set the C++ standard to use
options.append(self.define_from_variant(
"CMAKE_CXX_STANDARD", "cxxstd"))
# OpenMP
options.append(define_trilinos_enable('OpenMP'))
if '+openmp' in spec:
@ -861,21 +818,20 @@ def define_prefix_enable(prefix, cmake_var, spec_var=None):
'-L%s/ -lgfortran' % (libgfortran),
))
float_s = '+float' in spec
complex_s = '+complex' in spec
if '+teuchos' in spec:
options.extend([
define('Teuchos_ENABLE_COMPLEX', complex_s),
define('Teuchos_ENABLE_FLOAT', float_s),
])
# Explicit Template Instantiation (ETI) in Tpetra
# NOTE: Trilinos will soon move to fixed std::uint64_t for GO and
# std::int32_t or std::int64_t for local.
options.append(self.define_from_variant(
options.append(define_from_variant(
'Trilinos_ENABLE_EXPLICIT_INSTANTIATION',
'explicit_template_instantiation'))
complex_s = spec.variants['complex'].value
float_s = spec.variants['float'].value
options.extend([
define('Teuchos_ENABLE_COMPLEX', complex_s),
define('Teuchos_ENABLE_FLOAT', float_s),
])
if '+explicit_template_instantiation' in spec and '+tpetra' in spec:
options.extend([
define('Tpetra_INST_DOUBLE', True),

View file

@ -64,17 +64,17 @@ class Xsdk(BundlePackage):
depends_on('superlu-dist@5.2.2', when='@0.3.0')
depends_on('superlu-dist@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('trilinos@develop+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan2+amesos2~exodus~dtk+intrepid2+shards+stratimikos gotype=int cxxstd=14',
depends_on('trilinos@develop+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2~exodus~dtk+intrepid2+shards+stratimikos gotype=int cxxstd=14',
when='@develop +trilinos')
depends_on('trilinos@13.0.1+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan2+amesos2~exodus~dtk+intrepid2+shards gotype=int',
depends_on('trilinos@13.0.1+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2~exodus~dtk+intrepid2+shards gotype=int',
when='@0.6.0 +trilinos')
depends_on('trilinos@12.18.1+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan2+amesos2~exodus+dtk+intrepid2+shards',
depends_on('trilinos@12.18.1+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2~exodus+dtk+intrepid2+shards',
when='@0.5.0 +trilinos')
depends_on('trilinos@12.14.1+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan2+amesos2~exodus+dtk+intrepid2+shards',
depends_on('trilinos@12.14.1+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2~exodus+dtk+intrepid2+shards',
when='@0.4.0 +trilinos')
depends_on('trilinos@12.12.1+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan2~amesos2~exodus',
depends_on('trilinos@12.12.1+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan~zoltan2~amesos2~exodus',
when='@0.3.0 +trilinos')
depends_on('trilinos@xsdk-0.2.0+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan2~amesos2~exodus',
depends_on('trilinos@xsdk-0.2.0+hypre+superlu-dist+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan~zoltan2~amesos2~exodus',
when='@xsdk-0.2.0 +trilinos')
depends_on('datatransferkit@master', when='@develop +trilinos +datatransferkit')

View file

@ -44,19 +44,16 @@ class Xyce(CMakePackage):
# Xyce is built against an older version of Trilinos unlikely to be
# used for any other purpose.
depends_on('trilinos@12.12.1 +amesos+amesos2+anasazi+aztec+belos+complex+epetra+epetraext+explicit_template_instantiation+fortran+hdf5+ifpack+isorropia+kokkos+nox+sacado+suite-sparse+teuchos+trilinoscouplings+zoltan+stokhos+amesos2basker+epetraextbtf+epetraextexperimental+epetraextgraphreorderings gotype=all')
depends_on('trilinos@12.12.1 +amesos+amesos2+anasazi+aztec+basker+belos+complex+epetra+epetraext+explicit_template_instantiation+fortran+hdf5+ifpack+isorropia+kokkos+nox+sacado+suite-sparse+trilinoscouplings+zoltan+stokhos+epetraextbtf+epetraextexperimental+epetraextgraphreorderings gotype=all')
# MPI options must be consistent with Trilinos
depends_on('trilinos~mpi', when='~mpi')
depends_on('trilinos+mpi', when='+mpi')
# Propagate variants to trilinos:
for _variant in ('mpi',):
depends_on('trilinos~' + _variant, when='~' + _variant)
depends_on('trilinos+' + _variant, when='+' + _variant)
# The default settings for various Trilinos variants would require the
# installation of many more packages than are needed for Xyce.
# The default variants in Trilinos have been set for several
# applications, namely xSDK, deal.ii, and DTK. Future changes to the
# Trilinos recipe will disable all packages by default. At that
# point, these ~variants can be removed from the following recipes.
depends_on('trilinos~adios2~alloptpkgs~boost~cgns~chaco~cuda~cuda_rdc~debug~dtk~exodus~float~glm~gtest~hwloc~hypre~ifpack2~intrepid~intrepid2~ipo~matio~mesquite~metis~minitensor~ml~muelu~mumps~netcdf~openmp~phalanx~piro~pnetcdf~python~rol~rythmos~shards~shared~shylu~stk~stratimikos~strumpack~superlu~superlu-dist~teko~tempus~wrapper~x11~xsdkflags~zlib~zoltan2')
depends_on('trilinos~float~ifpack2~ml~muelu~zoltan2')
def cmake_args(self):
spec = self.spec