Added mixins to modularize common behaviors across build-systems.
Modifications: * added a mixin to filter compiler wrappers from files * modified hdf5, openmpi, mpich, mvapich2 to use it
This commit is contained in:
@@ -35,7 +35,7 @@ def _process_manager_validator(values):
|
||||
)
|
||||
|
||||
|
||||
class Mvapich2(AutotoolsPackage):
|
||||
class Mvapich2(AutotoolsPackage, FilterCompilerWrappersPackageMixin):
|
||||
"""MVAPICH2 is an MPI implementation for Infiniband networks."""
|
||||
homepage = "http://mvapich.cse.ohio-state.edu/"
|
||||
url = "http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.2.tar.gz"
|
||||
@@ -232,32 +232,11 @@ def configure_args(self):
|
||||
args.extend(self.network_options)
|
||||
return args
|
||||
|
||||
@run_after('install')
|
||||
def filter_compilers(self):
|
||||
"""Run after install to make the MPI compilers use the
|
||||
compilers that Spack built the package with.
|
||||
|
||||
If this isn't done, they'll have CC, CXX, F77, and FC set
|
||||
to Spack's generic cc, c++, f77, and f90. We want them to
|
||||
be bound to whatever compiler they were built with.
|
||||
"""
|
||||
bin = self.prefix.bin
|
||||
mpicc = join_path(bin, 'mpicc')
|
||||
mpicxx = join_path(bin, 'mpicxx')
|
||||
mpif77 = join_path(bin, 'mpif77')
|
||||
mpif90 = join_path(bin, 'mpif90')
|
||||
mpifort = join_path(bin, 'mpifort')
|
||||
|
||||
# Substitute Spack compile wrappers for the real
|
||||
# underlying compiler
|
||||
kwargs = {'ignore_absent': True, 'backup': False, 'string': True}
|
||||
filter_file(env['CC'], self.compiler.cc, mpicc, **kwargs)
|
||||
filter_file(env['CXX'], self.compiler.cxx, mpicxx, **kwargs)
|
||||
filter_file(env['F77'], self.compiler.f77, mpif77, **kwargs)
|
||||
filter_file(env['FC'], self.compiler.fc, mpif90, **kwargs)
|
||||
filter_file(env['FC'], self.compiler.fc, mpifort, **kwargs)
|
||||
|
||||
# Remove this linking flag if present
|
||||
# (it turns RPATH into RUNPATH)
|
||||
for wrapper in (mpicc, mpicxx, mpif77, mpif90, mpifort):
|
||||
filter_file('-Wl,--enable-new-dtags', '', wrapper, **kwargs)
|
||||
@property
|
||||
def compiler_wrappers(self):
|
||||
return [
|
||||
join_path(self.prefix.bin, 'mpicc'),
|
||||
join_path(self.prefix.bin, 'mpicxx'),
|
||||
join_path(self.prefix.bin, 'mpif77'),
|
||||
join_path(self.prefix.bin, 'mpif90')
|
||||
]
|
||||
|
Reference in New Issue
Block a user