Remove code from Compiler that is not used anymore (#45982)
Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
This commit is contained in:
parent
f9f6f094c3
commit
b28583bc58
@ -202,18 +202,6 @@ class Compiler:
|
||||
support for specific compilers, their possible names, arguments,
|
||||
and how to identify the particular type of compiler."""
|
||||
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names: List[str] = []
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names: List[str] = []
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names: List[str] = []
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names: List[str] = []
|
||||
|
||||
# Optional prefix regexes for searching for this type of compiler.
|
||||
# Prefixes are sometimes used for toolchains
|
||||
prefixes: List[str] = []
|
||||
@ -619,18 +607,6 @@ def extract_version_from_output(cls, output):
|
||||
def cc_version(cls, cc):
|
||||
return cls.default_version(cc)
|
||||
|
||||
@classmethod
|
||||
def cxx_version(cls, cxx):
|
||||
return cls.default_version(cxx)
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.default_version(f77)
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fc):
|
||||
return cls.default_version(fc)
|
||||
|
||||
@classmethod
|
||||
def search_regexps(cls, language):
|
||||
# Compile all the regular expressions used for files beforehand.
|
||||
|
@ -8,6 +8,7 @@
|
||||
"""
|
||||
import importlib
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import warnings
|
||||
from typing import Dict, List, Optional
|
||||
@ -631,37 +632,34 @@ def is_mixed_toolchain(compiler):
|
||||
Args:
|
||||
compiler (spack.compiler.Compiler): a valid compiler object
|
||||
"""
|
||||
cc = os.path.basename(compiler.cc or "")
|
||||
cxx = os.path.basename(compiler.cxx or "")
|
||||
f77 = os.path.basename(compiler.f77 or "")
|
||||
fc = os.path.basename(compiler.fc or "")
|
||||
import spack.detection.path
|
||||
|
||||
executables = [
|
||||
os.path.basename(compiler.cc or ""),
|
||||
os.path.basename(compiler.cxx or ""),
|
||||
os.path.basename(compiler.f77 or ""),
|
||||
os.path.basename(compiler.fc or ""),
|
||||
]
|
||||
|
||||
toolchains = set()
|
||||
for compiler_cls in all_compiler_types():
|
||||
# Inspect all the compiler toolchain we know. If a compiler is the
|
||||
# only compiler supported there it belongs to that toolchain.
|
||||
def name_matches(name, name_list):
|
||||
# This is such that 'gcc' matches variations
|
||||
# like 'ggc-9' etc that are found in distros
|
||||
name, _, _ = name.partition("-")
|
||||
return len(name_list) == 1 and name and name in name_list
|
||||
finder = spack.detection.path.ExecutablesFinder()
|
||||
|
||||
if any(
|
||||
[
|
||||
name_matches(cc, compiler_cls.cc_names),
|
||||
name_matches(cxx, compiler_cls.cxx_names),
|
||||
name_matches(f77, compiler_cls.f77_names),
|
||||
name_matches(fc, compiler_cls.fc_names),
|
||||
]
|
||||
):
|
||||
tty.debug("[TOOLCHAIN] MATCH {0}".format(compiler_cls.__name__))
|
||||
toolchains.add(compiler_cls.__name__)
|
||||
for pkg_name in spack.repo.PATH.packages_with_tags(COMPILER_TAG):
|
||||
pkg_cls = spack.repo.PATH.get_pkg_class(pkg_name)
|
||||
patterns = finder.search_patterns(pkg=pkg_cls)
|
||||
if not patterns:
|
||||
continue
|
||||
joined_pattern = re.compile(r"|".join(patterns))
|
||||
|
||||
if any(joined_pattern.search(exe) for exe in executables):
|
||||
tty.debug(f"[TOOLCHAIN] MATCH {pkg_name}")
|
||||
toolchains.add(pkg_name)
|
||||
|
||||
if len(toolchains) > 1:
|
||||
if (
|
||||
toolchains == set(["Clang", "AppleClang", "Aocc"])
|
||||
toolchains == {"llvm", "apple-clang", "aocc"}
|
||||
# Msvc toolchain uses Intel ifx
|
||||
or toolchains == set(["Msvc", "Dpcpp", "Oneapi"])
|
||||
or toolchains == {"msvc", "intel-oneapi-compilers"}
|
||||
):
|
||||
return False
|
||||
tty.debug("[TOOLCHAINS] {0}".format(toolchains))
|
||||
|
@ -13,18 +13,6 @@
|
||||
|
||||
|
||||
class Aocc(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["clang"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["clang++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["flang"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["flang"]
|
||||
|
||||
version_argument = "--version"
|
||||
|
||||
@property
|
||||
|
@ -9,18 +9,6 @@
|
||||
|
||||
|
||||
class Arm(spack.compiler.Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["armclang"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["armclang++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["armflang"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["armflang"]
|
||||
|
||||
# Named wrapper links within lib/spack/env
|
||||
link_paths = {
|
||||
"cc": os.path.join("arm", "armclang"),
|
||||
@ -90,11 +78,3 @@ def fc_pic_flag(self):
|
||||
return "-fPIC"
|
||||
|
||||
required_libs = ["libclang", "libflang"]
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fc):
|
||||
return cls.default_version(fc)
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
||||
|
@ -19,18 +19,6 @@ def __init__(self, *args, **kwargs):
|
||||
if not self.is_clang_based:
|
||||
self.version_argument = "-V"
|
||||
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["craycc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["crayCC"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["crayftn"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["crayftn"]
|
||||
|
||||
# MacPorts builds gcc versions with prefixes and -mp-X.Y suffixes.
|
||||
suffixes = [r"-mp-\d\.\d"]
|
||||
|
||||
|
@ -31,18 +31,6 @@
|
||||
|
||||
|
||||
class Clang(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["clang"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["clang++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["flang-new", "flang"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["flang-new", "flang"]
|
||||
|
||||
version_argument = "--version"
|
||||
|
||||
@property
|
||||
|
@ -9,18 +9,6 @@
|
||||
|
||||
|
||||
class Fj(spack.compiler.Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["fcc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["FCC"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["frt"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["frt"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("fj", "fcc"),
|
||||
|
@ -4,7 +4,6 @@
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
from llnl.util.filesystem import ancestor
|
||||
|
||||
@ -15,18 +14,6 @@
|
||||
|
||||
|
||||
class Gcc(spack.compiler.Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["gcc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["g++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["gfortran"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["gfortran"]
|
||||
|
||||
# MacPorts builds gcc versions with prefixes and -mp-X or -mp-X.Y suffixes.
|
||||
# Homebrew and Linuxbrew may build gcc with -X, -X.Y suffixes.
|
||||
# Old compatibility versions may contain XY suffixes.
|
||||
@ -181,40 +168,6 @@ def default_version(cls, cc):
|
||||
version = cls.extract_version_from_output(output)
|
||||
return version
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fc):
|
||||
"""Older versions of gfortran use the ``-dumpversion`` option.
|
||||
Output looks like this::
|
||||
|
||||
GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
|
||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
|
||||
or::
|
||||
|
||||
4.8.5
|
||||
|
||||
In GCC 7, this option was changed to only return the major
|
||||
version of the compiler::
|
||||
|
||||
7
|
||||
|
||||
A new ``-dumpfullversion`` option was added that gives us
|
||||
what we want::
|
||||
|
||||
7.2.0
|
||||
"""
|
||||
output = spack.compiler.get_compiler_version_output(fc, "-dumpversion")
|
||||
match = re.search(r"(?:GNU Fortran \(GCC\) )?([\d.]+)", output)
|
||||
version = match.group(match.lastindex) if match else "unknown"
|
||||
if Version(version) >= Version("7"):
|
||||
output = spack.compiler.get_compiler_version_output(fc, "-dumpfullversion")
|
||||
version = cls.extract_version_from_output(output)
|
||||
return version
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
||||
|
||||
@property
|
||||
def stdcxx_libs(self):
|
||||
return ("-lstdc++",)
|
||||
|
@ -11,18 +11,6 @@
|
||||
|
||||
|
||||
class Intel(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["icc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["icpc"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["ifort"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["ifort"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("intel", "icc"),
|
||||
|
@ -8,7 +8,7 @@
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from typing import Dict, List
|
||||
from typing import Dict
|
||||
|
||||
import archspec.cpu
|
||||
|
||||
@ -117,18 +117,6 @@ def get_valid_fortran_pth():
|
||||
|
||||
|
||||
class Msvc(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names: List[str] = ["cl"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names: List[str] = ["cl"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names: List[str] = ["ifx"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names: List[str] = ["ifx"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
# Due to the challenges of supporting compiler wrappers
|
||||
# in Windows, we leave these blank, and dynamically compute
|
||||
@ -393,7 +381,3 @@ def fc_version(cls, fc):
|
||||
)
|
||||
clp = spack.util.executable.which_string("cl", path=sps)
|
||||
return cls.default_version(clp) if clp else fc_ver
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
import os
|
||||
import re
|
||||
from typing import List
|
||||
|
||||
import llnl.util.lang
|
||||
|
||||
@ -13,18 +12,6 @@
|
||||
|
||||
|
||||
class Nag(spack.compiler.Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names: List[str] = []
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names: List[str] = []
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["nagfor"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["nagfor"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
# Use default wrappers for C and C++, in case provided in compilers.yaml
|
||||
link_paths = {
|
||||
|
@ -9,18 +9,6 @@
|
||||
|
||||
|
||||
class Nvhpc(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["nvc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["nvc++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["nvfortran"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["nvfortran"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("nvhpc", "nvc"),
|
||||
|
@ -13,18 +13,6 @@
|
||||
|
||||
|
||||
class Oneapi(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["icx"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["icpx"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["ifx"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["ifx"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("oneapi", "icx"),
|
||||
|
@ -10,18 +10,6 @@
|
||||
|
||||
|
||||
class Pgi(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["pgcc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["pgc++", "pgCC"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["pgfortran", "pgf77"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["pgfortran", "pgf95", "pgf90"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("pgi", "pgcc"),
|
||||
|
@ -11,18 +11,6 @@
|
||||
|
||||
|
||||
class Rocmcc(spack.compilers.clang.Clang):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["amdclang"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["amdclang++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["amdflang"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["amdflang"]
|
||||
|
||||
@property
|
||||
def link_paths(self):
|
||||
link_paths = {
|
||||
@ -61,14 +49,6 @@ def extract_version_from_output(cls, output):
|
||||
if match:
|
||||
return ".".join(match.groups())
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fortran_compiler):
|
||||
return cls.default_version(fortran_compiler)
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
||||
|
||||
@property
|
||||
def stdcxx_libs(self):
|
||||
return ("-lstdc++",)
|
||||
|
@ -10,18 +10,6 @@
|
||||
|
||||
|
||||
class Xl(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["xlc"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["xlC", "xlc++"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["xlf"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["xlf90", "xlf95", "xlf2003", "xlf2008"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("xl", "xlc"),
|
||||
@ -103,31 +91,3 @@ def fflags(self):
|
||||
# For Fortran 90 and beyond, it is set by default and has not impact.
|
||||
# Its use has no negative side effects.
|
||||
return "-qzerosize"
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fc):
|
||||
# The fortran and C/C++ versions of the XL compiler are always
|
||||
# two units apart. By this we mean that the fortran release that
|
||||
# goes with XL C/C++ 11.1 is 13.1. Having such a difference in
|
||||
# version number is confusing spack quite a lot. Most notably
|
||||
# if you keep the versions as is the default xl compiler will
|
||||
# only have fortran and no C/C++. So we associate the Fortran
|
||||
# compiler with the version associated to the C/C++ compiler.
|
||||
# One last stumble. Version numbers over 10 have at least a .1
|
||||
# those under 10 a .0. There is no xlf 9.x or under currently
|
||||
# available. BG/P and BG/L can such a compiler mix and possibly
|
||||
# older version of AIX and linux on power.
|
||||
fortran_version = cls.default_version(fc)
|
||||
if fortran_version >= 16:
|
||||
# Starting with version 16.1, the XL C and Fortran compilers
|
||||
# have the same version. So no need to downgrade the Fortran
|
||||
# compiler version to match that of the C compiler version.
|
||||
return str(fortran_version)
|
||||
c_version = float(fortran_version) - 2
|
||||
if c_version < 10:
|
||||
c_version = c_version - 0.1
|
||||
return str(c_version)
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
||||
|
@ -9,18 +9,6 @@
|
||||
|
||||
|
||||
class XlR(spack.compilers.xl.Xl):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ["xlc_r"]
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ["xlC_r", "xlc++_r"]
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ["xlf_r"]
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ["xlf90_r", "xlf95_r", "xlf2003_r", "xlf2008_r"]
|
||||
|
||||
# Named wrapper links within build_env_path
|
||||
link_paths = {
|
||||
"cc": os.path.join("xl_r", "xlc_r"),
|
||||
|
@ -130,6 +130,7 @@ def test_arch_spec_container_semantic(item, architecture_str):
|
||||
],
|
||||
)
|
||||
@pytest.mark.filterwarnings("ignore:microarchitecture specific")
|
||||
@pytest.mark.not_on_windows("Windows doesn't support the compiler wrapper")
|
||||
def test_optimization_flags(compiler_spec, target_name, expected_flags, compiler_factory):
|
||||
target = spack.target.Target(target_name)
|
||||
compiler_dict = compiler_factory(spec=compiler_spec, operating_system="")["compiler"]
|
||||
|
@ -589,6 +589,7 @@ def test_xl_r_flags():
|
||||
"compiler_spec,expected_result",
|
||||
[("gcc@4.7.2", False), ("clang@3.3", False), ("clang@8.0.0", True)],
|
||||
)
|
||||
@pytest.mark.not_on_windows("GCC and LLVM currently not supported on the platform")
|
||||
def test_detecting_mixed_toolchains(
|
||||
compiler_spec, expected_result, mutable_config, compiler_factory
|
||||
):
|
||||
|
@ -101,7 +101,7 @@ def edit(self, spec, prefix):
|
||||
if "+scalapack" in spec:
|
||||
flags["FC"] = "{0}".format(spec["mpi"].mpifc)
|
||||
else:
|
||||
flags["FC"] = self.compiler.fc_names[0]
|
||||
flags["FC"] = self.compiler.fc
|
||||
|
||||
# Set FCFLAGS
|
||||
if self.compiler.flags.get("fflags") is not None:
|
||||
|
Loading…
Reference in New Issue
Block a user