diff options
author | Barry Smith <bsmith@mcs.anl.gov> | 2016-11-02 11:17:13 -0500 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2016-11-02 11:17:13 -0500 |
commit | 9455621ec23c3a1e898b94ae54f751533474a10a (patch) | |
tree | 8cd4988725c0ce313e2a5ab6377b5f93c7fe020d | |
parent | 8fb5cb2137e1277abcd96285865dac5ac7f5e623 (diff) | |
download | spack-9455621ec23c3a1e898b94ae54f751533474a10a.tar.gz spack-9455621ec23c3a1e898b94ae54f751533474a10a.tar.bz2 spack-9455621ec23c3a1e898b94ae54f751533474a10a.tar.xz spack-9455621ec23c3a1e898b94ae54f751533474a10a.zip |
Add support for gfortran to be used with clang (#2192)
1) list gfortran as a fc and f77 compiler that can work with clang
2) allow compatible gfortran to ./spack compiler find with clang by matching version numbers
This is based on the discussions in
https://github.com/LLNL/spack/issues/237
https://github.com/dealii/dealii/wiki/deal.II-in-Spack#mixing-gcc-and-clang-on-osx
This is not a long term solution but something to get us through the next months until the compiler
infrastructure is reworked to allow mixing and matching for C/C++ and Fortran compilers
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1.5 hours
l--------- | lib/spack/env/clang/gfortran | 1 | ||||
-rw-r--r-- | lib/spack/spack/compilers/clang.py | 31 |
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/spack/env/clang/gfortran b/lib/spack/env/clang/gfortran new file mode 120000 index 0000000000..82c2b8e90a --- /dev/null +++ b/lib/spack/env/clang/gfortran @@ -0,0 +1 @@ +../cc
\ No newline at end of file diff --git a/lib/spack/spack/compilers/clang.py b/lib/spack/spack/compilers/clang.py index 34eec4ea7b..da18adcecd 100644 --- a/lib/spack/spack/compilers/clang.py +++ b/lib/spack/spack/compilers/clang.py @@ -24,6 +24,7 @@ ############################################################################## import re import os +import sys import spack import spack.compiler as cpr from spack.compiler import * @@ -41,18 +42,18 @@ class Clang(Compiler): cxx_names = ['clang++'] # Subclasses use possible names of Fortran 77 compiler - f77_names = [] + f77_names = ['gfortran'] # Subclasses use possible names of Fortran 90 compiler - fc_names = [] + fc_names = ['gfortran'] # Named wrapper links within spack.build_env_path link_paths = {'cc': 'clang/clang', 'cxx': 'clang/clang++', # Use default wrappers for fortran, in case provided in # compilers.yaml - 'f77': 'f77', - 'fc': 'f90'} + 'f77': 'clang/gfortran', + 'fc': 'clang/gfortran'} @property def is_apple(self): @@ -121,6 +122,28 @@ class Clang(Compiler): full_path = xcrun('-f', basename, output=str) return full_path.strip() + @classmethod + def fc_version(cls, fc): + version = get_compiler_version( + fc, '-dumpversion', + # older gfortran versions don't have simple dumpversion output. + r'(?:GNU Fortran \(GCC\))?(\d+\.\d+(?:\.\d+)?)') + # This is horribly ad hoc, we need to map from gcc/gfortran version + # to clang version, but there could be multiple clang + # versions that work for a single gcc/gfortran version + if sys.platform == 'darwin': + clangversionfromgcc = {'6.2.0': '8.0.0-apple'} + else: + clangversionfromgcc = {} + if version in clangversionfromgcc: + return clangversionfromgcc[version] + else: + return 'unknown' + + @classmethod + def f77_version(cls, f77): + return cls.fc_version(f77) + def setup_custom_environment(self, env): """Set the DEVELOPER_DIR environment for the Xcode toolchain. |