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]
|
return flags[language][standard]
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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)
|
|
||||||
return join_path(get_acfl_prefix(self.spec), "bin", "armclang")
|
return join_path(get_acfl_prefix(self.spec), "bin", "armclang")
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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)
|
|
||||||
return join_path(get_acfl_prefix(self.spec), "bin", "armclang++")
|
return join_path(get_acfl_prefix(self.spec), "bin", "armclang++")
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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)
|
|
||||||
return join_path(get_acfl_prefix(self.spec), "bin", "armflang")
|
return join_path(get_acfl_prefix(self.spec), "bin", "armflang")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -24,12 +24,33 @@ class Cce(Package, CompilerPackage):
|
|||||||
|
|
||||||
debug_flags = ["-g", "-G0", "-G1", "-G2", "-Gfast"]
|
debug_flags = ["-g", "-G0", "-G1", "-G2", "-Gfast"]
|
||||||
|
|
||||||
liink_paths = {
|
link_paths = {
|
||||||
"c": os.path.join("cce", "craycc"),
|
"c": os.path.join("cce", "craycc"),
|
||||||
"cxx": os.path.join("cce", "case-insensitive", "crayCC"),
|
"cxx": os.path.join("cce", "case-insensitive", "crayCC"),
|
||||||
"fortran": os.path.join("cce", "crayftn"),
|
"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")
|
maintainers("becker33")
|
||||||
|
|
||||||
version("16.0.0")
|
version("16.0.0")
|
||||||
|
@ -693,38 +693,20 @@ def validate_detected_spec(cls, spec, extra_attributes):
|
|||||||
msg = "{0} not in {1}"
|
msg = "{0} not in {1}"
|
||||||
assert key in compilers, msg.format(key, spec)
|
assert key in compilers, msg.format(key, spec)
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("languages=c"):
|
if self.spec.satisfies("languages=c"):
|
||||||
result = str(self.spec.prefix.bin.gcc)
|
return str(self.spec.prefix.bin.gcc)
|
||||||
return result
|
return None
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("languages=c++"):
|
if self.spec.satisfies("languages=c++"):
|
||||||
result = os.path.join(self.spec.prefix.bin, "g++")
|
return os.path.join(self.spec.prefix.bin, "g++")
|
||||||
return result
|
return None
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("languages=fortran"):
|
if self.spec.satisfies("languages=fortran"):
|
||||||
result = str(self.spec.prefix.bin.gfortran)
|
return str(self.spec.prefix.bin.gfortran)
|
||||||
return result
|
return None
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
# This function will be called when trying to fetch from url, before
|
# This function will be called when trying to fetch from url, before
|
||||||
|
@ -109,28 +109,13 @@ def symlink_dir(self, src, dest):
|
|||||||
else:
|
else:
|
||||||
os.symlink(src_path, dest_path)
|
os.symlink(src_path, dest_path)
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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)
|
|
||||||
return str(self.prefix.bin.icc)
|
return str(self.prefix.bin.icc)
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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)
|
|
||||||
return str(self.prefix.bin.icpc)
|
return str(self.prefix.bin.icpc)
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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)
|
|
||||||
return str(self.prefix.bin.ifort)
|
return str(self.prefix.bin.ifort)
|
||||||
|
|
||||||
def archspec_name(self):
|
def archspec_name(self):
|
||||||
|
@ -671,26 +671,11 @@ def runtime_constraints(cls, *, spec, pkg):
|
|||||||
when=f"^[deptypes=build] {spec.name}@{spec.versions}",
|
when=f"^[deptypes=build] {spec.name}@{spec.versions}",
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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)
|
|
||||||
return str(self._llvm_bin.icx)
|
return str(self._llvm_bin.icx)
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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)
|
|
||||||
return str(self._llvm_bin.icpx)
|
return str(self._llvm_bin.icpx)
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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)
|
|
||||||
return str(self._llvm_bin.ifx)
|
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.prepend_path("LD_LIBRARY_PATH", root)
|
||||||
env.prune_duplicate_paths("LD_LIBRARY_PATH")
|
env.prune_duplicate_paths("LD_LIBRARY_PATH")
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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)
|
|
||||||
return os.path.join(self.spec.prefix.bin, "amdclang")
|
return os.path.join(self.spec.prefix.bin, "amdclang")
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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)
|
|
||||||
return os.path.join(self.spec.prefix.bin, "amdclang++")
|
return os.path.join(self.spec.prefix.bin, "amdclang++")
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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)
|
|
||||||
return os.path.join(self.spec.prefix.bin, "amdflang")
|
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}"
|
msg = "{0} compiler not found for {1}"
|
||||||
assert key in compilers, msg.format(key, spec)
|
assert key in compilers, msg.format(key, spec)
|
||||||
|
|
||||||
@property
|
def _cc_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("+clang"):
|
if self.spec.satisfies("+clang"):
|
||||||
result = os.path.join(self.spec.prefix.bin, "clang")
|
return os.path.join(self.spec.prefix.bin, "clang")
|
||||||
return result
|
return None
|
||||||
|
|
||||||
@property
|
def _cxx_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("+clang"):
|
if self.spec.satisfies("+clang"):
|
||||||
result = os.path.join(self.spec.prefix.bin, "clang++")
|
return os.path.join(self.spec.prefix.bin, "clang++")
|
||||||
return result
|
return None
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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
|
|
||||||
if self.spec.satisfies("+flang"):
|
if self.spec.satisfies("+flang"):
|
||||||
result = os.path.join(self.spec.prefix.bin, "flang")
|
return os.path.join(self.spec.prefix.bin, "flang")
|
||||||
return result
|
return None
|
||||||
|
|
||||||
@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
|
|
||||||
|
|
||||||
debug_flags = [
|
debug_flags = [
|
||||||
"-gcodeview",
|
"-gcodeview",
|
||||||
|
@ -63,20 +63,6 @@ def determine_variants(cls, exes, version_str):
|
|||||||
extras["compilers"]["c"] = extras["compilers"]["cxx"]
|
extras["compilers"]["c"] = extras["compilers"]["cxx"]
|
||||||
return spec, extras
|
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):
|
def setup_dependent_build_environment(self, env, dependent_spec):
|
||||||
self.init_msvc()
|
self.init_msvc()
|
||||||
# Set the build environment variables for spack. Just using
|
# Set the build environment variables for spack. Just using
|
||||||
|
@ -115,10 +115,5 @@ def setup_run_environment(self, env):
|
|||||||
|
|
||||||
openmp_flag = "-openmp"
|
openmp_flag = "-openmp"
|
||||||
|
|
||||||
@property
|
def _fortran_path(self):
|
||||||
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)
|
|
||||||
return str(self.spec.prefix.bin.nagfor)
|
return str(self.spec.prefix.bin.nagfor)
|
||||||
|
@ -88,24 +88,3 @@ def determine_variants(cls, exes, version_str):
|
|||||||
if _compilers:
|
if _compilers:
|
||||||
results.append(("~r", {"compilers": _compilers}))
|
results.append(("~r", {"compilers": _compilers}))
|
||||||
return results
|
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