changed compiler yaml format

This commit is contained in:
Gregory Becker 2016-06-10 16:26:02 -07:00
parent 196737c217
commit 992bcac794
5 changed files with 86 additions and 130 deletions

View File

@ -73,16 +73,14 @@ def _to_dict(compiler):
d = {}
d['spec'] = str(compiler.spec)
d['paths'] = dict( (attr, getattr(compiler, attr, None)) for attr in _path_instance_vars )
d['operating_system'] = compiler.operating_system.to_dict()
d['operating_system'] = str(compiler.operating_system)
d['modules'] = compiler.modules
if not compiler.alias:
yaml_text = yaml.dump(
d, default_flow_style=True, width=sys.maxint)
sha = hashlib.sha1(yaml_text)
compiler.alias = base64.b32encode(sha.digest()).lower()[:8]
if compiler.alias:
d['alias'] = compiler.alias
return {
compiler.alias: d
'compiler': d
}
@ -91,11 +89,11 @@ def get_compiler_config(scope=None):
"""
def init_compiler_config():
"""Compiler search used when Spack has no compilers."""
config = {}
compilers = find_compilers()
compilers_dict = []
for compiler in compilers:
config.update(_to_dict(compiler))
spack.config.update_config('compilers', config, scope=scope)
compilers_dict.append(_to_dict(compiler))
spack.config.update_config('compilers', compilers_dict, scope=scope)
config = spack.config.get_config('compilers', scope=scope)
# Update the configuration if there are currently no compilers
@ -127,7 +125,7 @@ def add_compilers_to_config(compilers, scope=None):
"""
compiler_config = get_compiler_config(scope)
for compiler in compilers:
compiler_config = _to_dict(compiler)
compiler_config.append(_to_dict(compiler))
spack.config.update_config('compilers', compiler_config, scope)
@ -167,8 +165,8 @@ def all_compilers_config(scope=None):
def all_compilers(scope=None):
# Return compiler specs from the merged config.
return [spack.spec.CompilerSpec(s['spec'])
for s in all_compilers_config(scope).values()]
return [spack.spec.CompilerSpec(s['compiler']['spec'])
for s in all_compilers_config(scope)]
def default_compiler():
@ -230,11 +228,10 @@ def compilers_for_spec(compiler_spec, scope=None, **kwargs):
def get_compilers(cspec):
compilers = []
for aka, cmp in config.items():
if cmp['spec'] != str(cspec):
for items in config:
if items['compiler']['spec'] != str(cspec):
continue
items = cmp
alias = aka
items = items['compiler']
if not ('paths' in items and all(n in items['paths'] for n in _path_instance_vars)):
raise InvalidCompilerConfigurationError(cspec)
@ -258,6 +255,9 @@ def get_compilers(cspec):
else:
operating_system = None
alias = items['alias'] if 'alias' in items else None
flags = {}
for f in spack.spec.FlagMap.valid_compiler_flags():
if f in items:

View File

@ -146,11 +146,9 @@
'additionalProperties': False,
'patternProperties': {
'compilers:?': { # optional colon for overriding site config.
'type': 'object',
'default': {},
'additionalProperties': False,
'patternProperties': {
r'\w[\w-]*': { # alias
'type': 'array',
'items': {
'compiler': {
'type': 'object',
'additionalProperties': False,
'required': ['paths', 'spec', 'modules', 'operating_system'],
@ -180,15 +178,10 @@
{'type' : 'null' }]},
'ldlibs': { 'anyOf': [ {'type' : 'string' },
{'type' : 'null' }]}}},
'spec': { 'type': 'string'},#r'\w[\w-]*@\w[\w-]*'
'operating_system': {
'type': 'object',
'required': ['name', 'version'],
'additionalProperties': False,
'properties': {
'name': {'type': 'string'},
'version': {'type': 'string'}
}},
'spec': { 'type': 'string'},
'operating_system': { 'type': 'string'},
'alias': { 'anyOf': [ {'type' : 'string'},
{'type' : 'null' }]},
'modules': { 'anyOf': [ {'type' : 'string'},
{'type' : 'null' },
{'type': 'array'},
@ -591,8 +584,7 @@ def they_are(t):
# Source list is prepended (for precedence)
if they_are(list):
seen = set(source)
dest[:] = source + [x for x in dest if x not in seen]
dest[:] = source + [x for x in dest if x not in source]
return dest
# Source dict is merged into dest.

View File

@ -32,8 +32,8 @@
from spack.test.mock_packages_test import *
# Some sample compiler config data
a_comps = {
'gcc473': {
a_comps = [
{'compiler': {
'paths': {
"cc" : "/gcc473",
"cxx": "/g++473",
@ -42,12 +42,9 @@
},
'modules': None,
'spec': 'gcc@4.7.3',
'operating_system': {
'name': 'CNL',
'version': '10'
}
},
'gcc450': {
'operating_system': 'CNL10'
}},
{'compiler': {
'paths': {
"cc" : "/gcc450",
"cxx": "/g++450",
@ -56,12 +53,9 @@
},
'modules': None,
'spec': 'gcc@4.5.0',
'operating_system': {
'name': 'CNL',
'version': '10'
}
},
'clang33': {
'operating_system': 'CNL10'
}},
{'compiler': {
'paths': {
"cc" : "<overwritten>",
"cxx": "<overwritten>",
@ -69,15 +63,12 @@
"fc" : '<overwritten>' },
'modules': None,
'spec': 'clang@3.3',
'operating_system': {
'name': 'CNL',
'version': '10'
}
}
}
'operating_system': 'CNL10'
}}
]
b_comps = {
'icc100': {
b_comps = [
{'compiler': {
'paths': {
"cc" : "/icc100",
"cxx": "/icp100",
@ -86,12 +77,9 @@
},
'modules': None,
'spec': 'icc@10.0',
'operating_system': {
'name': 'CNL',
'version': '10'
}
},
'icc111': {
'operating_system': 'CNL10'
}},
{'compiler': {
'paths': {
"cc" : "/icc111",
"cxx": "/icp111",
@ -100,12 +88,9 @@
},
'modules': None,
'spec': 'icc@11.1',
'operating_system': {
'name': 'CNL',
'version': '10'
}
},
'clang33': {
'operating_system': 'CNL10'
}},
{'compiler': {
'paths': {
"cc" : "<overwritten>",
"cxx": "<overwritten>",
@ -113,12 +98,9 @@
"fc" : '<overwritten>' },
'modules': None,
'spec': 'clang@3.3',
'operating_system': {
'name': 'CNL',
'version': '10'
}
}
}
'operating_system': 'CNL10'
}}
]
# Some Sample repo data
repos_low = [ "/some/path" ]
@ -143,15 +125,21 @@ def check_config(self, comps, *compiler_names):
config = spack.config.get_config('compilers')
compiler_list = ['cc', 'cxx', 'f77', 'fc']
param_list = ['modules', 'paths', 'spec', 'operating_system']
for alias, compiler in config.items():
if compiler['spec'] in compiler_names:
for compiler in config:
conf = compiler['compiler']
if conf['spec'] in compiler_names:
comp = None
for c in comps:
if c['compiler']['spec'] == conf['spec']:
comp = c['compiler']
break
if not comp:
self.fail('Bad config spec')
for p in param_list:
expected = comps[alias][p]
actual = config[alias][p]
self.assertEqual(expected, actual)
self.assertEqual(conf[p], comp[p])
for c in compiler_list:
expected = comps[alias]['paths'][c]
actual = config[alias]['paths'][c]
expected = comp['paths'][c]
actual = conf['paths'][c]
self.assertEqual(expected, actual)
def test_write_list_in_memory(self):

View File

@ -46,132 +46,108 @@
mock_compiler_config = """\
compilers:
clang3.3GENLINUX:
- compiler:
spec: clang@3.3
operating_system:
name: {0}
version: '{1}'
operating_system: {0}{1}
paths:
cc: /path/to/clang
cxx: /path/to/clang++
f77: None
fc: None
modules: 'None'
gcc4.5GENLINUX:
- compiler:
spec: gcc@4.5.0
operating_system:
name: {0}
version: '{1}'
operating_system: {0}{1}
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: None
fc: None
modules: 'None'
clang3.3CNL:
- compiler:
spec: clang@3.3
operating_system:
name: CNL
version: '10'
operating_system: CNL10
paths:
cc: /path/to/clang
cxx: /path/to/clang++
f77: None
fc: None
modules: 'None'
clang3.3SUSE:
- compiler:
spec: clang@3.3
operating_system:
name: SuSE
version: '11'
operating_system: SuSE11
paths:
cc: /path/to/clang
cxx: /path/to/clang++
f77: None
fc: None
modules: 'None'
clang3.3RHL:
- compiler:
spec: clang@3.3
operating_system:
name: redhat
version: '6'
operating_system: redhat6
paths:
cc: /path/to/clang
cxx: /path/to/clang++
f77: None
fc: None
modules: 'None'
clang3.3OSX:
- compiler:
spec: clang@3.3
operating_system:
name: yosemite
version: '10.10'
operating_system: yosemite
paths:
cc: /path/to/clang
cxx: /path/to/clang++
f77: None
fc: None
modules: 'None'
gcc4.5.0CNL:
- compiler:
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: /path/to/gfortran
fc: /path/to/gfortran
operating_system:
name: CNL
version: '10'
operating_system: CNL10
spec: gcc@4.5.0
modules: 'None'
gcc4.5.0SUSE:
- compiler:
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: /path/to/gfortran
fc: /path/to/gfortran
operating_system:
name: SuSE
version: '11'
operating_system: SuSE11
spec: gcc@4.5.0
modules: 'None'
gcc4.5.0RHL:
- compiler:
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: /path/to/gfortran
fc: /path/to/gfortran
operating_system:
name: redhat
version: '6'
operating_system: redhat6
spec: gcc@4.5.0
modules: 'None'
gcc4.5.0OSX:
- compiler:
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: /path/to/gfortran
fc: /path/to/gfortran
operating_system:
name: yosemite
version: '10.10'
operating_system: yosemite
spec: gcc@4.5.0
modules: 'None'
gcc4.5.0ELCAP:
- compiler:
paths:
cc: /path/to/gcc
cxx: /path/to/g++
f77: /path/to/gfortran
fc: /path/to/gfortran
operating_system:
name: elcapitan
version: '10.11'
operating_system: elcapitan
spec: gcc@4.5.0
modules: 'None'
clang3.3ELCAP:
- compiler:
spec: clang@3.3
operating_system:
name: elcapitan
version: '10.11'
operating_system: elcapitan
paths:
cc: /path/to/clang
cxx: /path/to/clang++

View File

@ -44,9 +44,9 @@ def check_compiler_yaml_version():
data = syaml.load(f)
if data:
compilers = data['compilers'].items()
compilers = data['compilers']
if len(compilers) > 0:
if 'operating_system' not in compilers[0][1]:
if 'operating_system' not in compilers[0]['compiler']:
new_file = os.path.join(scope.path, '_old_compilers.yaml')
tty.warn('%s in out of date compilers format. '
'Moved to %s. Spack automatically generate '