add ginkgo package, use it in dealii along with symengine (#10917)
This commit is contained in:

committed by
Massimiliano Culpo

parent
724acb6421
commit
6d971c4493
@@ -41,6 +41,7 @@ class Dealii(CMakePackage, CudaPackage):
|
|||||||
description='Compile with Adol-c')
|
description='Compile with Adol-c')
|
||||||
variant('doc', default=False,
|
variant('doc', default=False,
|
||||||
description='Compile with documentation')
|
description='Compile with documentation')
|
||||||
|
variant('ginkgo', default=False, description='Compile wit Ginkgo')
|
||||||
variant('gmsh', default=True, description='Compile with GMSH')
|
variant('gmsh', default=True, description='Compile with GMSH')
|
||||||
variant('gsl', default=True, description='Compile with GSL')
|
variant('gsl', default=True, description='Compile with GSL')
|
||||||
variant('hdf5', default=True,
|
variant('hdf5', default=True,
|
||||||
@@ -61,6 +62,8 @@ class Dealii(CMakePackage, CudaPackage):
|
|||||||
description='Compile with Sundials')
|
description='Compile with Sundials')
|
||||||
variant('slepc', default=True,
|
variant('slepc', default=True,
|
||||||
description='Compile with Slepc (only with Petsc and MPI)')
|
description='Compile with Slepc (only with Petsc and MPI)')
|
||||||
|
variant('symengine', default=False,
|
||||||
|
description='Compile with SymEngine')
|
||||||
variant('trilinos', default=True,
|
variant('trilinos', default=True,
|
||||||
description='Compile with Trilinos (only with MPI)')
|
description='Compile with Trilinos (only with MPI)')
|
||||||
variant('python', default=False,
|
variant('python', default=False,
|
||||||
@@ -115,16 +118,17 @@ class Dealii(CMakePackage, CudaPackage):
|
|||||||
depends_on('assimp', when='@9.0:+assimp')
|
depends_on('assimp', when='@9.0:+assimp')
|
||||||
depends_on('doxygen+graphviz', when='+doc')
|
depends_on('doxygen+graphviz', when='+doc')
|
||||||
depends_on('graphviz', when='+doc')
|
depends_on('graphviz', when='+doc')
|
||||||
|
depends_on('ginkgo', when='@9.1:+ginkgo')
|
||||||
depends_on('gmsh+tetgen+netgen+oce', when='@9.0:+gmsh', type=('build', 'run'))
|
depends_on('gmsh+tetgen+netgen+oce', when='@9.0:+gmsh', type=('build', 'run'))
|
||||||
depends_on('gsl', when='@8.5.0:+gsl')
|
depends_on('gsl', when='@8.5.0:+gsl')
|
||||||
# FIXME: next line fixes concretization with petsc
|
# FIXME: next line fixes concretization with petsc
|
||||||
depends_on('hdf5+mpi+hl+fortran', when='+hdf5+mpi+petsc')
|
depends_on('hdf5+mpi+hl+fortran', when='+hdf5+mpi+petsc')
|
||||||
depends_on('hdf5+mpi+hl', when='+hdf5+mpi~petsc')
|
depends_on('hdf5+mpi+hl', when='+hdf5+mpi~petsc')
|
||||||
depends_on('cuda@8:', when='+cuda')
|
depends_on('cuda@8:', when='+cuda')
|
||||||
depends_on('cmake@3.9:', when='+cuda')
|
depends_on('cmake@3.9:', when='+cuda', type='build')
|
||||||
# older version of deal.II do not build with Cmake 3.10, see
|
# older version of deal.II do not build with Cmake 3.10, see
|
||||||
# https://github.com/dealii/dealii/issues/5510
|
# https://github.com/dealii/dealii/issues/5510
|
||||||
depends_on('cmake@:3.9.99', when='@:8.99')
|
depends_on('cmake@:3.9.99', when='@:8.99', type='build')
|
||||||
# FIXME: concretizer bug. The two lines mimic what comes from PETSc
|
# FIXME: concretizer bug. The two lines mimic what comes from PETSc
|
||||||
# but we should not need it
|
# but we should not need it
|
||||||
depends_on('metis@5:+int64', when='+metis+int64')
|
depends_on('metis@5:+int64', when='+metis+int64')
|
||||||
@@ -144,6 +148,7 @@ class Dealii(CMakePackage, CudaPackage):
|
|||||||
depends_on('slepc@:3.6.3', when='@:8.4.1+slepc+petsc+mpi')
|
depends_on('slepc@:3.6.3', when='@:8.4.1+slepc+petsc+mpi')
|
||||||
depends_on('slepc~arpack', when='+slepc+petsc+mpi+int64')
|
depends_on('slepc~arpack', when='+slepc+petsc+mpi+int64')
|
||||||
depends_on('sundials@:3~pthread', when='@9.0:+sundials')
|
depends_on('sundials@:3~pthread', when='@9.0:+sundials')
|
||||||
|
depends_on('symengine@0.3:', when='@9.1:+symengine')
|
||||||
# do not require +rol to make concretization of xsdk possible
|
# 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', 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+teuchos~hypre', when='+trilinos+mpi+int64~cuda')
|
||||||
@@ -172,6 +177,13 @@ class Dealii(CMakePackage, CudaPackage):
|
|||||||
'onwards. Please explicitly disable this variant '
|
'onwards. Please explicitly disable this variant '
|
||||||
'via ~{0}'.format(p))
|
'via ~{0}'.format(p))
|
||||||
|
|
||||||
|
# interfaces added in 9.1.0:
|
||||||
|
for p in ['ginkgo', 'symengine']:
|
||||||
|
conflicts('+{0}'.format(p), when='@:9.0',
|
||||||
|
msg='The interface to {0} is supported from version 9.1.0 '
|
||||||
|
'onwards. Please explicitly disable this variant '
|
||||||
|
'via ~{0}'.format(p))
|
||||||
|
|
||||||
conflicts('+slepc', when='~petsc',
|
conflicts('+slepc', when='~petsc',
|
||||||
msg='It is not possible to enable slepc interfaces '
|
msg='It is not possible to enable slepc interfaces '
|
||||||
'without petsc.')
|
'without petsc.')
|
||||||
@@ -310,7 +322,8 @@ def cmake_args(self):
|
|||||||
# variables:
|
# variables:
|
||||||
for library in (
|
for library in (
|
||||||
'gsl', 'hdf5', 'p4est', 'petsc', 'slepc', 'trilinos', 'metis',
|
'gsl', 'hdf5', 'p4est', 'petsc', 'slepc', 'trilinos', 'metis',
|
||||||
'sundials', 'nanoflann', 'assimp', 'gmsh', 'muparser'):
|
'sundials', 'nanoflann', 'assimp', 'gmsh', 'muparser',
|
||||||
|
'symengine', 'ginkgo'):
|
||||||
if ('+' + library) in spec:
|
if ('+' + library) in spec:
|
||||||
options.extend([
|
options.extend([
|
||||||
'-D%s_DIR=%s' % (library.upper(), spec[library].prefix),
|
'-D%s_DIR=%s' % (library.upper(), spec[library].prefix),
|
||||||
|
43
var/spack/repos/builtin/packages/ginkgo/package.py
Normal file
43
var/spack/repos/builtin/packages/ginkgo/package.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Copyright 2013-2019 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 *
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
class Ginkgo(CMakePackage, CudaPackage):
|
||||||
|
"""High-performance linear algebra library for manycore systems,
|
||||||
|
with a focus on sparse solution of linear systems."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/ginkgo-project/ginkgo"
|
||||||
|
url = "https://github.com/ginkgo-project/ginkgo.git"
|
||||||
|
git = "https://github.com/ginkgo-project/ginkgo.git"
|
||||||
|
|
||||||
|
version('develop', branch='develop')
|
||||||
|
|
||||||
|
# Ginkgo has problems with circular dependencies and shared libs, see
|
||||||
|
# https://github.com/ginkgo-project/ginkgo/issues/203
|
||||||
|
# Thus keep default to False for now
|
||||||
|
variant('shared', default=False, description='Build shared libraries')
|
||||||
|
variant('openmp', default=sys.platform != 'darwin', description='Build with OpenMP')
|
||||||
|
variant('build_type', default='Release',
|
||||||
|
description='The build type to build',
|
||||||
|
values=('Debug', 'Release'))
|
||||||
|
|
||||||
|
depends_on('cmake@3.9:', type='build')
|
||||||
|
depends_on('cuda@9:', when='+cuda')
|
||||||
|
|
||||||
|
# issues with ** expression, see
|
||||||
|
# https://github.com/ginkgo-project/ginkgo/issues/270#issuecomment-473901621
|
||||||
|
patch('static.patch')
|
||||||
|
|
||||||
|
def cmake_args(self):
|
||||||
|
spec = self.spec
|
||||||
|
return [
|
||||||
|
'-DGINKGO_BUILD_CUDA=%s' % ('ON' if '+cuda' in spec else 'OFF'),
|
||||||
|
'-DGINKGO_BUILD_OMP=%s' % ('ON' if '+openmp' in spec else 'OFF'),
|
||||||
|
'-DBUILD_SHARED_LIBS=%s' % ('ON' if '+shared' in spec else 'OFF'),
|
||||||
|
'-DGINKGO_BUILD_BENCHMARKS=OFF'
|
||||||
|
]
|
17
var/spack/repos/builtin/packages/ginkgo/static.patch
Normal file
17
var/spack/repos/builtin/packages/ginkgo/static.patch
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index e5fae68..807a7dc 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -109,9 +109,9 @@ if(GINKGO_DEVEL_TOOLS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Generate the global `ginkgo/ginkgo.hpp` header with every call of make
|
||||||
|
-add_custom_target(generate_ginkgo_header ALL
|
||||||
|
- COMMAND ${Ginkgo_SOURCE_DIR}/dev_tools/scripts/update_ginkgo_header.sh
|
||||||
|
- WORKING_DIRECTORY ${Ginkgo_SOURCE_DIR})
|
||||||
|
+# add_custom_target(generate_ginkgo_header ALL
|
||||||
|
+# COMMAND ${Ginkgo_SOURCE_DIR}/dev_tools/scripts/update_ginkgo_header.sh
|
||||||
|
+# WORKING_DIRECTORY ${Ginkgo_SOURCE_DIR})
|
||||||
|
|
||||||
|
if(GINKGO_BUILD_DOC)
|
||||||
|
add_subdirectory(doc)
|
Reference in New Issue
Block a user