Skip to content
Snippets Groups Projects
Commit b86e3047 authored by Massimiliano Culpo's avatar Massimiliano Culpo
Browse files

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
parent f74d4b06
Branches
Tags
No related merge requests found
...@@ -183,20 +183,20 @@ def set_compiler_environment_variables(pkg, env): ...@@ -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 @@ ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment