Added compiler detection for CNL
This commit is contained in:
parent
36cb494c8c
commit
8edf6b7c81
@ -607,7 +607,7 @@ def _default(cmp_id, paths):
|
|||||||
compiler = compiler_cls(
|
compiler = compiler_cls(
|
||||||
spec, operating_system, py_platform.machine(), paths
|
spec, operating_system, py_platform.machine(), paths
|
||||||
)
|
)
|
||||||
return compiler
|
return [compiler]
|
||||||
|
|
||||||
for compiler_id, by_compiler_id in compilers_d.items():
|
for compiler_id, by_compiler_id in compilers_d.items():
|
||||||
_, selected_name_variation = max(
|
_, selected_name_variation = max(
|
||||||
@ -618,9 +618,8 @@ def _default(cmp_id, paths):
|
|||||||
# Add it to the list of compilers
|
# Add it to the list of compilers
|
||||||
selected = by_compiler_id[selected_name_variation]
|
selected = by_compiler_id[selected_name_variation]
|
||||||
operating_system, _, _ = compiler_id
|
operating_system, _, _ = compiler_id
|
||||||
make_compiler = getattr(operating_system, 'make_compiler', _default)
|
make_compilers = getattr(operating_system, 'make_compilers', _default)
|
||||||
compiler_instance = make_compiler(compiler_id, selected)
|
compilers.extend(make_compilers(compiler_id, selected))
|
||||||
compilers.append(compiler_instance)
|
|
||||||
|
|
||||||
return compilers
|
return compilers
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ def __init__(self):
|
|||||||
name = 'cnl'
|
name = 'cnl'
|
||||||
version = self._detect_crayos_version()
|
version = self._detect_crayos_version()
|
||||||
super(Cnl, self).__init__(name, version)
|
super(Cnl, self).__init__(name, version)
|
||||||
|
self.modulecmd = module
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name + str(self.version)
|
return self.name + str(self.version)
|
||||||
@ -34,39 +35,54 @@ def _detect_crayos_version(self):
|
|||||||
latest_version = max(major_versions)
|
latest_version = max(major_versions)
|
||||||
return latest_version
|
return latest_version
|
||||||
|
|
||||||
def find_compilers(self, *paths):
|
def arguments_to_detect_version_fn(self, paths):
|
||||||
# function-local so that cnl doesn't depend on spack.config
|
|
||||||
import spack.compilers
|
import spack.compilers
|
||||||
|
|
||||||
types = spack.compilers.all_compiler_types()
|
command_arguments = []
|
||||||
# TODO: was parmap before
|
for compiler_name in spack.compilers.supported_compilers():
|
||||||
compiler_lists = map(
|
cmp_cls = spack.compilers.class_for_compiler_name(compiler_name)
|
||||||
lambda cmp_cls: self.find_compiler(cmp_cls, *paths), types)
|
|
||||||
|
|
||||||
# ensure all the version calls we made are cached in the parent
|
# If the compiler doesn't have a corresponding
|
||||||
# process, as well. This speeds up Spack a lot.
|
# Programming Environment, skip to the next
|
||||||
clist = [comp for cl in compiler_lists for comp in cl]
|
if cmp_cls.PrgEnv is None:
|
||||||
return clist
|
continue
|
||||||
|
|
||||||
def find_compiler(self, cmp_cls, *paths):
|
if cmp_cls.PrgEnv_compiler is None:
|
||||||
# function-local so that cnl doesn't depend on spack.config
|
|
||||||
import spack.spec
|
|
||||||
|
|
||||||
compilers = []
|
|
||||||
if cmp_cls.PrgEnv:
|
|
||||||
if not cmp_cls.PrgEnv_compiler:
|
|
||||||
tty.die('Must supply PrgEnv_compiler with PrgEnv')
|
tty.die('Must supply PrgEnv_compiler with PrgEnv')
|
||||||
|
|
||||||
output = module('avail', cmp_cls.PrgEnv_compiler)
|
compiler_id = spack.compilers.CompilerID(self, compiler_name, None)
|
||||||
version_regex = r'(%s)/([\d\.]+[\d])' % cmp_cls.PrgEnv_compiler
|
detect_version_args = spack.compilers.DetectVersionArgs(
|
||||||
matches = re.findall(version_regex, output)
|
id=compiler_id, variation=(None, None),
|
||||||
for name, version in matches:
|
language='cc', path='cc'
|
||||||
v = version
|
)
|
||||||
comp = cmp_cls(
|
command_arguments.append(detect_version_args)
|
||||||
spack.spec.CompilerSpec(name + '@' + v),
|
return command_arguments
|
||||||
self, "any",
|
|
||||||
['cc', 'CC', 'ftn'], [cmp_cls.PrgEnv, name + '/' + v])
|
|
||||||
|
|
||||||
compilers.append(comp)
|
def detect_version(self, detect_version_args):
|
||||||
|
import spack.compilers
|
||||||
|
modulecmd = self.modulecmd
|
||||||
|
compiler_name = detect_version_args.id.compiler_name
|
||||||
|
compiler_cls = spack.compilers.class_for_compiler_name(compiler_name)
|
||||||
|
output = modulecmd('avail', compiler_cls.PrgEnv_compiler)
|
||||||
|
version_regex = r'(%s)/([\d\.]+[\d])' % compiler_cls.PrgEnv_compiler
|
||||||
|
matches = re.findall(version_regex, output)
|
||||||
|
version = tuple(version for _, version in matches)
|
||||||
|
compiler_id = detect_version_args.id
|
||||||
|
value = detect_version_args._replace(
|
||||||
|
id=compiler_id._replace(version=version)
|
||||||
|
)
|
||||||
|
return value, None
|
||||||
|
|
||||||
|
def make_compilers(self, compiler_id, paths):
|
||||||
|
import spack.spec
|
||||||
|
name = compiler_id.compiler_name
|
||||||
|
cmp_cls = spack.compilers.class_for_compiler_name(name)
|
||||||
|
compilers = []
|
||||||
|
for v in compiler_id.version:
|
||||||
|
comp = cmp_cls(
|
||||||
|
spack.spec.CompilerSpec(name + '@' + v),
|
||||||
|
self, "any",
|
||||||
|
['cc', 'CC', 'ftn'], [cmp_cls.PrgEnv, name + '/' + v])
|
||||||
|
|
||||||
|
compilers.append(comp)
|
||||||
return compilers
|
return compilers
|
||||||
|
Loading…
Reference in New Issue
Block a user