Move spack.compilers._to_dict
to Compiler
(#46051)
This commit is contained in:
parent
297e43b097
commit
9a91f021a7
@ -29,6 +29,9 @@
|
|||||||
|
|
||||||
__all__ = ["Compiler"]
|
__all__ = ["Compiler"]
|
||||||
|
|
||||||
|
PATH_INSTANCE_VARS = ["cc", "cxx", "f77", "fc"]
|
||||||
|
FLAG_INSTANCE_VARS = ["cflags", "cppflags", "cxxflags", "fflags"]
|
||||||
|
|
||||||
|
|
||||||
@llnl.util.lang.memoized
|
@llnl.util.lang.memoized
|
||||||
def _get_compiler_version_output(compiler_path, version_arg, ignore_errors=()):
|
def _get_compiler_version_output(compiler_path, version_arg, ignore_errors=()):
|
||||||
@ -700,6 +703,30 @@ def compiler_environment(self):
|
|||||||
os.environ.clear()
|
os.environ.clear()
|
||||||
os.environ.update(backup_env)
|
os.environ.update(backup_env)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
flags_dict = {fname: " ".join(fvals) for fname, fvals in self.flags.items()}
|
||||||
|
flags_dict.update(
|
||||||
|
{attr: getattr(self, attr, None) for attr in FLAG_INSTANCE_VARS if hasattr(self, attr)}
|
||||||
|
)
|
||||||
|
result = {
|
||||||
|
"spec": str(self.spec),
|
||||||
|
"paths": {attr: getattr(self, attr, None) for attr in PATH_INSTANCE_VARS},
|
||||||
|
"flags": flags_dict,
|
||||||
|
"operating_system": str(self.operating_system),
|
||||||
|
"target": str(self.target),
|
||||||
|
"modules": self.modules or [],
|
||||||
|
"environment": self.environment or {},
|
||||||
|
"extra_rpaths": self.extra_rpaths or [],
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.enable_implicit_rpaths is not None:
|
||||||
|
result["implicit_rpaths"] = self.enable_implicit_rpaths
|
||||||
|
|
||||||
|
if self.alias:
|
||||||
|
result["alias"] = self.alias
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class CompilerAccessError(spack.error.SpackError):
|
class CompilerAccessError(spack.error.SpackError):
|
||||||
def __init__(self, compiler, paths):
|
def __init__(self, compiler, paths):
|
||||||
|
@ -31,8 +31,6 @@
|
|||||||
from spack.util.environment import get_path
|
from spack.util.environment import get_path
|
||||||
from spack.util.naming import mod_to_class
|
from spack.util.naming import mod_to_class
|
||||||
|
|
||||||
_path_instance_vars = ["cc", "cxx", "f77", "fc"]
|
|
||||||
_flags_instance_vars = ["cflags", "cppflags", "cxxflags", "fflags"]
|
|
||||||
_other_instance_vars = [
|
_other_instance_vars = [
|
||||||
"modules",
|
"modules",
|
||||||
"operating_system",
|
"operating_system",
|
||||||
@ -90,29 +88,7 @@ def converter(cspec_like, *args, **kwargs):
|
|||||||
|
|
||||||
def _to_dict(compiler):
|
def _to_dict(compiler):
|
||||||
"""Return a dict version of compiler suitable to insert in YAML."""
|
"""Return a dict version of compiler suitable to insert in YAML."""
|
||||||
d = {}
|
return {"compiler": compiler.to_dict()}
|
||||||
d["spec"] = str(compiler.spec)
|
|
||||||
d["paths"] = dict((attr, getattr(compiler, attr, None)) for attr in _path_instance_vars)
|
|
||||||
d["flags"] = dict((fname, " ".join(fvals)) for fname, fvals in compiler.flags.items())
|
|
||||||
d["flags"].update(
|
|
||||||
dict(
|
|
||||||
(attr, getattr(compiler, attr, None))
|
|
||||||
for attr in _flags_instance_vars
|
|
||||||
if hasattr(compiler, attr)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
d["operating_system"] = str(compiler.operating_system)
|
|
||||||
d["target"] = str(compiler.target)
|
|
||||||
d["modules"] = compiler.modules or []
|
|
||||||
d["environment"] = compiler.environment or {}
|
|
||||||
d["extra_rpaths"] = compiler.extra_rpaths or []
|
|
||||||
if compiler.enable_implicit_rpaths is not None:
|
|
||||||
d["implicit_rpaths"] = compiler.enable_implicit_rpaths
|
|
||||||
|
|
||||||
if compiler.alias:
|
|
||||||
d["alias"] = compiler.alias
|
|
||||||
|
|
||||||
return {"compiler": d}
|
|
||||||
|
|
||||||
|
|
||||||
def get_compiler_config(
|
def get_compiler_config(
|
||||||
@ -488,13 +464,15 @@ def compiler_from_dict(items):
|
|||||||
os = items.get("operating_system", None)
|
os = items.get("operating_system", None)
|
||||||
target = items.get("target", None)
|
target = items.get("target", None)
|
||||||
|
|
||||||
if not ("paths" in items and all(n in items["paths"] for n in _path_instance_vars)):
|
if not (
|
||||||
|
"paths" in items and all(n in items["paths"] for n in spack.compiler.PATH_INSTANCE_VARS)
|
||||||
|
):
|
||||||
raise InvalidCompilerConfigurationError(cspec)
|
raise InvalidCompilerConfigurationError(cspec)
|
||||||
|
|
||||||
cls = class_for_compiler_name(cspec.name)
|
cls = class_for_compiler_name(cspec.name)
|
||||||
|
|
||||||
compiler_paths = []
|
compiler_paths = []
|
||||||
for c in _path_instance_vars:
|
for c in spack.compiler.PATH_INSTANCE_VARS:
|
||||||
compiler_path = items["paths"][c]
|
compiler_path = items["paths"][c]
|
||||||
if compiler_path != "None":
|
if compiler_path != "None":
|
||||||
compiler_paths.append(compiler_path)
|
compiler_paths.append(compiler_path)
|
||||||
@ -904,9 +882,9 @@ def _extract_os_and_target(spec: "spack.spec.Spec"):
|
|||||||
class InvalidCompilerConfigurationError(spack.error.SpackError):
|
class InvalidCompilerConfigurationError(spack.error.SpackError):
|
||||||
def __init__(self, compiler_spec):
|
def __init__(self, compiler_spec):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
'Invalid configuration for [compiler "%s"]: ' % compiler_spec,
|
f'Invalid configuration for [compiler "{compiler_spec}"]: ',
|
||||||
"Compiler configuration must contain entries for all compilers: %s"
|
f"Compiler configuration must contain entries for "
|
||||||
% _path_instance_vars,
|
f"all compilers: {spack.compiler.PATH_INSTANCE_VARS}",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user