Clean up mercury package and add boostsys, shared variants (#11368)

Use tarballs instead of git tags

Fix openpa dependency on gcc < 4.9

Fix boost dependency

Change sm variant default to true
This commit is contained in:
Jerome Soumagne 2019-05-09 12:56:10 -05:00 committed by Adam J. Stewart
parent d284ea39a1
commit a5f88d6ec8

View file

@ -9,21 +9,28 @@ class Mercury(CMakePackage):
"""Mercury is a C library for implementing RPC, optimized for HPC"""
homepage = 'https://mercury-hpc.github.io/'
url = 'https://github.com/mercury-hpc/mercury/archive/0.9.0.tar.gz'
url = 'https://github.com/mercury-hpc/mercury/releases/download/v1.0.1/mercury-1.0.1.tar.bz2'
git = 'https://github.com/mercury-hpc/mercury.git'
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('0.9.0', tag='v0.9.0', submodules=True)
maintainers = ['soumagne']
variant('bmi', default=False, description='Use BMI 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')
version('master', branch='master', submodules=True)
version('1.0.1', sha256='02febd56c401ef7afa250caf28d012b37dee842bfde7ee16fcd2f741b9cf25b3')
version('1.0.0', sha256='fb0e44d13f4652f53e21040435f91d452bc2b629b6e98dcf5292cd0bece899d4')
version('0.9.0', sha256='40868e141cac035213fe79400f8926823fb1f5a0651fd7027cbe162b063843ef')
variant('bmi', default=False, description='Use BMI plugin')
variant('cci', default=False, description='Use CCI plugin')
variant('mpi', default=False, description='Use MPI plugin')
variant('ofi', default=True, description='Use OFI libfabric plugin')
# NOTE: the sm plugin does not require any package dependency.
variant('sm', default=True, description='Use shared-memory plugin')
# NOTE: if boostsys is False, mercury will install its own copy
# of the preprocessor headers.
variant('boostsys', default=True,
description='Use preprocessor headers from boost dependency')
variant('shared', default=True,
description='Build with shared libraries')
variant('selfforward', default=True,
description='Mercury will short-circuit operations' +
' by forwarding to itself when possible')
@ -38,78 +45,55 @@ class Mercury(CMakePackage):
depends_on('bmi', when='+bmi')
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')
depends_on('openpa@1.0.3:', when='%gcc@:4.8')
depends_on('boost@1.48:', when='+boostsys')
depends_on('boost', when='@:0.9') # internal boost headers were added in 1.0.0
conflicts('+ofi', when='@:0.9') # libfabric support was added in 1.0.0
conflicts('~ofi', when='+udreg') # udreg option is specific to OFI
def cmake_args(self):
"""Populate cmake arguments for Mercury."""
spec = self.spec
args = [
'-DBUILD_SHARED_LIBS=ON',
'-DMERCURY_USE_CHECKSUMS=ON',
'-DMERCURY_USE_EAGER_BULK=ON',
'-DMERCURY_USE_SYSTEM_MCHECKSUM=OFF',
'-DMERCURY_USE_XDR=OFF'
variant_bool = lambda feature: str(feature in spec)
parallel_tests = '+mpi' in spec and self.run_tests
cmake_args = [
'-DBUILD_SHARED_LIBS:BOOL=%s' % variant_bool('+shared'),
'-DBUILD_TESTING:BOOL=%s' % str(self.run_tests),
'-DMERCURY_ENABLE_PARALLEL_TESTING:BOOL=%s' % str(parallel_tests),
'-DMERCURY_USE_BOOST_PP:BOOL=ON',
'-DMERCURY_USE_CHECKSUMS:BOOL=ON',
'-DMERCURY_USE_EAGER_BULK:BOOL=ON',
'-DMERCURY_USE_SELF_FORWARD:BOOL=%s'
% variant_bool('+selfforward'),
'-DMERCURY_USE_SYSTEM_MCHECKSUM:BOOL=OFF',
'-DMERCURY_USE_XDR:BOOL=OFF',
'-DNA_USE_BMI:BOOL=%s' % variant_bool('+bmi'),
'-DNA_USE_CCI:BOOL=%s' % variant_bool('+cci'),
'-DNA_USE_MPI:BOOL=%s' % variant_bool('+mpi'),
'-DNA_USE_SM:BOOL=%s' % variant_bool('+sm'),
]
if '+boost' in spec:
args.append('-DMERCURY_USE_BOOST_PP=ON')
else:
args.append('-DMERCURY_USE_BOOST_PP=OFF')
if '+bmi' in spec:
args.append('-DNA_USE_BMI=ON')
else:
args.append('-DNA_USE_BMI=OFF')
if '+cci' in spec:
args.append('-DNA_USE_CCI=ON')
else:
args.append('-DNA_USE_CCI=OFF')
if '+mpi' in spec:
args.append('-DNA_USE_MPI=ON')
else:
args.append('-DNA_USE_MPI=OFF')
if '@1.0.0:' in spec:
cmake_args.extend([
'-DMERCURY_USE_SYSTEM_BOOST:BOOL=%s'
% variant_bool('+boostsys'),
'-DNA_USE_OFI:BOOL=%s' % variant_bool('+ofi'),
])
if '+ofi' in spec:
args.append('-DNA_USE_OFI=ON')
cmake_args.append(
'-DNA_OFI_GNI_USE_UDREG:BOOL=%s' % variant_bool('+udreg')
)
if self.run_tests:
args.append('-DNA_OFI_TESTING_PROTOCOL={0}'.format(';'.join(
spec['libfabric'].variants['fabrics'].value)))
else:
args.append('-DNA_USE_OFI=OFF')
cmake_args.append(
'-DNA_OFI_TESTING_PROTOCOL:STRING={0}'.format(
';'.join(spec['libfabric'].variants['fabrics'].value)
)
)
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 cmake_args
def check(self):
"""Unit tests fail when run in parallel."""