summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorVeselin Dobrev <v-dobrev@users.noreply.github.com>2020-04-18 16:57:57 -0700
committerGitHub <noreply@github.com>2020-04-18 16:57:57 -0700
commitd9992a778faa6688143a537d802b3078416c0a7a (patch)
treeabb58e7b8709f867f2b19822f3a58d32fe39005b /var
parentd640bf899a36d5e82de823c1fb46f2e2c7a4a6bc (diff)
downloadspack-d9992a778faa6688143a537d802b3078416c0a7a.tar.gz
spack-d9992a778faa6688143a537d802b3078416c0a7a.tar.bz2
spack-d9992a778faa6688143a537d802b3078416c0a7a.tar.xz
spack-d9992a778faa6688143a537d802b3078416c0a7a.zip
CEED v3.0 release (#15500)
* [mfem] A few updates: add 'strumpack' variant; add 'zlib' variant (same as 'gzstream'); fix optmization flag for v4.0. * [mfem] flake8 fix * [mfem] Add version 4.1 * [mfem] Add/tweak some 'conflicts' directives. * [gslib] Add new release versions + 'develop' version. * [petsc] Restrict hdf5 version to <= 1.10.99 since 1.12.0 fails * [metis] Use the original metis url for v4.0.3. * [conduit] Remove restrictions to the used hdf5 variant to allow building with other packages that use hdf5, e.g. petsc. * [mfem] Few updates: * Replace the 'gzstream' variant with 'zlib' variant. * Do not add system library paths with -L flags. * Allow '+pumi+shared' variant. * Update the 'test_builds.sh' script. * [occa] Add version 1.0.9. * [mfem] Some OCCA and RAJA updates. * [gslib] Fix the build for new versions of the library. * [mfem] Add 'gslib' variant for GSLIB. * [mfem] Add 'cuda' variant. * [mfem] Add 'libceed' variant + a few more tweaks. * [mfem] Add 'umpire' variant. * [ceed] Add a draft for v3.0. Not tested. Just made sure that concretization works for 'ceed' and 'ceed+cuda'. * [nek] Fix Nek5000/NekCEM * [nek] Add Nek5000-v19 & polishing Nek packages * [flake8] Fix flake8 failure * petsc: use of HDF5 does not care about +hl+fortran * [petsc] Temporarily allow any hypre version with petsc@develop. [ceed] Remove the requirement for hypre@develop. * [libceed] Do not explicitly set NVCCFLAGS for v0.5 and later. * [laghos] Add version 3.0, pointing to dev branch for now. Do not set CXX at the make command line. Simplify the dependecy directives a little. [ceed] Use laghos v3.0 for ceed v3.0.0. * [laghos] Keep the injection of CXX in the makefile for laghos versions <= 2.0. * [nekcem] Recovert hash-versions used by older versions of the 'ceed' package. * [occa] Disable hip autodetection because it fails on some machines. * [laghos] Update v3.0 with the actual release source. * [suite-sparse] Explicitly add the c11 flag to CFLAGS. * Update package.py (#15749) * [magma] Add forgotten specification of the 'cuda_arch' variant. * [ceed] Use magma v2.5.3 for ceed v3.0. * libceed-0.6 * mfem: depend on libceed 0.6:, not 0.6.0: * [libceed] Add 'magma' variant -- enable MAGMA backend. * [ceed] In v3.0, use '+magma' variant of libceed when cuda is enabled. * Initial package for Remhos (needs to be updated with actual sha256 * Adding Remhos to CEED-3.0, for now @develop * petsc: add 3.13.0 (using petsc-lite) and 3.12.5 * ceed: update to petsc@3.13.0:3.13.99 * Temporary fix * [nekcem] Add hash-version for ceed v3.0. * [nek5000] Simplify source urls. * [nektools] Use the same sources and versions as in nek5000. * [ceed] Update Nek-related package versions. * libceed: add v0.6 portabilty fix * libceed: better v0.6 portabilty fix * Adding Remhos 1.0 release in CEED-3.0 * Updating hash for Remhos-1.0 * [petsc] Add cuda variant. * [libceed] Flake8 fix. * [petsc] Add cuda variant. * [ceed] Fix the OCCA version to 1.0.9. Enable petsc+cuda when compiling ceed@3.0.0+cuda. * nek5000: fix python 2.7+ syntax * [laghos] Fix testing. * [remhos] Fix testing. * [remhos] For testing use the 'tests' target instead of 'test'. * Add/update the maintainers for ceed, libceed, mfem, laghos, and remhos. * [ceed] Remove unnecessary dependencies. * libceed: activate AVX when supported Co-authored-by: Thilina Rathnayake <thilinarmtb@gmail.com> Co-authored-by: Jed Brown <jed@jedbrown.org> Co-authored-by: Stan Tomov <tomov@eecs.utk.edu> Co-authored-by: Tzanio <tzanio@llnl.gov>
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/ceed/package.py59
-rw-r--r--var/spack/repos/builtin/packages/conduit/package.py8
-rw-r--r--var/spack/repos/builtin/packages/gslib/package.py31
-rw-r--r--var/spack/repos/builtin/packages/laghos/package.py40
-rw-r--r--var/spack/repos/builtin/packages/libceed/package.py22
-rw-r--r--var/spack/repos/builtin/packages/magma/package.py2
-rw-r--r--var/spack/repos/builtin/packages/metis/package.py8
-rw-r--r--var/spack/repos/builtin/packages/mfem/package.py222
-rwxr-xr-xvar/spack/repos/builtin/packages/mfem/test_builds.sh115
-rw-r--r--var/spack/repos/builtin/packages/nek5000/package.py29
-rw-r--r--var/spack/repos/builtin/packages/nekbone/package.py6
-rw-r--r--var/spack/repos/builtin/packages/nekcem/package.py7
-rw-r--r--var/spack/repos/builtin/packages/nektools/package.py7
-rw-r--r--var/spack/repos/builtin/packages/occa/package.py6
-rw-r--r--var/spack/repos/builtin/packages/petsc/package.py8
-rw-r--r--var/spack/repos/builtin/packages/remhos/package.py54
-rw-r--r--var/spack/repos/builtin/packages/suite-sparse/package.py8
17 files changed, 470 insertions, 162 deletions
diff --git a/var/spack/repos/builtin/packages/ceed/package.py b/var/spack/repos/builtin/packages/ceed/package.py
index 3b47deb25b..b5ab233e94 100644
--- a/var/spack/repos/builtin/packages/ceed/package.py
+++ b/var/spack/repos/builtin/packages/ceed/package.py
@@ -16,15 +16,19 @@ class Ceed(BundlePackage):
homepage = "https://ceed.exascaleproject.org"
- version('2.0')
+ maintainers = ['jedbrown', 'v-dobrev', 'tzanio']
+
+ version('3.0.0')
+ version('2.0.0')
+ version('1.0.0')
variant('cuda', default=False,
- description='Build MAGMA; enable CUDA support in libCEED and OCCA')
- variant('mfem', default=True, description='Build MFEM and Laghos')
+ description='Enable CUDA support')
+ variant('mfem', default=True, description='Build MFEM, Laghos and Remhos')
variant('nek', default=True,
description='Build Nek5000, GSLIB, Nekbone, and NekCEM')
variant('occa', default=True,
- description='Build OCCA; enable OCCA support in libCEED')
+ description='Enable OCCA support')
variant('petsc', default=True,
description='Build PETSc and HPGMG')
variant('pumi', default=True,
@@ -34,6 +38,11 @@ class Ceed(BundlePackage):
# TODO: Add 'int64' variant?
# LibCEED
+ # ceed-3.0
+ depends_on('libceed@0.6~cuda', when='@3.0.0~cuda')
+ depends_on('libceed@0.6+cuda+magma', when='@3.0.0+cuda')
+ depends_on('libceed@0.6+occa', when='@3.0.0+occa')
+ depends_on('libceed@0.6~occa', when='@3.0.0~occa')
# ceed-2.0
depends_on('libceed@0.4~cuda', when='@2.0.0~cuda')
depends_on('libceed@0.4+cuda', when='@2.0.0+cuda')
@@ -46,6 +55,9 @@ class Ceed(BundlePackage):
depends_on('libceed@0.2~occa', when='@1.0.0~occa')
# OCCA
+ # ceed-3.0
+ depends_on('occa@1.0.9~cuda', when='@3.0.0+occa~cuda')
+ depends_on('occa@1.0.9+cuda', when='@3.0.0+occa+cuda')
# ceed-2.0
depends_on('occa@1.0.8~cuda', when='@2.0.0+occa~cuda')
depends_on('occa@1.0.8+cuda', when='@2.0.0+occa+cuda')
@@ -54,6 +66,12 @@ class Ceed(BundlePackage):
depends_on('occa@1.0.0-alpha.5+cuda', when='@1.0.0+occa+cuda')
# Nek5000, GSLIB, Nekbone, and NekCEM
+ # ceed-3.0
+ depends_on('nek5000@19.0', when='@3.0.0+nek')
+ depends_on('nektools@19.0%gcc', when='@3.0.0+nek')
+ depends_on('gslib@1.0.6', when='@3.0.0+nek')
+ depends_on('nekbone@17.0', when='@3.0.0+nek')
+ depends_on('nekcem@c8db04b', when='@3.0.0+nek')
# ceed-2.0
depends_on('nek5000@17.0', when='@2.0.0+nek')
depends_on('nektools@17.0%gcc', when='@2.0.0+nek')
@@ -67,7 +85,17 @@ class Ceed(BundlePackage):
depends_on('nekbone@17.0', when='@1.0.0+nek')
depends_on('nekcem@0b8bedd', when='@1.0.0+nek')
- # PETSc, HPGMG
+ # PETSc
+ # ceed-3.0
+ depends_on('petsc+cuda', when='@3.0.0+petsc+cuda')
+ # For a +quickbuild we disable hdf5, and superlu-dist in PETSc.
+ depends_on('petsc@3.13.0:3.13.99~hdf5~superlu-dist',
+ when='@3.0.0+petsc+quickbuild')
+ depends_on('petsc@3.13.0:3.13.99+mpi+double~int64', when='@3.0.0+petsc~mfem')
+ # The mfem petsc examples need the petsc variants +hypre, +suite-sparse,
+ # and +mumps:
+ depends_on('petsc@3.13.0:3.13.99+mpi+hypre+suite-sparse+mumps+double~int64',
+ when='@3.0.0+petsc+mfem')
# ceed-2.0
# For a +quickbuild we disable hdf5, and superlu-dist in PETSc.
# Ideally, these can be turned into recommendations to Spack for
@@ -94,18 +122,37 @@ class Ceed(BundlePackage):
depends_on('hpgmg@a0a5510df23b+fe', when='@1.0.0+petsc')
# MAGMA
+ # ceed-3.0
+ depends_on('magma@2.5.3', when='@3.0.0+cuda')
# ceed-2.0
depends_on('magma@2.5.0', when='@2.0.0+cuda')
# ceed-1.0
depends_on('magma@2.3.0', when='@1.0.0+cuda')
# PUMI
+ # ceed-3.0
+ depends_on('pumi@2.2.2', when='@3.0.0+pumi')
# ceed-2.0
depends_on('pumi@2.2.0', when='@2.0.0+pumi')
# ceed-1.0
depends_on('pumi@2.1.0', when='@1.0.0+pumi')
- # MFEM, Laghos
+ # MFEM, Laghos, Remhos
+ # ceed-3.0
+ depends_on('mfem@4.1.0+mpi+examples+miniapps', when='@3.0.0+mfem~petsc')
+ depends_on('mfem@4.1.0+mpi+petsc+examples+miniapps',
+ when='@3.0.0+mfem+petsc')
+ depends_on('mfem@4.1.0+pumi', when='@3.0.0+mfem+pumi')
+ depends_on('mfem@4.1.0+gslib', when='@3.0.0+mfem+nek')
+ depends_on('mfem@4.1.0+libceed', when='@3.0.0+mfem')
+ depends_on('mfem@4.1.0+cuda', when='@3.0.0+mfem+cuda')
+ depends_on('mfem@4.1.0+occa', when='@3.0.0+mfem+occa')
+ depends_on('laghos@3.0', when='@3.0.0+mfem')
+ depends_on('remhos@1.0', when='@3.0.0+mfem')
+
+ # If using gcc version <= 4.8 build suite-sparse version <= 5.1.0
+ depends_on('suite-sparse@:5.1.0', when='@3.0.0%gcc@:4.8+mfem+petsc')
+
# ceed-2.0
depends_on('mfem@3.4.0+mpi+examples+miniapps', when='@2.0.0+mfem~petsc')
depends_on('mfem@3.4.0+mpi+petsc+examples+miniapps',
diff --git a/var/spack/repos/builtin/packages/conduit/package.py b/var/spack/repos/builtin/packages/conduit/package.py
index eecc15d798..ed1bd4f3d3 100644
--- a/var/spack/repos/builtin/packages/conduit/package.py
+++ b/var/spack/repos/builtin/packages/conduit/package.py
@@ -107,10 +107,10 @@ class Conduit(Package):
#
# Use HDF5 1.8, for wider output compatibly
# variants reflect we are not using hdf5's mpi or fortran features.
- depends_on("hdf5@1.8.19:1.8.999~cxx~mpi~fortran", when="+hdf5+hdf5_compat+shared")
- depends_on("hdf5@1.8.19:1.8.999~shared~cxx~mpi~fortran", when="+hdf5+hdf5_compat~shared")
- depends_on("hdf5~cxx~mpi~fortran", when="+hdf5~hdf5_compat+shared")
- depends_on("hdf5~shared~cxx~mpi~fortran", when="+hdf5~hdf5_compat~shared")
+ depends_on("hdf5@1.8.19:1.8.999~cxx", when="+hdf5+hdf5_compat+shared")
+ depends_on("hdf5@1.8.19:1.8.999~shared~cxx", when="+hdf5+hdf5_compat~shared")
+ depends_on("hdf5~cxx", when="+hdf5~hdf5_compat+shared")
+ depends_on("hdf5~shared~cxx", when="+hdf5~hdf5_compat~shared")
###############
# Silo
diff --git a/var/spack/repos/builtin/packages/gslib/package.py b/var/spack/repos/builtin/packages/gslib/package.py
index 1bdffc3ecf..37827a8c1f 100644
--- a/var/spack/repos/builtin/packages/gslib/package.py
+++ b/var/spack/repos/builtin/packages/gslib/package.py
@@ -12,6 +12,10 @@ class Gslib(Package):
homepage = "https://github.com/gslib/gslib"
git = "https://github.com/gslib/gslib.git"
+ version('develop', branch='master')
+ version('1.0.6', tag='v1.0.6')
+ version('1.0.5', tag='v1.0.5')
+ version('1.0.4', tag='v1.0.4')
version('1.0.3', tag='v1.0.3')
version('1.0.2', tag='v1.0.2')
version('1.0.1', tag='v1.0.1')
@@ -32,7 +36,7 @@ class Gslib(Package):
lib_dir = 'lib'
libname = 'libgs.a'
- if self.version == Version('1.0.1'):
+ if self.spec.satisfies('@1.0.1:'):
makefile = 'Makefile'
else:
makefile = 'src/Makefile'
@@ -56,16 +60,19 @@ class Gslib(Package):
ld_flags = blas.ld_flags
filter_file(r'\$\(LDFLAGS\)', ld_flags, makefile)
- if self.version == Version('1.0.1'):
+ if self.spec.satisfies('@1.0.3:'):
make(make_cmd)
- make('install')
- install_tree(lib_dir, prefix.lib)
- elif self.version == Version('1.0.0'):
- with working_dir(src_dir):
+ make('install', 'INSTALL_ROOT=%s' % self.prefix)
+ else:
+ if self.spec.satisfies('@1.0.1:'):
make(make_cmd)
- mkdir(prefix.lib)
- install(libname, prefix.lib)
-
- # Should only install the headers (this will be fixed in gslib on
- # future releases).
- install_tree(src_dir, prefix.include)
+ make('install')
+ install_tree(lib_dir, prefix.lib)
+ elif self.version == Version('1.0.0'):
+ with working_dir(src_dir):
+ make(make_cmd)
+ mkdir(prefix.lib)
+ install(libname, prefix.lib)
+ # Should only install the headers (this will be fixed in gslib on
+ # future releases).
+ install_tree(src_dir, prefix.include)
diff --git a/var/spack/repos/builtin/packages/laghos/package.py b/var/spack/repos/builtin/packages/laghos/package.py
index 438da2f5cf..e5a828dbe8 100644
--- a/var/spack/repos/builtin/packages/laghos/package.py
+++ b/var/spack/repos/builtin/packages/laghos/package.py
@@ -18,7 +18,9 @@ class Laghos(MakefilePackage):
url = "https://github.com/CEED/Laghos/archive/v1.0.tar.gz"
git = "https://github.com/CEED/Laghos.git"
- version('master', branch='master')
+ maintainers = ['v-dobrev', 'tzanio', 'vladotomov']
+
+ version('develop', branch='master')
version('3.0', sha256='4db56286e15b42ecdc8d540c4888a7dec698b019df9c7ccb8319b7ea1f92d8b4')
version('2.0', sha256='dd3632d5558889beec2cd3c49eb60f633f99e6d886ac868731610dd006c44c14')
version('1.1', sha256='53b9bfe2af263c63eb4544ca1731dd26f40b73a0d2775a9883db51821bf23b7f')
@@ -26,20 +28,15 @@ class Laghos(MakefilePackage):
variant('metis', default=True, description='Enable/disable METIS support')
- depends_on('metis@4.0.3:', when='+metis')
+ depends_on('mfem+mpi+metis', when='+metis')
+ depends_on('mfem+mpi~metis', when='~metis')
+ depends_on('mfem@develop', when='@develop')
+ depends_on('mfem@4.1.0:', when='@3.0')
# Recommended mfem version for laghos v2.0 is: ^mfem@3.4.1-laghos-v2.0
- depends_on('mfem@3.4.0:+mpi+metis', when='@2.0+metis')
- depends_on('mfem@3.4.0:+mpi~metis', when='@2.0~metis')
-
+ depends_on('mfem@3.4.0:', when='@2.0')
# Recommended mfem version for laghos v1.x is: ^mfem@3.3.1-laghos-v1.0
- depends_on('mfem@3.3.1-laghos-v1.0:+mpi+metis', when='@1.0,1.1+metis')
- depends_on('mfem@3.3.1-laghos-v1.0:+mpi~metis', when='@1.0,1.1~metis')
-
- # 3.0 requirements
- depends_on('hypre@2.11.2', when='@3.0:')
- depends_on('mfem@develop+mpi+metis', when='@3.0:+metis')
- depends_on('mfem@develop+mpi~metis', when='@3.0:~metis')
+ depends_on('mfem@3.3.1-laghos-v1.0:', when='@1.0,1.1')
@property
def build_targets(self):
@@ -49,27 +46,18 @@ class Laghos(MakefilePackage):
targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
- targets.append('CXX=%s' % spec['mpi'].mpicxx)
-
- if self.version >= ver('3.0'):
- targets.append('HYPRE_DIR=%s' % spec['hypre'].prefix)
- if '+metis' in self.spec:
- targets.append('METIS_DIR=%s' % spec['metis'].prefix)
+ if spec.satisfies('@:2.0'):
+ targets.append('CXX=%s' % spec['mpi'].mpicxx)
return targets
# See lib/spack/spack/build_systems/makefile.py
def check(self):
- targets = []
- spec = self.spec
-
- targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
- targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
- targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
-
with working_dir(self.build_directory):
- make('test', *targets)
+ make('test', *self.build_targets)
def install(self, spec, prefix):
mkdirp(prefix.bin)
install('laghos', prefix.bin)
+
+ install_time_test_callbacks = []
diff --git a/var/spack/repos/builtin/packages/libceed/package.py b/var/spack/repos/builtin/packages/libceed/package.py
index 64d04a7b89..36d46dae0b 100644
--- a/var/spack/repos/builtin/packages/libceed/package.py
+++ b/var/spack/repos/builtin/packages/libceed/package.py
@@ -12,7 +12,10 @@ class Libceed(Package):
homepage = "https://github.com/CEED/libCEED"
git = "https://github.com/CEED/libCEED.git"
+ maintainers = ['jedbrown', 'v-dobrev', 'tzanio']
+
version('develop', branch='master')
+ version('0.6', commit='c7f533e01e2f3f6720fbf37aac2af2ffed225f60') # tag v0.6 + small portability fixes
version('0.5', tag='v0.5')
version('0.4', tag='v0.4')
version('0.2', tag='v0.2')
@@ -22,8 +25,10 @@ class Libceed(Package):
variant('cuda', default=False, description='Enable CUDA support')
variant('debug', default=False, description='Enable debug build')
variant('libxsmm', default=False, description='Enable LIBXSMM backend')
+ variant('magma', default=False, description='Enable MAGMA backend')
conflicts('+libxsmm', when='@:0.2')
+ conflicts('+magma', when='@:0.5')
depends_on('cuda', when='+cuda')
@@ -35,6 +40,8 @@ class Libceed(Package):
depends_on('libxsmm', when='+libxsmm')
+ depends_on('magma', when='+magma')
+
patch('pkgconfig-version-0.4.diff', when='@0.4')
# occa: do not occaFree kernels
@@ -78,12 +85,16 @@ class Libceed(Package):
opt = '-O -g'
makeopts += ['OPT=%s' % opt]
+ if 'avx' in self.spec.target:
+ makeopts.append('AVX=1')
+
if '+cuda' in spec:
makeopts += ['CUDA_DIR=%s' % spec['cuda'].prefix]
- nvccflags = ['-ccbin %s -Xcompiler "%s" -Xcompiler %s' %
- (compiler.cxx, opt, compiler.cc_pic_flag)]
- nvccflags = ' '.join(nvccflags)
- makeopts += ['NVCCFLAGS=%s' % nvccflags]
+ if spec.satisfies('@:0.4'):
+ nvccflags = ['-ccbin %s -Xcompiler "%s" -Xcompiler %s' %
+ (compiler.cxx, opt, compiler.cc_pic_flag)]
+ nvccflags = ' '.join(nvccflags)
+ makeopts += ['NVCCFLAGS=%s' % nvccflags]
else:
# Disable CUDA auto-detection:
makeopts += ['CUDA_DIR=/disable-cuda']
@@ -91,6 +102,9 @@ class Libceed(Package):
if '+libxsmm' in spec:
makeopts += ['XSMM_DIR=%s' % spec['libxsmm'].prefix]
+ if '+magma' in spec:
+ makeopts += ['MAGMA_DIR=%s' % spec['magma'].prefix]
+
return makeopts
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/magma/package.py b/var/spack/repos/builtin/packages/magma/package.py
index b2ab37a318..16b7c777c1 100644
--- a/var/spack/repos/builtin/packages/magma/package.py
+++ b/var/spack/repos/builtin/packages/magma/package.py
@@ -30,6 +30,8 @@ class Magma(CMakePackage, CudaPackage):
variant('shared', default=True,
description='Enable shared library')
variant('cuda', default=True, description='Build with CUDA')
+ variant('cuda_arch', default='none', multi=True,
+ description='Specify CUDA architecture(s)')
depends_on('blas')
depends_on('lapack')
diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py
index ad0f78566b..12d1223a72 100644
--- a/var/spack/repos/builtin/packages/metis/package.py
+++ b/var/spack/repos/builtin/packages/metis/package.py
@@ -18,14 +18,18 @@ class Metis(Package):
partitioning schemes."""
#
- # the previous metis website http://glaros.dtc.umn.edu/gkhome/metis/metis
- # no longer exists. This is a github mirror that provides metis 5.1.0
+ # The original metis website: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
+ # is down sometimes. This is a github mirror that provides metis 5.1.0
#
homepage = "https://github.com/scivision/METIS/"
url = "https://github.com/scivision/METIS/raw/master/metis-5.1.0.tar.gz"
version('5.1.0', sha256='76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2')
+ # For v4.0.3, use the original metis website since this version is not
+ # mirrored at the above github location.
+ version('4.0.3', url='http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-4.0.3.tar.gz',
+ sha256='5efa35de80703c1b2c4d0de080fafbcf4e0d363a21149a1ad2f96e0144841a55')
variant('shared', default=True, description='Enables the build of shared libraries.')
variant('gdb', default=False, description='Enables gdb support (version 5+).')
diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py
index f754cd915e..5f6d8b5c0a 100644
--- a/var/spack/repos/builtin/packages/mfem/package.py
+++ b/var/spack/repos/builtin/packages/mfem/package.py
@@ -16,8 +16,8 @@ class Mfem(Package):
homepage = 'http://www.mfem.org'
git = 'https://github.com/mfem/mfem.git'
- maintainers = ['goxberry', 'tzanio', 'markcmiller86', 'acfisher',
- 'v-dobrev']
+ maintainers = ['v-dobrev', 'tzanio', 'acfisher',
+ 'goxberry', 'markcmiller86']
# Recommended mfem builds to test when updating this file: see the shell
# script 'test_builds.sh' in the same directory as this file.
@@ -45,13 +45,17 @@ class Mfem(Package):
# other version.
version('develop', branch='master')
+ version('4.1.0',
+ '4c83fdcf083f8e2f5b37200a755db843cdb858811e25a8486ad36b2cbec0e11d',
+ url='https://bit.ly/mfem-4-1', extension='.tar.gz',
+ preferred=True)
+
# Tagged development version used by xSDK
version('4.0.1-xsdk', commit='c55c80d17b82d80de04b849dd526e17044f8c99a')
version('4.0.0',
'df5bdac798ea84a263979f6fbf79de9013e1c55562f95f98644c3edcacfbc727',
- url='https://bit.ly/mfem-4-0', extension='.tar.gz',
- preferred=True)
+ url='https://bit.ly/mfem-4-0', extension='.tar.gz')
# Tagged development version used by the laghos package:
version('3.4.1-laghos-v2.0', tag='laghos-v2.0')
@@ -96,8 +100,13 @@ class Mfem(Package):
description='Required for MPI parallelism')
variant('openmp', default=False,
description='Enable OpenMP parallelism')
+ variant('cuda', default=False, description='Enable CUDA support')
+ variant('cuda_arch', default='sm_60',
+ description='CUDA architecture to compile for')
variant('occa', default=False, description='Enable OCCA backend')
variant('raja', default=False, description='Enable RAJA backend')
+ variant('libceed', default=False, description='Enable libCEED backend')
+ variant('umpire', default=False, description='Enable Umpire support')
variant('threadsafe', default=False,
description=('Enable thread safe features.'
@@ -105,9 +114,8 @@ class Mfem(Package):
' May cause minor performance issues.'))
variant('superlu-dist', default=False,
description='Enable MPI parallel, sparse direct solvers')
- # Placeholder for STRUMPACK, support added in mfem v3.3.2:
- # variant('strumpack', default=False,
- # description='Enable support for STRUMPACK')
+ variant('strumpack', default=False,
+ description='Enable support for STRUMPACK')
variant('suite-sparse', default=False,
description='Enable serial, sparse direct solvers')
variant('petsc', default=False,
@@ -116,6 +124,8 @@ class Mfem(Package):
description='Enable Sundials time integrators')
variant('pumi', default=False,
description='Enable functionality based on PUMI')
+ variant('gslib', default=False,
+ description='Enable functionality based on GSLIB')
variant('mpfr', default=False,
description='Enable precise, 1D quadrature rules')
variant('lapack', default=False,
@@ -126,7 +136,7 @@ class Mfem(Package):
description='Enable Cubit/Genesis reader')
variant('conduit', default=False,
description='Enable binary data I/O using Conduit')
- variant('gzstream', default=True,
+ variant('zlib', default=True,
description='Support zip\'d streams for I/O')
variant('gnutls', default=False,
description='Enable secure sockets using GnuTLS')
@@ -144,43 +154,58 @@ class Mfem(Package):
conflicts('~static~shared')
conflicts('~threadsafe', when='+openmp')
+ conflicts('+cuda', when='@:3.99.99')
conflicts('+netcdf', when='@:3.1')
conflicts('+superlu-dist', when='@:3.1')
+ # STRUMPACK support was added in mfem v3.3.2, however, here we allow only
+ # strumpack v3 support which is available starting with mfem v4.0:
+ conflicts('+strumpack', when='@:3.99.99')
conflicts('+gnutls', when='@:3.1')
- conflicts('+gzstream', when='@:3.2')
+ conflicts('+zlib', when='@:3.2')
conflicts('+mpfr', when='@:3.2')
conflicts('+petsc', when='@:3.2')
conflicts('+sundials', when='@:3.2')
conflicts('+pumi', when='@:3.3.2')
+ conflicts('+gslib', when='@:4.0.99')
conflicts('timer=mac', when='@:3.3.0')
conflicts('timer=mpi', when='@:3.3.0')
conflicts('~metis+mpi', when='@:3.3.0')
conflicts('+metis~mpi', when='@:3.3.0')
conflicts('+conduit', when='@:3.3.2')
+ conflicts('+occa', when='mfem@:3.99.99')
+ conflicts('+raja', when='mfem@:3.99.99')
+ conflicts('+libceed', when='mfem@:4.0.99')
+ conflicts('+umpire', when='mfem@:4.0.99')
conflicts('+superlu-dist', when='~mpi')
+ conflicts('+strumpack', when='~mpi')
conflicts('+petsc', when='~mpi')
conflicts('+pumi', when='~mpi')
conflicts('timer=mpi', when='~mpi')
- conflicts('+pumi', when='+shared')
-
depends_on('mpi', when='+mpi')
- depends_on('hypre@2.10.0:2.13.999', when='@:3.3.999+mpi')
+ depends_on('hypre@2.10.0:2.13.99', when='@:3.3.99+mpi')
depends_on('hypre', when='@3.4:+mpi')
depends_on('metis', when='+metis')
depends_on('blas', when='+lapack')
depends_on('lapack@3.0:', when='+lapack')
+ depends_on('cuda', when='+cuda')
+
depends_on('sundials@2.7.0', when='@:3.3.0+sundials~mpi')
depends_on('sundials@2.7.0+mpi+hypre', when='@:3.3.0+sundials+mpi')
depends_on('sundials@2.7.0:', when='@3.3.2:+sundials~mpi')
depends_on('sundials@2.7.0:+mpi+hypre', when='@3.3.2:+sundials+mpi')
- depends_on('sundials@5.0.0', when='@4.0.1-xsdk:+sundials~mpi')
- depends_on('pumi', when='+pumi')
+ depends_on('sundials@5.0.0:', when='@4.0.1-xsdk:+sundials~mpi')
+ depends_on('sundials@5.0.0:+mpi+hypre', when='@4.0.1-xsdk:+sundials+mpi')
+ depends_on('pumi', when='+pumi~shared')
+ depends_on('pumi+shared', when='+pumi+shared')
+ depends_on('gslib@1.0.5:+mpi', when='+gslib+mpi')
+ depends_on('gslib@1.0.5:~mpi~mpiio', when='+gslib~mpi')
depends_on('suite-sparse', when='+suite-sparse')
depends_on('superlu-dist', when='+superlu-dist')
+ depends_on('strumpack@3.0.0:', when='+strumpack')
# The PETSc tests in MFEM will fail if PETSc is not configured with
# SuiteSparse and MUMPS. On the other hand, if we require the variants
# '+suite-sparse+mumps' of PETSc, the xsdk package concretization fails.
@@ -191,23 +216,32 @@ class Mfem(Package):
depends_on('mpfr', when='+mpfr')
depends_on('netcdf-c@4.1.3:', when='+netcdf')
depends_on('unwind', when='+libunwind')
- depends_on('zlib', when='+gzstream')
+ depends_on('zlib', when='+zlib')
depends_on('gnutls', when='+gnutls')
depends_on('conduit@0.3.1:,master:', when='+conduit')
depends_on('conduit+mpi', when='+conduit+mpi')
# The MFEM 4.0.0 SuperLU interface fails when using hypre@2.16.0 and
# superlu-dist@6.1.1. See https://github.com/mfem/mfem/issues/983.
- conflicts('+hypre+superlu-dist',
- when='mfem@4.0.0 ^hypre@2.16.0 ^superlu-dist@6.1.1')
+ # This issue was resolved in v4.1.
+ conflicts('+superlu-dist',
+ when='mfem@:4.0.99 ^hypre@2.16.0: ^superlu-dist@6:')
+ # The STRUMPACK v3 interface in MFEM seems to be broken as of MFEM v4.1
+ # when using hypre version >= 2.16.0:
+ conflicts('+strumpack', when='mfem@4.0.0: ^hypre@2.16.0:')
- # The OCCA backend is first available in MFEM 4.0.0
- depends_on('occa', when='mfem@4.0.0:+occa')
- conflicts('+occa', when='mfem@:3.99.999')
+ depends_on('occa@1.0.8:', when='+occa')
+ depends_on('occa+cuda', when='+occa+cuda')
- # The RAJA backend is first available in MFEM 4.0.0
- depends_on('raja', when='mfem@4.0.0:+raja')
- conflicts('+raja', when='mfem@:3.99.999')
+ depends_on('raja@0.10.0:', when='@4.0.1:+raja')
+ depends_on('raja@0.7.0:0.9.0', when='@4.0.0+raja')
+ depends_on('raja+cuda', when='+raja+cuda')
+
+ depends_on('libceed@0.6:', when='+libceed')
+ depends_on('libceed+cuda', when='+libceed+cuda')
+
+ depends_on('umpire@2.0.0:', when='+umpire')
+ depends_on('umpire+cuda', when='+umpire+cuda')
patch('mfem_ppc_build.patch', when='@3.2:3.3.0 arch=ppc64le')
patch('mfem-3.4.patch', when='@3.4.0')
@@ -237,18 +271,47 @@ class Mfem(Package):
def yes_no(varstr):
return 'YES' if varstr in self.spec else 'NO'
+ # See also find_system_libraries in lib/spack/llnl/util/filesystem.py
+ # where the same list of paths is used.
+ sys_lib_paths = [
+ '/lib64',
+ '/lib',
+ '/usr/lib64',
+ '/usr/lib',
+ '/usr/local/lib64',
+ '/usr/local/lib']
+
+ def is_sys_lib_path(dir):
+ return dir in sys_lib_paths
+
+ xcompiler = ''
+ xlinker = '-Wl,'
+ if '+cuda' in spec:
+ xcompiler = '-Xcompiler='
+ xlinker = '-Xlinker='
+ cuda_arch = spec.variants['cuda_arch'].value
+
# We need to add rpaths explicitly to allow proper export of link flags
# from within MFEM.
# Similar to spec[pkg].libs.ld_flags but prepends rpath flags too.
+ # Also does not add system library paths as defined by 'sys_lib_paths'
+ # above -- this is done to avoid issues like this:
+ # https://github.com/mfem/mfem/issues/1088.
def ld_flags_from_library_list(libs_list):
- flags = ['-Wl,-rpath,%s' % dir for dir in libs_list.directories]
- flags += [libs_list.ld_flags]
+ flags = ['%s-rpath,%s' % (xlinker, dir)
+ for dir in libs_list.directories
+ if not is_sys_lib_path(dir)]
+ flags += ['-L%s' % dir for dir in libs_list.directories
+ if not is_sys_lib_path(dir)]
+ flags += [libs_list.link_flags]
return ' '.join(flags)
def ld_flags_from_dirs(pkg_dirs_list, pkg_libs_list):
- flags = ['-Wl,-rpath,%s' % dir for dir in pkg_dirs_list]
- flags += ['-L%s' % dir for dir in pkg_dirs_list]
+ flags = ['%s-rpath,%s' % (xlinker, dir) for dir in pkg_dirs_list
+ if not is_sys_lib_path(dir)]
+ flags += ['-L%s' % dir for dir in pkg_dirs_list
+ if not is_sys_lib_path(dir)]
flags += ['-l%s' % lib for lib in pkg_libs_list]
return ' '.join(flags)
@@ -265,6 +328,9 @@ class Mfem(Package):
if ('+metis' in spec) and spec['metis'].satisfies('@5:'):
metis5_str = 'YES'
+ zlib_var = 'MFEM_USE_ZLIB' if (spec.satisfies('@4.1.0:')) else \
+ 'MFEM_USE_GZSTREAM'
+
options = [
'PREFIX=%s' % prefix,
'MFEM_USE_MEMALLOC=YES',
@@ -273,32 +339,41 @@ class Mfem(Package):
# compiler is defined by env['SPACK_CXX'].
'CXX=%s' % env['CXX'],
'MFEM_USE_LIBUNWIND=%s' % yes_no('+libunwind'),
- 'MFEM_USE_GZSTREAM=%s' % yes_no('+gzstream'),
+ '%s=%s' % (zlib_var, yes_no('+zlib')),
'MFEM_USE_METIS=%s' % yes_no('+metis'),
'MFEM_USE_METIS_5=%s' % metis5_str,
'MFEM_THREAD_SAFE=%s' % yes_no('+threadsafe'),
'MFEM_USE_MPI=%s' % yes_no('+mpi'),
'MFEM_USE_LAPACK=%s' % yes_no('+lapack'),
'MFEM_USE_SUPERLU=%s' % yes_no('+superlu-dist'),
+ 'MFEM_USE_STRUMPACK=%s' % yes_no('+strumpack'),
'MFEM_USE_SUITESPARSE=%s' % yes_no('+suite-sparse'),
'MFEM_USE_SUNDIALS=%s' % yes_no('+sundials'),
'MFEM_USE_PETSC=%s' % yes_no('+petsc'),
'MFEM_USE_PUMI=%s' % yes_no('+pumi'),
+ 'MFEM_USE_GSLIB=%s' % yes_no('+gslib'),
'MFEM_USE_NETCDF=%s' % yes_no('+netcdf'),
'MFEM_USE_MPFR=%s' % yes_no('+mpfr'),
'MFEM_USE_GNUTLS=%s' % yes_no('+gnutls'),
'MFEM_USE_OPENMP=%s' % yes_no('+openmp'),
- 'MFEM_USE_CONDUIT=%s' % yes_no('+conduit')]
-
- if spec.satisfies('@4.0.0:'):
- options += ['MFEM_USE_OCCA=%s' % yes_no('+occa'),
- 'MFEM_USE_RAJA=%s' % yes_no('+raja')]
+ 'MFEM_USE_CONDUIT=%s' % yes_no('+conduit'),
+ 'MFEM_USE_CUDA=%s' % yes_no('+cuda'),
+ 'MFEM_USE_OCCA=%s' % yes_no('+occa'),
+ 'MFEM_USE_RAJA=%s' % yes_no('+raja'),
+ 'MFEM_USE_CEED=%s' % yes_no('+libceed'),
+ 'MFEM_USE_UMPIRE=%s' % yes_no('+umpire')]
cxxflags = spec.compiler_flags['cxxflags']
- if self.spec.satisfies('@4.0:'):
- cxxflags.append(self.compiler.cxx11_flag)
if cxxflags:
+ cxxflags = [(xcompiler + flag) for flag in cxxflags]
+ if '+cuda' in spec:
+ cxxflags += [
+ '-x=cu --expt-extended-lambda -arch=%s' % cuda_arch,
+ '-ccbin %s' % (spec['mpi'].mpicxx if '+mpi' in spec
+ else env['CXX'])]
+ if self.spec.satisfies('@4.0.0:'):
+ cxxflags.append(self.compiler.cxx11_flag)
# The cxxflags are set by the spack c++ compiler wrapper. We also
# set CXXFLAGS explicitly, for clarity, and to properly export the
# cxxflags in the variable MFEM_CXXFLAGS in config.mk.
@@ -325,7 +400,7 @@ class Mfem(Package):
options += [
'METIS_OPT=-I%s' % spec['metis'].prefix.include,
'METIS_LIB=%s' %
- ld_flags_from_dirs([spec['metis'].prefix.lib], ['metis'])]
+ ld_flags_from_library_list(spec['metis'].libs)]
if '+lapack' in spec:
lapack_blas = spec['lapack'].libs + spec['blas'].libs
@@ -339,11 +414,42 @@ class Mfem(Package):
'SUPERLU_OPT=-I%s -I%s' %
(spec['superlu-dist'].prefix.include,
spec['parmetis'].prefix.include),
- 'SUPERLU_LIB=-L%s -L%s -lsuperlu_dist -lparmetis %s' %
- (spec['superlu-dist'].prefix.lib,
- spec['parmetis'].prefix.lib,
+ 'SUPERLU_LIB=%s %s' %
+ (ld_flags_from_dirs([spec['superlu-dist'].prefix.lib,
+ spec['parmetis'].prefix.lib],
+ ['superlu_dist', 'parmetis']),
ld_flags_from_library_list(lapack_blas))]
+ if '+strumpack' in spec:
+ strumpack = spec['strumpack']
+ sp_opt = ['-I%s' % strumpack.prefix.include]
+ sp_lib = [ld_flags_from_library_list(strumpack.libs)]
+ # Parts of STRUMPACK use fortran, so we need to link with the
+ # fortran library and also the MPI fortran library:
+ if '~shared' in strumpack:
+ if os.path.basename(env['FC']) == 'gfortran':
+ sp_lib += ['-lgfortran']
+ if '^mpich' in strumpack:
+ sp_lib += ['-lmpifort']
+ elif '^openmpi' in strumpack:
+ sp_lib += ['-lmpi_mpifh']
+ if '+openmp' in strumpack:
+ sp_opt += [self.compiler.openmp_flag]
+ if '^scalapack' in strumpack:
+ scalapack = strumpack['scalapack']
+ sp_opt += ['-I%s' % scalapack.prefix.include]
+ sp_lib += [ld_flags_from_dirs([scalapack.prefix.lib],
+ ['scalapack'])]
+ if '+butterflypack' in strumpack:
+ bp = strumpack['butterflypack']
+ sp_opt += ['-I%s' % bp.prefix.include]
+ sp_lib += [ld_flags_from_dirs([bp.prefix.lib],
+ ['dbutterflypack',
+ 'zbutterflypack'])]
+ options += [
+ 'STRUMPACK_OPT=%s' % ' '.join(sp_opt),
+ 'STRUMPACK_LIB=%s' % ' '.join(sp_lib)]
+
if '+suite-sparse' in spec:
ss_spec = 'suite-sparse:' + self.suitesparse_components
options += [
@@ -359,14 +465,24 @@ class Mfem(Package):
ld_flags_from_library_list(spec[sun_spec].libs)]
if '+petsc' in spec:
- # options += ['PETSC_DIR=%s' % spec['petsc'].prefix]
options += [
'PETSC_OPT=%s' % spec['petsc'].headers.cpp_flags,
'PETSC_LIB=%s' %
ld_flags_from_library_list(spec['petsc'].libs)]
if '+pumi' in spec:
- options += ['PUMI_DIR=%s' % spec['pumi'].prefix]
+ pumi_libs = ['pumi', 'crv', 'ma', 'mds', 'apf', 'pcu', 'gmi',
+ 'parma', 'lion', 'mth', 'apf_zoltan', 'spr']
+ options += [
+ 'PUMI_OPT=-I%s' % spec['pumi'].prefix.include,
+ 'PUMI_LIB=%s' %
+ ld_flags_from_dirs([spec['pumi'].prefix.lib], pumi_libs)]
+
+ if '+gslib' in spec:
+ options += [
+ 'GSLIB_OPT=-I%s' % spec['gslib'].prefix.include,
+ 'GSLIB_LIB=%s' %
+ ld_flags_from_dirs([spec['gslib'].prefix.lib], ['gs'])]
if '+netcdf' in spec:
options += [
@@ -374,7 +490,7 @@ class Mfem(Package):
'NETCDF_LIB=%s' %
ld_flags_from_dirs([spec['netcdf-c'].prefix.lib], ['netcdf'])]
- if '+gzstream' in spec:
+ if '+zlib' in spec:
if "@:3.3.2" in spec:
options += ['ZLIB_DIR=%s' % spec['zlib'].prefix]
else:
@@ -409,20 +525,34 @@ class Mfem(Package):
if '+openmp' in spec:
options += ['OPENMP_OPT=%s' % self.compiler.openmp_flag]
+ if '+cuda' in spec:
+ options += [
+ 'CUDA_CXX=%s' % join_path(spec['cuda'].prefix, 'bin', 'nvcc'),
+ 'CUDA_ARCH=%s' % cuda_arch]
+
if '+occa' in spec:
- options += ['OCCA_DIR=%s' % spec['occa'].prefix,
- 'OCCA_OPT=-I%s' % spec['occa'].prefix.include,
+ options += ['OCCA_OPT=-I%s' % spec['occa'].prefix.include,
'OCCA_LIB=%s' %
ld_flags_from_dirs([spec['occa'].prefix.lib],
['occa'])]
if '+raja' in spec:
- options += ['RAJA_DIR=%s' % spec['raja'].prefix,
- 'RAJA_OPT=-I%s' % spec['raja'].prefix.include,
+ options += ['RAJA_OPT=-I%s' % spec['raja'].prefix.include,
'RAJA_LIB=%s' %
ld_flags_from_dirs([spec['raja'].prefix.lib],
['RAJA'])]
+ if '+libceed' in spec:
+ options += ['CEED_OPT=-I%s' % spec['libceed'].prefix.include,
+ 'CEED_LIB=%s' %
+ ld_flags_from_dirs([spec['libceed'].prefix.lib],
+ ['ceed'])]
+
+ if '+umpire' in spec:
+ options += ['UMPIRE_OPT=-I%s' % spec['umpire'].prefix.include,
+ 'UMPIRE_LIB=%s' %
+ ld_flags_from_library_list(spec['umpire'].libs)]
+
timer_ids = {'std': '0', 'posix': '2', 'mac': '4', 'mpi': '6'}
timer = spec.variants['timer'].value
if timer != 'auto':
diff --git a/var/spack/repos/builtin/packages/mfem/test_builds.sh b/var/spack/repos/builtin/packages/mfem/test_builds.sh
index 125fa0055c..4f3c3f787b 100755
--- a/var/spack/repos/builtin/packages/mfem/test_builds.sh
+++ b/var/spack/repos/builtin/packages/mfem/test_builds.sh
@@ -1,59 +1,82 @@
#!/bin/bash
+# Set a compiler to test with, e.g. '%gcc', '%clang', etc.
+compiler=''
+
+mfem='mfem'${compiler}
+mfem_dev='mfem@develop'${compiler}
+
+backends='+occa+raja+libceed'
+# Using occa@develop to help the spack concretization
+backends_specs='^occa@develop~cuda ^raja~openmp'
+
+# As of 03/20/20 +mpfr breaks one of the unit tests in both @4.1.0 and @develop,
+# so it is disabled here for now.
+# mpfr='+mpfr'
+mpfr=''
+
builds=(
# preferred version:
- 'mfem'
- 'mfem~mpi~metis~gzstream'
- 'mfem+mpi+superlu-dist+suite-sparse+petsc \
- +sundials+pumi+mpfr+netcdf+gzstream+gnutls+libunwind \
- ^hypre~internal-superlu ^petsc+suite-sparse+mumps'
- 'mfem~mpi+suite-sparse+sundials+mpfr+netcdf \
- +gzstream+gnutls+libunwind'
+ ${mfem}
+ ${mfem}'~mpi~metis~zlib'
+ # NOTE: Skip +strumpack since mfem needs hypre < 2.16.0 in that case
+ ${mfem}"$backends"'+superlu-dist+suite-sparse+petsc \
+ +sundials+pumi+gslib'${mpfr}'+netcdf+zlib+gnutls+libunwind+conduit \
+ ^petsc+suite-sparse+mumps'" $backends_specs"
+ ${mfem}'~mpi \
+ '"$backends"'+suite-sparse+sundials+gslib'${mpfr}'+netcdf \
+ +zlib+gnutls+libunwind+conduit'" $backends_specs"
# develop version:
- 'mfem@develop+shared~static'
- 'mfem@develop+shared~static~mpi~metis~gzstream'
- # TODO: Replace '^conduit~python~hdf5' with '^conduit~python' when conduit
- # is fixed to accept '^hdf5+mpi'.
- # NOTE: Skip PUMI since it conflicts with '+shared'.
- 'mfem@develop+shared~static+mpi \
- +superlu-dist+suite-sparse+petsc+sundials+mpfr+netcdf+gzstream \
- +gnutls+libunwind+conduit ^hypre~internal-superlu \
- ^petsc+suite-sparse+mumps ^conduit~python~hdf5'
- # TODO: The options '^netcdf~mpi ^hdf5@1.8.19~mpi' are added just to make
- # conduit happy.
- 'mfem@develop+shared~static~mpi \
- +suite-sparse+sundials+mpfr+netcdf+gzstream+gnutls+libunwind \
- +conduit ^conduit~python ^netcdf~mpi ^hdf5@1.8.19~mpi'
+ ${mfem_dev}'+shared~static'
+ ${mfem_dev}'+shared~static~mpi~metis~zlib'
+ # NOTE: Skip +strumpack since mfem needs hypre < 2.16.0 in that case
+ # NOTE: Shared build with +gslib works on mac but not on linux
+ ${mfem_dev}'+shared~static \
+ '"$backends"'+superlu-dist+suite-sparse+petsc \
+ +sundials+pumi'${mpfr}'+netcdf+zlib+gnutls+libunwind+conduit \
+ ^petsc+suite-sparse+mumps'" $backends_specs"
+ ${mfem_dev}'+shared~static~mpi \
+ '"$backends"'+suite-sparse+sundials'${mpfr}'+netcdf \
+ +zlib+gnutls+libunwind+conduit'" $backends_specs"
)
builds2=(
# preferred version
- 'mfem+superlu-dist'
- 'mfem+suite-sparse~mpi'
- 'mfem+suite-sparse'
- 'mfem+sundials~mpi'
- 'mfem+sundials'
- 'mfem+pumi'
- 'mfem+netcdf~mpi'
- 'mfem+netcdf'
- 'mfem+mpfr'
- 'mfem+gnutls'
- 'mfem+petsc+mpi ^hypre~internal-superlu ^petsc+suite-sparse+mumps'
+ ${mfem}"$backends $backends_specs"
+ ${mfem}'+superlu-dist'
+ # NOTE: On mac +strumpack works only with gcc, as of 03/20/20.
+ ${mfem}'+strumpack ^hypre@2.15.1'
+ ${mfem}'+suite-sparse~mpi'
+ ${mfem}'+suite-sparse'
+ ${mfem}'+sundials~mpi'
+ ${mfem}'+sundials'
+ ${mfem}'+pumi'
+ ${mfem}'+gslib'
+ ${mfem}'+netcdf~mpi'
+ ${mfem}'+netcdf'
+ ${mfem}${mpfr}
+ ${mfem}'+gnutls'
+ ${mfem}'+conduit~mpi'
+ ${mfem}'+conduit'
+ ${mfem}'+petsc ^petsc+suite-sparse+mumps'
# develop version
- 'mfem@develop+superlu-dist'
- 'mfem@develop+suite-sparse~mpi'
- 'mfem@develop+suite-sparse'
- 'mfem@develop+sundials~mpi'
- 'mfem@develop+sundials'
- 'mfem@develop+pumi'
- 'mfem@develop+netcdf~mpi'
- 'mfem@develop+netcdf'
- 'mfem@develop+mpfr'
- 'mfem@develop+gnutls'
- 'mfem@develop+conduit~mpi ^conduit~python'
- 'mfem@develop+conduit ^conduit~python'
- 'mfem@develop+petsc+mpi ^hypre~internal-superlu \
- ^petsc+suite-sparse+mumps'
+ ${mfem_dev}"$backends $backends_specs"
+ ${mfem_dev}'+superlu-dist'
+ # NOTE: On mac +strumpack works only with gcc, as of 03/20/20.
+ ${mfem_dev}'+strumpack ^hypre@2.15.1'
+ ${mfem_dev}'+suite-sparse~mpi'
+ ${mfem_dev}'+suite-sparse'
+ ${mfem_dev}'+sundials~mpi'
+ ${mfem_dev}'+sundials'
+ ${mfem_dev}'+pumi'
+ ${mfem_dev}'+gslib'
+ ${mfem_dev}'+netcdf~mpi'
+ ${mfem_dev}'+netcdf'
+ ${mfem_dev}${mpfr}
+ ${mfem_dev}'+gnutls'
+ ${mfem_dev}'+conduit~mpi'
+ ${mfem_dev}'+conduit'
+ ${mfem_dev}'+petsc ^petsc+suite-sparse+mumps'
)
trap 'printf "\nScript interrupted.\n"; exit 33' INT
diff --git a/var/spack/repos/builtin/packages/nek5000/package.py b/var/spack/repos/builtin/packages/nek5000/package.py
index 86ccb6b090..47bea5f6e5 100644
--- a/var/spack/repos/builtin/packages/nek5000/package.py
+++ b/var/spack/repos/builtin/packages/nek5000/package.py
@@ -4,7 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
-
+from shutil import copyfile
import os
@@ -13,14 +13,17 @@ class Nek5000(Package):
dynamics"""
homepage = "https://nek5000.mcs.anl.gov/"
- url = "https://github.com/Nek5000/Nek5000/releases/download/v17.0/Nek5000-v17.0.tar.gz"
+ url = 'https://github.com/Nek5000/Nek5000/archive/v17.0.tar.gz'
git = "https://github.com/Nek5000/Nek5000.git"
tags = ['cfd', 'flow', 'hpc', 'solver', 'navier-stokes',
'spectral-elements', 'fluid', 'ecp', 'ecp-apps']
version('develop', branch='master')
- version('17.0', sha256='298d83ffd9f695ee7cf565cb445be33b02775eb9c2e9f0f74d91d89fe722e114')
+ version('17.0',
+ '4d8d4793ce3c926c54e09a5a5968fa959fe0ba46bd2e6b8043e099528ee35a60')
+ version('19.0',
+ 'db129877a10ff568d49edc77cf65f9e732eecb1fce10edbd91ffc5ac10c41ad6')
# MPI, Profiling and Visit variants
variant('mpi', default=True, description='Build with MPI.')
@@ -42,6 +45,14 @@ class Nek5000(Package):
@run_after('install')
def test_install(self):
with working_dir('short_tests/eddy'):
+ f_size = join_path(os.getcwd(), 'SIZE')
+ f_size_legacy = join_path(os.getcwd(), 'SIZE.legacy')
+ if not os.access(f_size, os.F_OK):
+ if os.access(f_size_legacy, os.F_OK):
+ copyfile(f_size_legacy, f_size)
+ else:
+ raise RuntimeError('Can not find {0}'.format(f_size))
+
os.system(join_path(self.prefix.bin, 'makenek') + ' eddy_uv')
if not os.path.isfile(join_path(os.getcwd(), 'nek5000')):
msg = 'Cannot build example: short_tests/eddy.'
@@ -93,8 +104,14 @@ class Nek5000(Package):
# Nek5000 source.
filter_file(r'^#FC\s*=.*', 'FC="{0}"'.format(fc), 'makenek')
filter_file(r'^#CC\s*=.*', 'CC="{0}"'.format(cc), 'makenek')
- filter_file(r'^#SOURCE_ROOT\s*=\"\$H.*', 'SOURCE_ROOT=\"' +
- prefix.bin.Nek5000 + '\"', 'makenek')
+ if self.spec.version == Version('17.0'):
+ filter_file(r'^#SOURCE_ROOT\s*=\"\$H.*', 'SOURCE_ROOT=\"' +
+ prefix.bin.Nek5000 + '\"', 'makenek')
+ else:
+ filter_file(r'^#NEK_SOURCE_ROOT\s*=\"\$H.*',
+ 'NEK_SOURCE_ROOT=\"' + prefix.bin.Nek5000 + '\"',
+ 'makenek')
+
if fflags:
filter_file(r'^#FFLAGS=.*', 'FFLAGS+=" {0}"'.format(fflags),
'makenek')
@@ -116,4 +133,4 @@ class Nek5000(Package):
install_tree(bin_dir, prefix.bin)
# Copy Nek5000 source to prefix/bin
- install_tree('../Nek5000', prefix.bin.Nek5000)
+ install_tree(self.stage.source_path, prefix.bin.Nek5000)
diff --git a/var/spack/repos/builtin/packages/nekbone/package.py b/var/spack/repos/builtin/packages/nekbone/package.py
index 0ad37561e3..6f8cd220ff 100644
--- a/var/spack/repos/builtin/packages/nekbone/package.py
+++ b/var/spack/repos/builtin/packages/nekbone/package.py
@@ -13,13 +13,15 @@ class Nekbone(Package):
the spectral element method."""
homepage = "https://github.com/Nek5000/Nekbone"
- url = "https://github.com/Nek5000/Nekbone/archive/v17.0.tar.gz"
git = "https://github.com/Nek5000/Nekbone.git"
tags = ['proxy-app', 'ecp-proxy-app']
version('develop', branch='master')
- version('17.0', sha256='ae361cc61368a924398a28a296f675b7f0c4a9516788a7f8fa3c09d787cdf69b')
+ version('17.0',
+ 'ae361cc61368a924398a28a296f675b7f0c4a9516788a7f8fa3c09d787cdf69b',
+ url='https://github.com/Nek5000/Nekbone/archive/v17.0.tar.gz',
+ extension='.tar.gz')
# Variants
variant('mpi', default=True, description='Build with MPI')
diff --git a/var/spack/repos/builtin/packages/nekcem/package.py b/var/spack/repos/builtin/packages/nekcem/package.py
index e5f829677d..09e1988224 100644
--- a/var/spack/repos/builtin/packages/nekcem/package.py
+++ b/var/spack/repos/builtin/packages/nekcem/package.py
@@ -20,7 +20,9 @@ class Nekcem(Package):
variant('mpi', default=True, description='Build with MPI')
# We only have a development version
- version('develop')
+ version('develop', branch='development')
+ # The following hash-versions are used by the 'ceed' package
+ version('c8db04b', commit='c8db04b96f9b9cb0434ee75da711502fe95891b5')
version('0b8bedd', commit='0b8beddfdcca646bfcc866dfda1c5f893338399b')
version('7332619', commit='7332619b73d03868a256614b61794dce2d95b360')
@@ -28,7 +30,6 @@ class Nekcem(Package):
depends_on('mpi', when='+mpi')
depends_on('blas')
depends_on('lapack')
- depends_on('python@2.7:', type='build')
@run_before('install')
def fortran_check(self):
@@ -112,7 +113,7 @@ class Nekcem(Package):
'makenek')
# Install NekCEM in prefix/bin
- install_tree('../NekCEM', prefix.bin.NekCEM)
+ install_tree(self.stage.source_path, prefix.bin.NekCEM)
# Create symlinks to makenek, nek and configurenek scripts
with working_dir(prefix.bin):
os.symlink(os.path.join('NekCEM', bin_dir, makenek), makenek)
diff --git a/var/spack/repos/builtin/packages/nektools/package.py b/var/spack/repos/builtin/packages/nektools/package.py
index c8a5b46a9f..d1f190e653 100644
--- a/var/spack/repos/builtin/packages/nektools/package.py
+++ b/var/spack/repos/builtin/packages/nektools/package.py
@@ -22,14 +22,17 @@ class Nektools(Package):
"""Tools reuqired by Nek5000"""
homepage = "https://nek5000.mcs.anl.gov/"
- url = "https://github.com/Nek5000/Nek5000/releases/download/v17.0/Nek5000-v17.0.tar.gz"
+ url = 'https://github.com/Nek5000/Nek5000/archive/v17.0.tar.gz'
git = "https://github.com/Nek5000/Nek5000.git"
tags = ['cfd', 'flow', 'hpc', 'solver', 'navier-stokes',
'spectral-elements', 'fluid', 'ecp', 'ecp-apps']
version('develop', branch='master')
- version('17.0', sha256='298d83ffd9f695ee7cf565cb445be33b02775eb9c2e9f0f74d91d89fe722e114')
+ version('19.0',
+ 'db129877a10ff568d49edc77cf65f9e732eecb1fce10edbd91ffc5ac10c41ad6')
+ version('17.0',
+ '4d8d4793ce3c926c54e09a5a5968fa959fe0ba46bd2e6b8043e099528ee35a60')
# Variant for MAXNEL, we need to read this from user
variant(
diff --git a/var/spack/repos/builtin/packages/occa/package.py b/var/spack/repos/builtin/packages/occa/package.py
index 314f79b121..ec7e303a3e 100644
--- a/var/spack/repos/builtin/packages/occa/package.py
+++ b/var/spack/repos/builtin/packages/occa/package.py
@@ -19,7 +19,10 @@ class Occa(Package):
homepage = "http://libocca.org"
git = 'https://github.com/libocca/occa.git'
+ maintainers = ['v-dobrev', 'dmed256']
+
version('develop')
+ version('1.0.9', tag='v1.0.9')
version('1.0.8', tag='v1.0.8')
version('1.0.0-alpha.5', tag='v1.0.0-alpha.5')
version('0.2.0', tag='v0.2.0')
@@ -97,6 +100,9 @@ class Occa(Package):
else:
env.set('OCCA_CUDA_ENABLED', '0')
+ # Disable hip autodetection for now since it fails on some machines.
+ env.set('OCCA_HIP_ENABLED', '0')
+
if '~opencl' in spec:
env.set('OCCA_OPENCL_ENABLED', '0')
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index 8e1770aac8..cccced63a0 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -66,6 +66,7 @@ class Petsc(Package):
variant('shared', default=True,
description='Enables the build of shared libraries')
variant('mpi', default=True, description='Activates MPI support')
+ variant('cuda', default=False, description='Activates CUDA support')
variant('double', default=True,
description='Switches between single and double precision')
variant('complex', default=False, description='Build with complex numbers')
@@ -133,6 +134,7 @@ class Petsc(Package):
depends_on('blas')
depends_on('lapack')
depends_on('mpi', when='+mpi')
+ depends_on('cuda', when='+cuda')
# Build dependencies
depends_on('python@2.6:2.8', type='build', when='@:3.10.99')
@@ -147,8 +149,8 @@ class Petsc(Package):
depends_on('metis@5:~int64', when='@3.8:+metis~int64')
depends_on('metis@5:+int64', when='@3.8:+metis+int64')
- depends_on('hdf5@:1.10.99+mpi+hl+fortran', when='@:3.12.99+hdf5+mpi')
- depends_on('hdf5+mpi+hl+fortran', when='@3.13:+hdf5+mpi')
+ depends_on('hdf5@:1.10.99+mpi', when='@:3.12.99+hdf5+mpi')
+ depends_on('hdf5+mpi', when='@3.13:+hdf5+mpi')
depends_on('zlib', when='+hdf5')
depends_on('parmetis', when='+metis+mpi')
depends_on('valgrind', when='+valgrind')
@@ -294,7 +296,7 @@ class Petsc(Package):
])
# Activates library support if needed
- for library in ('metis', 'hdf5', 'hypre', 'parmetis',
+ for library in ('cuda', 'metis', 'hdf5', 'hypre', 'parmetis',
'mumps', 'trilinos', 'fftw', 'valgrind'):
options.append(
'--with-{library}={value}'.format(
diff --git a/var/spack/repos/builtin/packages/remhos/package.py b/var/spack/repos/builtin/packages/remhos/package.py
new file mode 100644
index 0000000000..337c0056dd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/remhos/package.py
@@ -0,0 +1,54 @@
+# Copyright 2013-2020 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 *
+
+
+class Remhos(MakefilePackage):
+ """Remhos (REMap High-Order Solver) is a CEED miniapp that performs monotonic
+ and conservative high-order discontinuous field interpolation (remap)
+ using DG advection-based spatial discretization and explicit high-order
+ time-stepping.
+ """
+ tags = ['proxy-app']
+
+ homepage = "https://github.com/CEED/Remhos"
+ url = "https://github.com/CEED/Remhos/archive/v1.0.tar.gz"
+ git = "https://github.com/CEED/Remhos.git"
+
+ maintainers = ['v-dobrev', 'tzanio', 'vladotomov']
+
+ version('develop', branch='master')
+ version('1.0', sha256='e60464a867fe5b1fd694fbb37bb51773723427f071c0ae26852a2804c08bbb32')
+
+ variant('metis', default=True, description='Enable/disable METIS support')
+
+ depends_on('mfem+mpi+metis', when='+metis')
+ depends_on('mfem+mpi~metis', when='~metis')
+
+ depends_on('mfem@develop', when='@develop')
+ depends_on('mfem@4.1.0:', when='@1.0')
+
+ @property
+ def build_targets(self):
+ targets = []
+ spec = self.spec
+
+ targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
+ targets.append('CONFIG_MK=%s' % spec['mfem'].package.config_mk)
+ targets.append('TEST_MK=%s' % spec['mfem'].package.test_mk)
+
+ return targets
+
+ # See lib/spack/spack/build_systems/makefile.py
+ def check(self):
+ with working_dir(self.build_directory):
+ make('tests', *self.build_targets)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('remhos', prefix.bin)
+
+ install_time_test_callbacks = []
diff --git a/var/spack/repos/builtin/packages/suite-sparse/package.py b/var/spack/repos/builtin/packages/suite-sparse/package.py
index 39532db801..da2cc222ae 100644
--- a/var/spack/repos/builtin/packages/suite-sparse/package.py
+++ b/var/spack/repos/builtin/packages/suite-sparse/package.py
@@ -97,6 +97,14 @@ class SuiteSparse(Package):
'LAPACK=%s' % spec['lapack'].libs.ld_flags,
]
+ # Recent versions require c11 but some demos do not get the c11 from
+ # GraphBLAS/CMakeLists.txt, for example the file
+ # GraphBLAS/Demo/Program/wildtype_demo.c. For many compilers this is
+ # not an issue because c11 or newer is their default. However, for some
+ # compilers (e.g. xlc) the c11 flag is necessary.
+ if spec.satisfies('@5.4:'):
+ make_args += ['CFLAGS+=%s' % self.compiler.c11_flag]
+
# 64bit blas in UMFPACK:
if (spec.satisfies('^openblas+ilp64') or
spec.satisfies('^intel-mkl+ilp64') or