Mercury package: add version 1.0.1 and update dependencies (#10906)

* Add Mercury version 1.0.1
* Remove cci and bmi dependency requirements: these are not currently
  defined in Spack. If +bmi is enabled, the effect is that it may
  use a system install of bmi
* Add a note that fabtests is deprecated and has been folded into the
  libfabric package. Add the fabtests resource to the libfabric
  package
* Add CMake option settings to Mercury based on variant settings
* Mercury: Set OFI testing protocol depending on how libfabric was
  built
* Mercury: add version constraints to dependencies
This commit is contained in:
Adam J. Stewart 2019-04-20 17:03:18 -05:00 committed by Peter Scheibel
parent 95fafb4e44
commit f8dc385392
3 changed files with 136 additions and 32 deletions

View file

@ -7,7 +7,9 @@
class Fabtests(AutotoolsPackage): class Fabtests(AutotoolsPackage):
"""Fabtests provides a set of examples that uses libfabric""" """Fabtests provides a set of examples that uses libfabric.
DEPRECATED. Fabtests has merged with the libfabric git repo."""
homepage = "http://libfabric.org" homepage = "http://libfabric.org"
url = "https://github.com/ofiwg/fabtests/releases/download/v1.5.3/fabtests-1.5.3.tar.gz" url = "https://github.com/ofiwg/fabtests/releases/download/v1.5.3/fabtests-1.5.3.tar.gz"
@ -15,4 +17,5 @@ class Fabtests(AutotoolsPackage):
version('1.6.0', '0441aa0aeda391b1bf1eb71250a4afbc') version('1.6.0', '0441aa0aeda391b1bf1eb71250a4afbc')
version('1.5.3', 'f60cb95843ebf62e4eaa128e08ccdc7d') version('1.5.3', 'f60cb95843ebf62e4eaa128e08ccdc7d')
depends_on('libfabric') depends_on('libfabric@1.6.0', when='@1.6.0')
depends_on('libfabric@1.5.3', when='@1.5.3')

View file

@ -12,7 +12,7 @@ class Libfabric(AutotoolsPackage):
homepage = "https://libfabric.org/" homepage = "https://libfabric.org/"
url = "https://github.com/ofiwg/libfabric/releases/download/v1.6.1/libfabric-1.6.1.tar.gz" url = "https://github.com/ofiwg/libfabric/releases/download/v1.6.1/libfabric-1.6.1.tar.gz"
git = "https://github.com/ofiwg/libfabric.git" git = "https://github.com/ofiwg/libfabric.git"
version('develop', branch='master') version('develop', branch='master')
version('1.7.1', sha256='312e62c57f79b7274f89c41823932c00b15f1cc8de9c1f8dce17cd7fdae66fa1') version('1.7.1', sha256='312e62c57f79b7274f89c41823932c00b15f1cc8de9c1f8dce17cd7fdae66fa1')
@ -54,16 +54,64 @@ class Libfabric(AutotoolsPackage):
depends_on('automake', when='@develop', type='build') depends_on('automake', when='@develop', type='build')
depends_on('libtool', when='@develop', type='build') depends_on('libtool', when='@develop', type='build')
resource(name='fabtests',
url='https://github.com/ofiwg/libfabric/releases/download/v1.7.0/fabtests-1.7.0.tar.gz',
sha256='ebb4129dc69dc0e1f48310ce1abb96673d8ddb18166bc595312ebcb96e803de9',
placement='fabtests', when='@1.7.0')
resource(name='fabtests',
url='https://github.com/ofiwg/fabtests/releases/download/v1.6.1/fabtests-1.6.1.tar.gz',
sha256='d357466b868fdaf1560d89ffac4c4e93a679486f1b4221315644d8d3e21174bf',
placement='fabtests', when='@1.6.1')
resource(name='fabtests',
url='https://github.com/ofiwg/fabtests/releases/download/v1.6.0/fabtests-1.6.0.tar.gz',
sha256='dc3eeccccb005205017f5af60681ede15782ce202a0103450a6d56a7ff515a67',
placement='fabtests', when='@1.6.0')
resource(name='fabtests',
url='https://github.com/ofiwg/fabtests/releases/download/v1.5.3/fabtests-1.5.3.tar.gz',
sha256='3835b3bf86cd00d23df0ddba8bf317e4a195e8d5c3c2baa918b373d548f77f29',
placement='fabtests', when='@1.5.3')
resource(name='fabtests',
url='https://github.com/ofiwg/fabtests/releases/download/v1.5.0/fabtests-1.5.0.tar.gz',
sha256='1dddd446c3f1df346899f9a8636f1b4265de5b863103ae24876e9f0c1e40a69d',
placement='fabtests', when='@1.5.0')
resource(name='fabtests',
url='https://github.com/ofiwg/fabtests/releases/download/v1.4.2/fabtests-1.4.2.tar.gz',
sha256='3b78d0ca1b223ff21b7f5b3627e67e358e3c18b700f86b017e2233fee7e88c2e',
placement='fabtests', when='@1.5.0')
def setup_environment(self, spack_env, run_env):
if self.run_tests:
spack_env.prepend_path('PATH', self.prefix.bin)
@when('@develop') @when('@develop')
def autoreconf(self, spec, prefix): def autoreconf(self, spec, prefix):
bash = which('bash') bash = which('bash')
bash('./autogen.sh') bash('./autogen.sh')
if self.run_tests:
with working_dir('fabtests'):
bash('./autogen.sh')
def configure_args(self): def configure_args(self):
args = [] args = []
args.extend(['--enable-%s=%s' % for fabric in self.fabrics:
(f, 'yes' if 'fabrics=%s' % f in self.spec else 'no') if 'fabrics=' + fabric in self.spec:
for f in self.fabrics]) args.append('--enable-{0}=yes'.format(fabric))
else:
args.append('--enable-{0}=no'.format(fabric))
return args return args
def installcheck(self):
fi_info = Executable(self.prefix.bin.fi_info)
fi_info()
# Build and run more extensive tests
with working_dir('fabtests'):
configure = Executable('./configure')
configure('--prefix={0}'.format(self.prefix),
'--with-libfabric={0}'.format(self.prefix))
make()
make('install')
make('test')

View file

@ -13,53 +13,106 @@ class Mercury(CMakePackage):
git = 'https://github.com/mercury-hpc/mercury.git' git = 'https://github.com/mercury-hpc/mercury.git'
version('develop', branch='master', submodules=True) version('develop', branch='master', submodules=True)
version('1.0.1', tag='v1.0.1', submodules=True)
version('1.0.0', tag='v1.0.0', submodules=True) version('1.0.0', tag='v1.0.0', submodules=True)
version('0.9.0', tag='v0.9.0', submodules=True) version('0.9.0', tag='v0.9.0', submodules=True)
variant('cci', default=False, description='Use CCI for network transport')
variant('bmi', default=False, description='Use BMI for network transport') variant('bmi', default=False, description='Use BMI for network transport')
variant('fabric', default=True, description='Use libfabric for network transport') variant('cci', default=False, description='Use CCI for network transport')
variant('mpi', default=False, description='Use MPI for network transport')
variant('ofi', default=True, description='Use libfabric plugin')
variant('sm', default=False, description='Use shared-memory plugin')
variant('opa', default=False, description='Use OpenPA for atomics')
variant('boost', default=True, description='Use BOOST preprocessor macros')
variant('selfforward', default=True, variant('selfforward', default=True,
description='Mercury will short-circuit operations' + description='Mercury will short-circuit operations' +
' by forwarding to itself when possible') ' by forwarding to itself when possible')
# NOTE: the 'udreg' variant requires that the MPICH_GNI_NDREG_ENTRIES=1024 # NOTE: the 'udreg' variant requires that the MPICH_GNI_NDREG_ENTRIES=1024
# environment variable be set at run time to avoid conflicts with # environment variable be set at run time to avoid conflicts with
# Cray-MPICH if libfabric and MPI are used at the same time # Cray-MPICH if libfabric and MPI are used at the same time
variant('udreg', default=False, variant('udreg', default=False,
description='Enable udreg on supported Cray platforms') description='Enable udreg on supported Cray platforms')
depends_on('cci@master', when='+cci', type=('build', 'link', 'run')) depends_on('cmake@2.8.12.2:', type='build')
depends_on('libfabric', when='+fabric', type=('build', 'link', 'run')) # depends_on('bmi', when='+bmi') # TODO: add BMI package
depends_on('bmi', when='+bmi', type=('build', 'link', 'run')) # depends_on('cci', when='+cci') # TODO: add CCI package
depends_on('openpa', type=('build', 'link', 'run')) depends_on('mpi', when='+mpi')
depends_on('libfabric@1.5:', when='+ofi')
depends_on('openpa@1.0.3:', when='+opa')
depends_on('boost@1.48:', when='+boost')
def cmake_args(self): def cmake_args(self):
args = ['-DMERCURY_USE_BOOST_PP:BOOL=ON', spec = self.spec
'-DBUILD_SHARED_LIBS=ON'] args = [
'-DBUILD_SHARED_LIBS=ON',
'-DMERCURY_USE_CHECKSUMS=ON',
'-DMERCURY_USE_EAGER_BULK=ON',
'-DMERCURY_USE_SYSTEM_MCHECKSUM=OFF',
'-DMERCURY_USE_XDR=OFF'
]
if (self.spec.variants['cci'].value): if '+boost' in spec:
args.extend(['-DNA_USE_CCI:BOOL=ON']) args.append('-DMERCURY_USE_BOOST_PP=ON')
else: else:
args.extend(['-DNA_USE_CCI:BOOL=OFF']) args.append('-DMERCURY_USE_BOOST_PP=OFF')
if (self.spec.variants['bmi'].value): if '+bmi' in spec:
args.extend(['-DNA_USE_BMI:BOOL=ON']) args.append('-DNA_USE_BMI=ON')
else: else:
args.extend(['-DNA_USE_BMI:BOOL=OFF']) args.append('-DNA_USE_BMI=OFF')
if (self.spec.variants['fabric'].value): if '+cci' in spec:
args.extend(['-DNA_USE_OFI:BOOL=ON']) args.append('-DNA_USE_CCI=ON')
else: else:
args.extend(['-DNA_USE_OFI:BOOL=OFF']) args.append('-DNA_USE_CCI=OFF')
if (self.spec.variants['selfforward'].value): if '+mpi' in spec:
args.extend(['-DMERCURY_USE_SELF_FORWARD=ON']) args.append('-DNA_USE_MPI=ON')
else: else:
args.extend(['-DMERCURY_USE_SELF_FORWARD=OFF']) args.append('-DNA_USE_MPI=OFF')
if (self.spec.variants['udreg'].value): if '+ofi' in spec:
args.extend(['-DNA_OFI_GNI_USE_UDREG=ON']) args.append('-DNA_USE_OFI=ON')
if self.run_tests:
args.append('-DNA_OFI_TESTING_PROTOCOL={0}'.format(';'.join(
spec['libfabric'].variants['fabrics'].value)))
else: else:
args.extend(['-DNA_OFI_GNI_USE_UDREG=OFF']) args.append('-DNA_USE_OFI=OFF')
if '+sm' in spec:
args.append('-DNA_USE_SM=ON')
else:
args.append('-DNA_USE_SM=OFF')
if '+opa' in spec:
args.append('-DMERCURY_USE_OPA=ON')
else:
args.append('-DMERCURY_USE_OPA=OFF')
if '+selfforward' in spec:
args.append('-DMERCURY_USE_SELF_FORWARD=ON')
else:
args.append('-DMERCURY_USE_SELF_FORWARD=OFF')
if '+udreg' in spec:
args.append('-DNA_OFI_GNI_USE_UDREG=ON')
else:
args.append('-DNA_OFI_GNI_USE_UDREG=OFF')
if self.run_tests:
args.append('-DBUILD_TESTING=ON')
else:
args.append('-DBUILD_TESTING=OFF')
if '+mpi' in spec and self.run_tests:
args.append('-DMERCURY_ENABLE_PARALLEL_TESTING=ON')
else:
args.append('-DMERCURY_ENABLE_PARALLEL_TESTING=OFF')
return args return args
def check(self):
"""Unit tests fail when run in parallel."""
with working_dir(self.build_directory):
make('test', parallel=False)