diff options
author | Ken Raffenetti <raffenet@users.noreply.github.com> | 2017-09-27 12:50:05 -0500 |
---|---|---|
committer | scheibelp <scheibel1@llnl.gov> | 2017-09-27 10:50:05 -0700 |
commit | c242165ebda4b78c6456dff9079d83db504e40f4 (patch) | |
tree | 96d01346fde1abddf58b292688a00548b7874c6f | |
parent | 90dd5e2932dc0ee3bcf25f416bb1b1d758d70c8c (diff) | |
download | spack-c242165ebda4b78c6456dff9079d83db504e40f4.tar.gz spack-c242165ebda4b78c6456dff9079d83db504e40f4.tar.bz2 spack-c242165ebda4b78c6456dff9079d83db504e40f4.tar.xz spack-c242165ebda4b78c6456dff9079d83db504e40f4.zip |
Additional MPICH configs (#5259)
* Add support for building develop version from git
* Add device and netmod variants
-rw-r--r-- | var/spack/repos/builtin/packages/mpich/package.py | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py index 4aba60940d..7b1cfee3fd 100644 --- a/var/spack/repos/builtin/packages/mpich/package.py +++ b/var/spack/repos/builtin/packages/mpich/package.py @@ -23,6 +23,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## from spack import * +import os class Mpich(AutotoolsPackage): @@ -41,11 +42,30 @@ class Mpich(AutotoolsPackage): version('3.1.1', '40dc408b1e03cc36d80209baaa2d32b7') version('3.1', '5643dd176499bfb7d25079aaff25f2ec') version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0') + version('develop', git='git://github.com/pmodels/mpich') variant('hydra', default=True, description='Build the hydra process manager') variant('pmi', default=True, description='Build with PMI support') variant('romio', default=True, description='Enable ROMIO MPI I/O implementation') variant('verbs', default=False, description='Build support for OpenFabrics verbs.') + variant( + 'device', + default='ch3', + description='''Abstract Device Interface (ADI) +implementation. The ch4 device is currently in experimental state''', + values=('ch3', 'ch4'), + multi=False + ) + variant( + 'netmod', + default='tcp', + description='''Network module. Only single netmod builds are +supported. For ch3 device configurations, this presumes the +ch3:nemesis communication channel. ch3:sock is not supported by this +spack package at this time.''', + values=('tcp', 'mxm', 'ofi', 'ucx'), + multi=False + ) provides('mpi') provides('mpi@:3.0', when='@3:') @@ -56,6 +76,15 @@ class Mpich(AutotoolsPackage): # and https://lists.mpich.org/pipermail/discuss/2016-June/004768.html patch('mpich32_clang.patch', when='@3.2%clang') + depends_on('libfabric', when='netmod=ofi') + + conflicts('device=ch4', when='@:3.2') + conflicts('netmod=ofi', when='@:3.1.4') + conflicts('netmod=ucx', when='device=ch3') + conflicts('netmod=mxm', when='device=ch4') + conflicts('netmod=mxm', when='@:3.1.3') + conflicts('netmod=tcp', when='device=ch4') + def setup_dependent_environment(self, spack_env, run_env, dependent_spec): # On Cray, the regular compiler wrappers *are* the MPI wrappers. if 'platform=cray' in self.spec: @@ -92,6 +121,15 @@ class Mpich(AutotoolsPackage): join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix)) ] + def autoreconf(self, spec, prefix): + """Not needed usually, configure should be already there""" + # If configure exists nothing needs to be done + if os.path.exists(self.configure_abs_path): + return + # Else bootstrap with autotools + bash = which('bash') + bash('./autogen.sh') + @run_before('autoreconf') def die_without_fortran(self): # Until we can pass variants such as +fortran through virtual @@ -104,7 +142,7 @@ class Mpich(AutotoolsPackage): def configure_args(self): spec = self.spec - return [ + config_args = [ '--enable-shared', '--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'), '--with-pmi={0}'.format('yes' if '+pmi' in spec else 'no'), @@ -112,6 +150,26 @@ class Mpich(AutotoolsPackage): '--{0}-ibverbs'.format('with' if '+verbs' in spec else 'without') ] + # setup device configuration + device_config = '' + if 'device=ch4' in spec: + device_config = '--with-device=ch4:' + elif 'device=ch3' in spec: + device_config = '--with-device=ch3:nemesis:' + + if 'netmod=ucx' in spec: + device_config += 'ucx' + elif 'netmod=ofi' in spec: + device_config += 'ofi' + elif 'netmod=mxm' in spec: + device_config += 'mxm' + elif 'netmod=tcp' in spec: + device_config += 'tcp' + + config_args.append(device_config) + + return config_args + @run_after('install') def filter_compilers(self): """Run after install to make the MPI compilers use the |