summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/openmpi/package.py61
1 files changed, 37 insertions, 24 deletions
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py
index d0dd2d657f..f609dd7863 100644
--- a/var/spack/repos/builtin/packages/openmpi/package.py
+++ b/var/spack/repos/builtin/packages/openmpi/package.py
@@ -1,6 +1,8 @@
-from spack import *
import os
+from spack import *
+
+
class Openmpi(Package):
"""Open MPI is a project combining technologies and resources from
several other projects (FT-MPI, LA-MPI, LAM/MPI, and PACX-MPI)
@@ -26,18 +28,26 @@ class Openmpi(Package):
patch('configure.patch', when="@1.10.0:1.10.1")
variant('psm', default=False, description='Build support for the PSM library.')
+ variant('psm2', default=False, description='Build support for the Intel PSM2 library.')
variant('pmi', default=True, description='Build support for PMI-based launchers')
variant('verbs', default=False, description='Build support for OpenFabrics verbs.')
+ variant('mxm', default=False, description='Build Mellanox Messaging support')
- # TODO : variant support for other schedulers is missing
+ variant('thread_multiple', default=False, description='Enable MPI_THREAD_MULTIPLE support')
+
+ # TODO : variant support for alps, 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')
+
+ # TODO : support for CUDA is missing
provides('mpi@:2.2', when='@1.6.5')
provides('mpi@:3.0', when='@1.7.5:')
depends_on('hwloc')
-
def url_for_version(self, version):
return "http://www.open-mpi.org/software/ompi/v%s/downloads/openmpi-%s.tar.bz2" % (version.up_to(2), version)
@@ -48,6 +58,15 @@ class Openmpi(Package):
spack_env.set('OMPI_FC', spack_fc)
spack_env.set('OMPI_F77', spack_f77)
+ @property
+ def verbs(self):
+ # Up through version 1.6, this option was previously named --with-openib
+ if self.spec.satisfies('@:1.6'):
+ return 'openib'
+ # In version 1.7, it was renamed to be --with-verbs
+ elif self.spec.satisfies('@1.7:'):
+ return 'verbs'
+
def setup_dependent_package(self, module, dep_spec):
self.spec.mpicc = join_path(self.prefix.bin, 'mpicc')
self.spec.mpicxx = join_path(self.prefix.bin, 'mpic++')
@@ -60,24 +79,21 @@ class Openmpi(Package):
"--with-hwloc=%s" % spec['hwloc'].prefix,
"--enable-shared",
"--enable-static"]
-
- # Variants
- if '+tm' in spec:
- config_args.append("--with-tm") # necessary for Torque support
-
- if '+psm' in spec:
- config_args.append("--with-psm")
-
- if '+pmi' in spec:
- config_args.append("--with-pmi") #TODO: let user specify directory when possible
-
- if '+verbs' in spec:
- # Up through version 1.6, this option was previously named --with-openib
- if spec.satisfies('@:1.6'):
- config_args.append("--with-openib")
- # In version 1.7, it was renamed to be --with-verbs
- elif spec.satisfies('@1.7:'):
- config_args.append("--with-verbs")
+ # Variant based arguments
+ config_args.extend([
+ # 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-%s' % self.verbs) if '+verbs' in spec else ('--without-%s' % self.verbs),
+ '--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'
+ ])
# TODO: use variants for this, e.g. +lanl, +llnl, etc.
# use this for LANL builds, but for LLNL builds, we need:
@@ -85,9 +101,6 @@ class Openmpi(Package):
if self.version == ver("1.6.5") and '+lanl' in spec:
config_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas")
- # TODO: Spack should make it so that you can't actually find
- # these compilers if they're "disabled" for the current
- # compiler configuration.
if not self.compiler.f77 and not self.compiler.fc:
config_args.append("--enable-mpi-fortran=no")