diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/openmpi/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/openmpi/package.py | 113 |
1 files changed, 45 insertions, 68 deletions
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py index 63579efe0e..2761df543d 100644 --- a/var/spack/repos/builtin/packages/openmpi/package.py +++ b/var/spack/repos/builtin/packages/openmpi/package.py @@ -22,13 +22,16 @@ # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## -from spack import * + import os +from spack import * + def _verbs_dir(): """Try to find the directory where the OpenFabrics verbs package is - installed. Return None if not found.""" + installed. Return None if not found. + """ try: # Try to locate Verbs by looking for a utility in the path ibv_devices = which("ibv_devices") @@ -43,7 +46,7 @@ def _verbs_dir(): if path == "/": path = "/usr" return path - except: + except TypeError: return None @@ -82,22 +85,20 @@ class Openmpi(AutotoolsPackage): patch('configure.patch', when="@1.10.0:1.10.1") patch('fix_multidef_pmi_class.patch', when="@2.0.0:2.0.1") - # Fabrics - 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=False, - description='Build support for PMI-based launchers') - variant('verbs', default=_verbs_dir() is not None, - description='Build support for OpenFabrics verbs') - variant('mxm', default=False, description='Build Mellanox Messaging support') - - # 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( + 'fabrics', + default=None if _verbs_dir() is None else 'verbs', + description='List of fabrics that are enabled', + values=('psm', 'psm2', 'pmi', 'verbs', 'mxm'), + multi=True + ) + + variant( + 'schedulers', + description='List of schedulers for which support is enabled', + values=('alps', 'lsf', 'tm', 'slurm', 'sge', 'loadleveler'), + multi=True + ) # Additional support options variant('java', default=False, description='Build Java support') @@ -114,7 +115,7 @@ class Openmpi(AutotoolsPackage): depends_on('hwloc') depends_on('hwloc +cuda', when='+cuda') depends_on('jdk', when='+java') - depends_on('sqlite', when='+sqlite3') + depends_on('sqlite', when='+sqlite3@:1.11') def url_for_version(self, version): return "http://www.open-mpi.org/software/ompi/v%s/downloads/openmpi-%s.tar.bz2" % ( @@ -153,15 +154,22 @@ class Openmpi(AutotoolsPackage): join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix)) ] - @property - def verbs(self): + def with_or_without_verbs(self, activated): # Up through version 1.6, this option was previously named # --with-openib - if self.spec.satisfies('@:1.6'): - return 'openib' + opt = 'openib' # In version 1.7, it was renamed to be --with-verbs - elif self.spec.satisfies('@1.7:'): - return 'verbs' + if self.spec.satisfies('@1.7:'): + opt = 'verbs' + # If the option has not been activated return + # --without-openib or --without-verbs + if not activated: + return '--without-{0}'.format(opt) + line = '--with-{0}'.format(opt) + path = _verbs_dir() + if (path is not None) and (path not in ('/usr', '/usr/local')): + line += '={0}'.format(path) + return line @run_before('autoreconf') def die_without_fortran(self): @@ -175,48 +183,17 @@ class Openmpi(AutotoolsPackage): def configure_args(self): spec = self.spec - 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', + '--enable-static' ] + if self.spec.satisfies('@2.0:'): + # for Open-MPI 2.0:, C++ bindings are disabled by default. + config_args.extend(['--enable-mpi-cxx']) - # 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-{0}={1}'.format(self.verbs, path)) - else: - config_args.append('--with-{0}'.format(self.verbs)) - else: - config_args.append('--without-{0}'.format(self.verbs)) + # Fabrics and schedulers + config_args.extend(self.with_or_without('fabrics')) + config_args.extend(self.with_or_without('schedulers')) # Hwloc support if spec.satisfies('@1.5.2:'): @@ -270,11 +247,11 @@ class Openmpi(AutotoolsPackage): @run_after('install') def filter_compilers(self): """Run after install to make the MPI compilers use the - compilers that Spack built the package with. + compilers that Spack built the package with. - If this isn't done, they'll have CC, CXX and FC set - to Spack's generic cc, c++ and f90. We want them to - be bound to whatever compiler they were built with. + If this isn't done, they'll have CC, CXX and FC set + to Spack's generic cc, c++ and f90. We want them to + be bound to whatever compiler they were built with. """ kwargs = {'ignore_absent': True, 'backup': False, 'string': False} wrapper_basepath = join_path(self.prefix, 'share', 'openmpi') |