builtin: add cc, cxx, and fortran properties

These properties are implemented in the same way in each compiler
package, at least for external specs. So, push the implementation
to the base class for now.

This needs to be revisited, to make the base class less dependent
on C, C++, and Fortran.
This commit is contained in:
Massimiliano Culpo 2024-12-16 20:50:59 +01:00
parent da48fdd864
commit e5f8049f3d
No known key found for this signature in database
GPG Key ID: 3E52BB992233066C
10 changed files with 53 additions and 179 deletions

View File

@ -400,28 +400,13 @@ def _standard_flag(self, *, language, standard):
}
return flags[language][standard]
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
def _cc_path(self):
return join_path(get_acfl_prefix(self.spec), "bin", "armclang")
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
def _cxx_path(self):
return join_path(get_acfl_prefix(self.spec), "bin", "armclang++")
@property
def fortran(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fortran", None)
def _fortran_path(self):
return join_path(get_acfl_prefix(self.spec), "bin", "armflang")
@property

View File

@ -24,12 +24,33 @@ class Cce(Package, CompilerPackage):
debug_flags = ["-g", "-G0", "-G1", "-G2", "-Gfast"]
liink_paths = {
link_paths = {
"c": os.path.join("cce", "craycc"),
"cxx": os.path.join("cce", "case-insensitive", "crayCC"),
"fortran": os.path.join("cce", "crayftn"),
}
required_libs = [
"libalign",
"libcrayacc_amdgpu",
"libcrayacc_x86_64",
"libcraymath",
"libcraymp",
"libcrayompd",
"libcsup",
"libfi",
"libf",
"libmodules64",
"libmodules",
"libopenacc_amdgpu",
"libopenacc",
"libopenacc_x86_64",
"libpgas-shmem",
"libplinterface",
"libquadmath",
"libu",
]
maintainers("becker33")
version("16.0.0")

View File

@ -693,38 +693,20 @@ def validate_detected_spec(cls, spec, extra_attributes):
msg = "{0} not in {1}"
assert key in compilers, msg.format(key, spec)
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
result = None
def _cc_path(self):
if self.spec.satisfies("languages=c"):
result = str(self.spec.prefix.bin.gcc)
return result
return str(self.spec.prefix.bin.gcc)
return None
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
result = None
def _cxx_path(self):
if self.spec.satisfies("languages=c++"):
result = os.path.join(self.spec.prefix.bin, "g++")
return result
return os.path.join(self.spec.prefix.bin, "g++")
return None
@property
def fortran(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fortran", None)
result = None
def _fortran_path(self):
if self.spec.satisfies("languages=fortran"):
result = str(self.spec.prefix.bin.gfortran)
return result
return str(self.spec.prefix.bin.gfortran)
return None
def url_for_version(self, version):
# This function will be called when trying to fetch from url, before

View File

@ -109,28 +109,13 @@ def symlink_dir(self, src, dest):
else:
os.symlink(src_path, dest_path)
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
def _cc_path(self):
return str(self.prefix.bin.icc)
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
def _cxx_path(self):
return str(self.prefix.bin.icpc)
@property
def fortran(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fortran", None)
def _fortran_path(self):
return str(self.prefix.bin.ifort)
def archspec_name(self):

View File

@ -671,26 +671,11 @@ def runtime_constraints(cls, *, spec, pkg):
when=f"^[deptypes=build] {spec.name}@{spec.versions}",
)
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
def _cc_path(self):
return str(self._llvm_bin.icx)
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
def _cxx_path(self):
return str(self._llvm_bin.icpx)
@property
def fortran(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fortran", None)
def _fortran_path(self):
return str(self._llvm_bin.ifx)

View File

@ -354,26 +354,11 @@ def setup_dependent_build_environment(self, env, dependent_spec):
env.prepend_path("LD_LIBRARY_PATH", root)
env.prune_duplicate_paths("LD_LIBRARY_PATH")
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
def _cc_path(self):
return os.path.join(self.spec.prefix.bin, "amdclang")
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
def _cxx_path(self):
return os.path.join(self.spec.prefix.bin, "amdclang++")
@property
def fc(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fc", None)
def _fortran_path(self):
return os.path.join(self.spec.prefix.bin, "amdflang")

View File

@ -833,49 +833,20 @@ def validate_detected_spec(cls, spec, extra_attributes):
msg = "{0} compiler not found for {1}"
assert key in compilers, msg.format(key, spec)
@property
def cc(self):
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("c", None)
result = None
def _cc_path(self):
if self.spec.satisfies("+clang"):
result = os.path.join(self.spec.prefix.bin, "clang")
return result
return os.path.join(self.spec.prefix.bin, "clang")
return None
@property
def cxx(self):
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("cxx", None)
result = None
def _cxx_path(self):
if self.spec.satisfies("+clang"):
result = os.path.join(self.spec.prefix.bin, "clang++")
return result
return os.path.join(self.spec.prefix.bin, "clang++")
return None
@property
def fc(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fc", None)
result = None
def _fortran_path(self):
if self.spec.satisfies("+flang"):
result = os.path.join(self.spec.prefix.bin, "flang")
return result
@property
def f77(self):
msg = "cannot retrieve Fortran 77 compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("f77", None)
result = None
if self.spec.satisfies("+flang"):
result = os.path.join(self.spec.prefix.bin, "flang")
return result
return os.path.join(self.spec.prefix.bin, "flang")
return None
debug_flags = [
"-gcodeview",

View File

@ -63,20 +63,6 @@ def determine_variants(cls, exes, version_str):
extras["compilers"]["c"] = extras["compilers"]["cxx"]
return spec, extras
@property
def cc(self):
if self.spec.external:
return self.spec.extra_attributes["compilers"]["c"]
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
@property
def cxx(self):
if self.spec.external:
return self.spec.extra_attributes["compilers"]["cxx"]
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
def setup_dependent_build_environment(self, env, dependent_spec):
self.init_msvc()
# Set the build environment variables for spack. Just using

View File

@ -115,10 +115,5 @@ def setup_run_environment(self, env):
openmp_flag = "-openmp"
@property
def fortran(self):
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg
if self.spec.external:
return self.spec.extra_attributes["compilers"].get("fortran", None)
def _fortran_path(self):
return str(self.spec.prefix.bin.nagfor)

View File

@ -88,24 +88,3 @@ def determine_variants(cls, exes, version_str):
if _compilers:
results.append(("~r", {"compilers": _compilers}))
return results
@property
def cc(self):
if self.spec.external:
return self.spec.extra_attributes["compilers"]["c"]
msg = "cannot retrieve C compiler [spec is not concrete]"
assert self.spec.concrete, msg
@property
def cxx(self):
if self.spec.external:
return self.spec.extra_attributes["compilers"]["cxx"]
msg = "cannot retrieve C++ compiler [spec is not concrete]"
assert self.spec.concrete, msg
@property
def fortran(self):
if self.spec.external:
return self.spec.extra_attributes["compilers"]["fortran"]
msg = "cannot retrieve Fortran compiler [spec is not concrete]"
assert self.spec.concrete, msg