mpich: Improve package (#10643)
- Add missing pkg-config, libpciaccess and libxml2 dependencies - Add slurm variant for nodelist parsing - Add missing configure flag for libfabric - Unset F90 and F90FLAGS - Allow selecting different PMI interfaces
This commit is contained in:
parent
ab499a958d
commit
b1a04b7699
1 changed files with 39 additions and 2 deletions
|
@ -29,9 +29,16 @@ class Mpich(AutotoolsPackage):
|
||||||
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
|
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
|
||||||
|
|
||||||
variant('hydra', default=True, description='Build the hydra process manager')
|
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('romio', default=True, description='Enable ROMIO MPI I/O implementation')
|
||||||
variant('verbs', default=False, description='Build support for OpenFabrics verbs.')
|
variant('verbs', default=False, description='Build support for OpenFabrics verbs.')
|
||||||
|
variant('slurm', default=False, description='Enable SLURM support')
|
||||||
|
variant(
|
||||||
|
'pmi',
|
||||||
|
default='pmi',
|
||||||
|
description='''PMI interface.''',
|
||||||
|
values=('off', 'pmi', 'pmi2', 'pmix'),
|
||||||
|
multi=False
|
||||||
|
)
|
||||||
variant(
|
variant(
|
||||||
'device',
|
'device',
|
||||||
default='ch3',
|
default='ch3',
|
||||||
|
@ -65,15 +72,31 @@ class Mpich(AutotoolsPackage):
|
||||||
patch('mpich32_clang.patch', when='@3.2:3.2.0%clang')
|
patch('mpich32_clang.patch', when='@3.2:3.2.0%clang')
|
||||||
|
|
||||||
depends_on('findutils', type='build')
|
depends_on('findutils', type='build')
|
||||||
|
depends_on('pkgconfig', type='build')
|
||||||
|
|
||||||
depends_on('libfabric', when='netmod=ofi')
|
depends_on('libfabric', when='netmod=ofi')
|
||||||
|
|
||||||
|
depends_on('libpciaccess')
|
||||||
|
depends_on('libxml2')
|
||||||
|
|
||||||
|
# Starting with version 3.3, Hydra can use libslurm for nodelist parsing
|
||||||
|
depends_on('slurm', when='+slurm')
|
||||||
|
|
||||||
|
depends_on('pmix', when='pmi=pmix')
|
||||||
|
|
||||||
conflicts('device=ch4', when='@:3.2')
|
conflicts('device=ch4', when='@:3.2')
|
||||||
conflicts('netmod=ofi', when='@:3.1.4')
|
conflicts('netmod=ofi', when='@:3.1.4')
|
||||||
conflicts('netmod=ucx', when='device=ch3')
|
conflicts('netmod=ucx', when='device=ch3')
|
||||||
conflicts('netmod=mxm', when='device=ch4')
|
conflicts('netmod=mxm', when='device=ch4')
|
||||||
conflicts('netmod=mxm', when='@:3.1.3')
|
conflicts('netmod=mxm', when='@:3.1.3')
|
||||||
conflicts('netmod=tcp', when='device=ch4')
|
conflicts('netmod=tcp', when='device=ch4')
|
||||||
|
conflicts('pmi=pmi2', when='device=ch3 netmod=ofi')
|
||||||
|
conflicts('pmi=pmix', when='device=ch3')
|
||||||
|
|
||||||
|
def setup_environment(self, spack_env, run_env):
|
||||||
|
# mpich configure fails when F90 and F90FLAGS are set
|
||||||
|
spack_env.unset('F90')
|
||||||
|
spack_env.unset('F90FLAGS')
|
||||||
|
|
||||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||||
# On Cray, the regular compiler wrappers *are* the MPI wrappers.
|
# On Cray, the regular compiler wrappers *are* the MPI wrappers.
|
||||||
|
@ -135,11 +158,19 @@ def configure_args(self):
|
||||||
config_args = [
|
config_args = [
|
||||||
'--enable-shared',
|
'--enable-shared',
|
||||||
'--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'),
|
'--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'),
|
||||||
'--with-pmi={0}'.format('yes' if '+pmi' in spec else 'no'),
|
|
||||||
'--{0}-romio'.format('enable' if '+romio' in spec else 'disable'),
|
'--{0}-romio'.format('enable' if '+romio' in spec else 'disable'),
|
||||||
'--{0}-ibverbs'.format('with' if '+verbs' in spec else 'without')
|
'--{0}-ibverbs'.format('with' if '+verbs' in spec else 'without')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if 'pmi=off' in spec:
|
||||||
|
config_args.append('--with-pmi=no')
|
||||||
|
elif 'pmi=pmi' in spec:
|
||||||
|
config_args.append('--with-pmi=simple')
|
||||||
|
elif 'pmi=pmi2' in spec:
|
||||||
|
config_args.append('--with-pmi=pmi2/simple')
|
||||||
|
elif 'pmi=pmix' in spec:
|
||||||
|
config_args.append('--with-pmix={0}'.format(spec['pmix'].prefix))
|
||||||
|
|
||||||
# setup device configuration
|
# setup device configuration
|
||||||
device_config = ''
|
device_config = ''
|
||||||
if 'device=ch4' in spec:
|
if 'device=ch4' in spec:
|
||||||
|
@ -158,4 +189,10 @@ def configure_args(self):
|
||||||
|
|
||||||
config_args.append(device_config)
|
config_args.append(device_config)
|
||||||
|
|
||||||
|
# Specify libfabric's path explicitly, otherwise configure might fall
|
||||||
|
# back to an embedded version of libfabric.
|
||||||
|
if 'netmod=ofi' in spec:
|
||||||
|
config_args.append('--with-libfabric={0}'.format(
|
||||||
|
spec['libfabric'].prefix))
|
||||||
|
|
||||||
return config_args
|
return config_args
|
||||||
|
|
Loading…
Reference in a new issue