summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/sundials/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/sundials/package.py')
-rw-r--r--var/spack/repos/builtin/packages/sundials/package.py153
1 files changed, 146 insertions, 7 deletions
diff --git a/var/spack/repos/builtin/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py
index ba2340f74c..7582954ab1 100644
--- a/var/spack/repos/builtin/packages/sundials/package.py
+++ b/var/spack/repos/builtin/packages/sundials/package.py
@@ -23,17 +23,156 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
+
class Sundials(Package):
- """SUNDIALS (SUite of Nonlinear and DIfferential/ALgebraic equation Solvers)"""
+ """SUNDIALS (SUite of Nonlinear and DIfferential/ALgebraic equation
+ Solvers)"""
+
homepage = "http://computation.llnl.gov/casc/sundials/"
- url = "http://computation.llnl.gov/casc/sundials/download/code/sundials-2.5.0.tar.gz"
+ url = "http://computation.llnl.gov/projects/sundials-suite-nonlinear-differential-algebraic-equation-solvers/download/sundials-2.6.2.tar.gz"
+
+ version('2.6.2', '3deeb0ede9f514184c6bd83ecab77d95')
- version('2.5.0', 'aba8b56eec600de3109cfb967aa3ba0f')
+ variant('mpi', default=True, description='Enable MPI support')
+ variant('lapack', default=True,
+ description='Build with external BLAS/LAPACK libraries')
+ variant('klu', default=False,
+ description='Build with SuiteSparse KLU libraries')
+ variant('superlu', default=False,
+ description='Build with SuperLU_MT libraries')
+ variant('openmp', default=False, description='Enable OpenMP support')
+ variant('pthread', default=True,
+ description='Enable POSIX threads support')
- depends_on("mpi")
+ depends_on('cmake', type='build')
+ depends_on('mpi', when='+mpi')
+ depends_on('blas', when='+lapack')
+ depends_on('lapack', when='+lapack')
+ depends_on('suite-sparse', when='+klu')
+ depends_on('superlu-mt+openmp', when='+superlu+openmp')
+ depends_on('superlu-mt+pthread', when='+superlu+pthread')
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ cmake_args = std_cmake_args[:]
+ cmake_args.extend([
+ '-DBUILD_SHARED_LIBS=ON',
+ '-DCMAKE_C_FLAGS=-fPIC',
+ '-DCMAKE_Fortran_FLAGS=-fPIC',
+ '-DEXAMPLES_ENABLE=ON',
+ '-DEXAMPLES_INSTALL=ON',
+ '-DFCMIX_ENABLE=ON'
+ ])
+
+ # MPI support
+ if '+mpi' in spec:
+ cmake_args.extend([
+ '-DMPI_ENABLE=ON',
+ '-DMPI_MPICC={0}'.format(spec['mpi'].mpicc),
+ '-DMPI_MPIF77={0}'.format(spec['mpi'].mpif77)
+ ])
+ else:
+ cmake_args.append('-DMPI_ENABLE=OFF')
+
+ # Building with LAPACK and BLAS
+ if '+lapack' in spec:
+ cmake_args.extend([
+ '-DLAPACK_ENABLE=ON',
+ '-DLAPACK_LIBRARIES={0};{1}'.format(
+ spec['lapack'].lapack_shared_lib,
+ spec['blas'].blas_shared_lib
+ )
+ ])
+ else:
+ cmake_args.append('-DLAPACK_ENABLE=OFF')
+
+ # Building with KLU
+ if '+klu' in spec:
+ cmake_args.extend([
+ '-DKLU_ENABLE=ON',
+ '-DKLU_INCLUDE_DIR={0}'.format(
+ spec['suite-sparse'].prefix.include),
+ '-DKLU_LIBRARY_DIR={0}'.format(
+ spec['suite-sparse'].prefix.lib)
+ ])
+ else:
+ cmake_args.append('-DKLU_ENABLE=OFF')
+
+ # Building with SuperLU_MT
+ if '+superlu' in spec:
+ cmake_args.extend([
+ '-DSUPERLUMT_ENABLE=ON',
+ '-DSUPERLUMT_INCLUDE_DIR={0}'.format(
+ spec['superlu-mt'].prefix.include),
+ '-DSUPERLUMT_LIBRARY_DIR={0}'.format(
+ spec['superlu-mt'].prefix.lib)
+ ])
+ if '+openmp' in spec:
+ cmake_args.append('-DSUPERLUMT_THREAD_TYPE=OpenMP')
+ elif '+pthread' in spec:
+ cmake_args.append('-DSUPERLUMT_THREAD_TYPE=Pthread')
+ else:
+ msg = 'You must choose either +openmp or +pthread when '
+ msg += 'building with SuperLU_MT'
+ raise RuntimeError(msg)
+ else:
+ cmake_args.append('-DSUPERLUMT_ENABLE=OFF')
+
+ # OpenMP support
+ if '+openmp' in spec:
+ cmake_args.append('-DOPENMP_ENABLE=ON')
+ else:
+ cmake_args.append('-DOPENMP_ENABLE=OFF')
+
+ # POSIX threads support
+ if '+pthread' in spec:
+ cmake_args.append('-DPTHREAD_ENABLE=ON')
+ else:
+ cmake_args.append('-DPTHREAD_ENABLE=OFF')
+
+ with working_dir('build', create=True):
+ cmake('..', *cmake_args)
+
+ make()
+ make('install')
+
+ install('LICENSE', prefix)
+
+ self.filter_compilers()
+
+ def filter_compilers(self):
+ """Run after install to tell the Makefiles to use
+ the compilers that Spack built the package with.
+
+ If this isn't done, they'll have CC, CPP, and F77 set to
+ Spack's generic cc and f77. We want them to be bound to
+ whatever compiler they were built with."""
+
+ kwargs = {'ignore_absent': True, 'backup': False, 'string': True}
+ dirname = os.path.join(self.prefix, 'examples')
+
+ cc_files = [
+ 'arkode/C_serial/Makefile', 'arkode/C_parallel/Makefile',
+ 'cvode/serial/Makefile', 'cvode/parallel/Makefile',
+ 'cvodes/serial/Makefile', 'cvodes/parallel/Makefile',
+ 'ida/serial/Makefile', 'ida/parallel/Makefile',
+ 'idas/serial/Makefile', 'idas/parallel/Makefile',
+ 'kinsol/serial/Makefile', 'kinsol/parallel/Makefile',
+ 'nvector/serial/Makefile', 'nvector/parallel/Makefile',
+ 'nvector/pthreads/Makefile'
+ ]
+
+ f77_files = [
+ 'arkode/F77_serial/Makefile', 'cvode/fcmix_serial/Makefile',
+ 'ida/fcmix_serial/Makefile', 'ida/fcmix_pthreads/Makefile',
+ 'kinsol/fcmix_serial/Makefile'
+ ]
+
+ for filename in cc_files:
+ filter_file(os.environ['CC'], self.compiler.cc,
+ os.path.join(dirname, filename), **kwargs)
+
+ for filename in f77_files:
+ filter_file(os.environ['F77'], self.compiler.f77,
+ os.path.join(dirname, filename), **kwargs)