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:
parent
da48fdd864
commit
e5f8049f3d
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user