summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/openmpi/package.py148
1 files changed, 93 insertions, 55 deletions
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py
index 72b9b8dbd2..754cc8d93e 100644
--- a/var/spack/repos/builtin/packages/openmpi/package.py
+++ b/var/spack/repos/builtin/packages/openmpi/package.py
@@ -22,15 +22,13 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
from spack import *
+import os
def _verbs_dir():
- """
- Try to find the directory where the OpenFabrics verbs package is
- installed. Return None if not found.
- """
+ """Try to find the directory where the OpenFabrics verbs package is
+ installed. Return None if not found."""
try:
# Try to locate Verbs by looking for a utility in the path
ibv_devices = which("ibv_devices")
@@ -46,7 +44,7 @@ def _verbs_dir():
return None
-class Openmpi(Package):
+class Openmpi(AutotoolsPackage):
"""The Open MPI Project is an open source Message Passing Interface
implementation that is developed and maintained by a consortium
of academic, research, and industry partners. Open MPI is
@@ -75,36 +73,38 @@ class Openmpi(Package):
patch('llnl-platforms.patch', when="@1.6.5")
patch('configure.patch', when="@1.10.0:1.10.1")
- variant('psm', default=False, description='Build support for the PSM library.')
+ # Fabrics
+ variant('psm', default=False, description='Build support for the PSM library')
variant('psm2', default=False,
- description='Build support for the Intel PSM2 library.')
+ description='Build support for the Intel PSM2 library')
variant('pmi', default=False,
description='Build support for PMI-based launchers')
variant('verbs', default=_verbs_dir() is not None,
- description='Build support for OpenFabrics verbs.')
+ description='Build support for OpenFabrics verbs')
variant('mxm', default=False, description='Build Mellanox Messaging support')
- variant('thread_multiple', default=False,
- description='Enable MPI_THREAD_MULTIPLE support')
-
- # TODO : variant support for alps, loadleveler is missing
+ # Schedulers
+ # TODO: support for alps and loadleveler is missing
variant('tm', default=False,
description='Build TM (Torque, PBSPro, and compatible) support')
variant('slurm', default=False,
description='Build SLURM scheduler component')
- variant('sqlite3', default=False, description='Build sqlite3 support')
-
- variant('vt', default=True,
- description='Build support for contributed package vt')
+ # Additional support options
+ variant('java', default=False, description='Build Java support')
+ variant('sqlite3', default=False, description='Build SQLite3 support')
+ variant('vt', default=True, description='Build VampirTrace support')
+ variant('thread_multiple', default=False,
+ description='Enable MPI_THREAD_MULTIPLE support')
- # TODO : support for CUDA is missing
+ # TODO: support for CUDA is missing
provides('mpi@:2.2', when='@1.6.5')
provides('mpi@:3.0', when='@1.7.5:')
provides('mpi@:3.1', when='@2.0.0:')
depends_on('hwloc')
+ depends_on('jdk', when='+java')
depends_on('sqlite', when='+sqlite3')
def url_for_version(self, version):
@@ -142,63 +142,101 @@ class Openmpi(Package):
elif self.spec.satisfies('@1.7:'):
return 'verbs'
- def install(self, spec, prefix):
+ @AutotoolsPackage.precondition('autoreconf')
+ def die_without_fortran(self):
# Until we can pass variants such as +fortran through virtual
# dependencies depends_on('mpi'), require Fortran compiler to
# avoid delayed build errors in dependents.
if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError('OpenMPI requires both C and Fortran ',
- 'compilers!')
-
- config_args = ["--prefix=%s" % prefix,
- "--with-hwloc=%s" % spec['hwloc'].prefix,
- "--enable-shared",
- "--enable-static"]
-
- # for Open-MPI 2.0:, C++ bindings are disabled by default.
- if self.spec.satisfies('@2.0:'):
- config_args.extend(['--enable-mpi-cxx'])
+ raise InstallError(
+ 'OpenMPI requires both C and Fortran compilers!'
+ )
- if getattr(self, 'config_extra', None) is not None:
- config_args.extend(self.config_extra)
+ def configure_args(self):
+ spec = self.spec
- # Variant based arguments
- config_args.extend([
+ config_args = [
+ '--enable-shared',
+ '--enable-static',
+ '--enable-mpi-cxx',
# Schedulers
'--with-tm' if '+tm' in spec else '--without-tm',
'--with-slurm' if '+slurm' in spec else '--without-slurm',
# Fabrics
'--with-psm' if '+psm' in spec else '--without-psm',
- '--with-psm2' if '+psm2' in spec else '--without-psm2',
- '--with-mxm' if '+mxm' in spec else '--without-mxm',
- # Other options
- ('--enable-mpi-thread-multiple' if '+thread_multiple' in spec
- else '--disable-mpi-thread-multiple'),
- '--with-pmi' if '+pmi' in spec else '--without-pmi',
- '--with-sqlite3' if '+sqlite3' in spec else '--without-sqlite3',
- '--enable-vt' if '+vt' in spec else '--disable-vt'
- ])
+ ]
+
+ # Intel PSM2 support
+ if spec.satisfies('@1.10:'):
+ if '+psm2' in spec:
+ config_args.append('--with-psm2')
+ else:
+ config_args.append('--without-psm2')
+
+ # PMI support
+ if spec.satisfies('@1.5.5:'):
+ if '+pmi' in spec:
+ config_args.append('--with-pmi')
+ else:
+ config_args.append('--without-pmi')
+
+ # Mellanox Messaging support
+ if spec.satisfies('@1.5.4:'):
+ if '+mxm' in spec:
+ config_args.append('--with-mxm')
+ else:
+ config_args.append('--without-mxm')
+
+ # OpenFabrics verbs support
if '+verbs' in spec:
path = _verbs_dir()
if path is not None and path not in ('/usr', '/usr/local'):
- config_args.append('--with-%s=%s' % (self.verbs, path))
+ config_args.append('--with-{0}={1}'.format(self.verbs, path))
else:
- config_args.append('--with-%s' % self.verbs)
+ config_args.append('--with-{0}'.format(self.verbs))
else:
- config_args.append('--without-%s' % self.verbs)
+ config_args.append('--without-{0}'.format(self.verbs))
+
+ # Hwloc support
+ if spec.satisfies('@1.5.2:'):
+ config_args.append('--with-hwloc={0}'.format(spec['hwloc'].prefix))
+
+ # Java support
+ if spec.satisfies('@1.7.4:'):
+ if '+java' in spec:
+ config_args.extend([
+ '--enable-java',
+ '--enable-mpi-java',
+ '--with-jdk-dir={0}'.format(spec['jdk'].prefix)
+ ])
+ else:
+ config_args.extend([
+ '--disable-java',
+ '--disable-mpi-java'
+ ])
+
+ # SQLite3 support
+ if spec.satisfies('@1.7.3:1.999'):
+ if '+sqlite3' in spec:
+ config_args.append('--with-sqlite3')
+ else:
+ config_args.append('--without-sqlite3')
- # TODO: use variants for this, e.g. +lanl, +llnl, etc.
- # use this for LANL builds, but for LLNL builds, we need:
- # "--with-platform=contrib/platform/llnl/optimized"
- if self.version == ver("1.6.5") and '+lanl' in spec:
- config_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas") # NOQA: ignore=E501
+ # VampirTrace support
+ if spec.satisfies('@1.3:1.999'):
+ if '+vt' not in spec:
+ config_args.append('--enable-contrib-no-build=vt')
- configure(*config_args)
- make()
- make("install")
+ # Multithreading support
+ if spec.satisfies('@1.5.4:'):
+ if '+thread_multiple' in spec:
+ config_args.append('--enable-mpi-thread-multiple')
+ else:
+ config_args.append('--disable-mpi-thread-multiple')
- self.filter_compilers()
+ return config_args
+ @AutotoolsPackage.sanity_check('install')
def filter_compilers(self):
"""Run after install to make the MPI compilers use the
compilers that Spack built the package with.