openmpi : revert part of #1079 (OpenMPI can be built without fortran)
Building OpenMPI without fortran is possible, and was already handled. Raising an install error we effectively renounce at clang+OpenMPI. build_environment : sets 'CC', 'CXX', and similar variables only if a compiler is found
This commit is contained in:
parent
f74d4b0660
commit
b86e3047f3
@ -183,20 +183,20 @@ def set_compiler_environment_variables(pkg, env):
|
|||||||
# and return it
|
# and return it
|
||||||
# TODO : add additional kwargs for better diagnostics, like requestor, ttyout, ttyerr, etc.
|
# TODO : add additional kwargs for better diagnostics, like requestor, ttyout, ttyerr, etc.
|
||||||
link_dir = spack.build_env_path
|
link_dir = spack.build_env_path
|
||||||
env.set('CC', join_path(link_dir, compiler.link_paths['cc']))
|
|
||||||
env.set('CXX', join_path(link_dir, compiler.link_paths['cxx']))
|
|
||||||
env.set('F77', join_path(link_dir, compiler.link_paths['f77']))
|
|
||||||
env.set('FC', join_path(link_dir, compiler.link_paths['fc']))
|
|
||||||
|
|
||||||
# Set SPACK compiler variables so that our wrapper knows what to call
|
# Set SPACK compiler variables so that our wrapper knows what to call
|
||||||
if compiler.cc:
|
if compiler.cc:
|
||||||
env.set('SPACK_CC', compiler.cc)
|
env.set('SPACK_CC', compiler.cc)
|
||||||
|
env.set('CC', join_path(link_dir, compiler.link_paths['cc']))
|
||||||
if compiler.cxx:
|
if compiler.cxx:
|
||||||
env.set('SPACK_CXX', compiler.cxx)
|
env.set('SPACK_CXX', compiler.cxx)
|
||||||
|
env.set('CXX', join_path(link_dir, compiler.link_paths['cxx']))
|
||||||
if compiler.f77:
|
if compiler.f77:
|
||||||
env.set('SPACK_F77', compiler.f77)
|
env.set('SPACK_F77', compiler.f77)
|
||||||
|
env.set('F77', join_path(link_dir, compiler.link_paths['f77']))
|
||||||
if compiler.fc:
|
if compiler.fc:
|
||||||
env.set('SPACK_FC', compiler.fc)
|
env.set('SPACK_FC', compiler.fc)
|
||||||
|
env.set('FC', join_path(link_dir, compiler.link_paths['fc']))
|
||||||
|
|
||||||
# Set SPACK compiler rpath flags so that our wrapper knows what to use
|
# Set SPACK compiler rpath flags so that our wrapper knows what to use
|
||||||
env.set('SPACK_CC_RPATH_ARG', compiler.cc_rpath_arg)
|
env.set('SPACK_CC_RPATH_ARG', compiler.cc_rpath_arg)
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
@ -118,6 +120,21 @@ def setup_dependent_package(self, module, dep_spec):
|
|||||||
self.spec.mpifc = join_path(self.prefix.bin, 'mpif90')
|
self.spec.mpifc = join_path(self.prefix.bin, 'mpif90')
|
||||||
self.spec.mpif77 = join_path(self.prefix.bin, 'mpif77')
|
self.spec.mpif77 = join_path(self.prefix.bin, 'mpif77')
|
||||||
|
|
||||||
|
def setup_environment(self, spack_env, run_env):
|
||||||
|
# As of 06/2016 there is no mechanism to specify that packages which
|
||||||
|
# depends on MPI need C or/and Fortran implementation. For now
|
||||||
|
# require both.
|
||||||
|
if (self.compiler.f77 is None) or (self.compiler.fc is None):
|
||||||
|
tty.warn('OpenMPI : FORTRAN compiler not found')
|
||||||
|
tty.warn('OpenMPI : FORTRAN bindings will be disabled')
|
||||||
|
spack_env.unset('FC')
|
||||||
|
spack_env.unset('F77')
|
||||||
|
# Setting an attribute here and using it in the 'install'
|
||||||
|
# method is needed to ensure tty.warn is actually displayed
|
||||||
|
# to user and not redirected to spack-build.out
|
||||||
|
self.config_extra = ['--enable-mpi-fortran=none',
|
||||||
|
'--disable-oshmem-fortran']
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def verbs(self):
|
def verbs(self):
|
||||||
# Up through version 1.6, this option was previously named
|
# Up through version 1.6, this option was previously named
|
||||||
@ -129,17 +146,14 @@ def verbs(self):
|
|||||||
return 'verbs'
|
return 'verbs'
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# As of 06/2016 there is no mechanism to specify that packages which
|
|
||||||
# depends on MPI need C or/and Fortran implementation. For now
|
|
||||||
# require both.
|
|
||||||
if (self.compiler.f77 is None) or (self.compiler.fc is None):
|
|
||||||
raise InstallError('OpenMPI requires both C and Fortran ',
|
|
||||||
'compilers!')
|
|
||||||
|
|
||||||
config_args = ["--prefix=%s" % prefix,
|
config_args = ["--prefix=%s" % prefix,
|
||||||
"--with-hwloc=%s" % spec['hwloc'].prefix,
|
"--with-hwloc=%s" % spec['hwloc'].prefix,
|
||||||
"--enable-shared",
|
"--enable-shared",
|
||||||
"--enable-static"]
|
"--enable-static"]
|
||||||
|
|
||||||
|
if getattr(self, 'config_extra', None) is not None:
|
||||||
|
config_args.extend(self.config_extra)
|
||||||
|
|
||||||
# Variant based arguments
|
# Variant based arguments
|
||||||
config_args.extend([
|
config_args.extend([
|
||||||
# Schedulers
|
# Schedulers
|
||||||
@ -170,9 +184,6 @@ def install(self, spec, prefix):
|
|||||||
if self.version == ver("1.6.5") and '+lanl' in spec:
|
if self.version == ver("1.6.5") and '+lanl' in spec:
|
||||||
config_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas") # NOQA: ignore=E501
|
config_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas") # NOQA: ignore=E501
|
||||||
|
|
||||||
if not self.compiler.f77 and not self.compiler.fc:
|
|
||||||
config_args.append("--enable-mpi-fortran=no")
|
|
||||||
|
|
||||||
configure(*config_args)
|
configure(*config_args)
|
||||||
make()
|
make()
|
||||||
make("install")
|
make("install")
|
||||||
|
Loading…
Reference in New Issue
Block a user