diff options
Diffstat (limited to 'lib/spack/llnl/util/cpu/microarchitecture.py')
-rw-r--r-- | lib/spack/llnl/util/cpu/microarchitecture.py | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/spack/llnl/util/cpu/microarchitecture.py b/lib/spack/llnl/util/cpu/microarchitecture.py index e14e1a8c66..3d1590376a 100644 --- a/lib/spack/llnl/util/cpu/microarchitecture.py +++ b/lib/spack/llnl/util/cpu/microarchitecture.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import functools import platform +import re import warnings try: @@ -219,9 +220,9 @@ class Microarchitecture(object): min_version, max_version = entry['versions'].split(':') # Check version suffixes - min_version, _, min_suffix = min_version.partition('-') - max_version, _, max_suffix = max_version.partition('-') - version, _, suffix = version.partition('-') + min_version, min_suffix = version_components(min_version) + max_version, max_suffix = version_components(max_version) + version, suffix = version_components(version) # If the suffixes are not all equal there's no match if ((suffix != min_suffix and min_version) or @@ -277,6 +278,26 @@ def generic_microarchitecture(name): ) +def version_components(version): + """Decomposes the version passed as input in version number and + suffix and returns them. + + If the version number of the suffix are not present, an empty + string is returned. + + Args: + version (str): version to be decomposed into its components + """ + match = re.match(r'([\d.]*)(-?)(.*)', str(version)) + if not match: + return '', '' + + version_number = match.group(1) + suffix = match.group(3) + + return version_number, suffix + + def _known_microarchitectures(): """Returns a dictionary of the known micro-architectures. If the current host platform is unknown adds it too as a generic target. |