Bugfix: cray manifest parsing regression (#37909)

fa7719a changed syntax for specifying exact versions, which are
required for some compiler specs (including those read as part
of parsing a Cray manifest). This fixes that and also makes a
couple other improvements to manifest parsing.

* Instantiate compiler specs with exact versions (fixes #37893)
* fix slingshot network detection (CPE 22.10+ has libcxi.so
  in /usr/lib64)
* "spack external find": add arg to ignore default dir for cray
  manifests
This commit is contained in:
Tiziano Müller 2023-05-31 03:03:44 +02:00 committed by GitHub
parent 43b86ce282
commit 0f84782fcc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 5 deletions

View file

@ -79,6 +79,12 @@ def setup_parser(subparser):
read_cray_manifest.add_argument( read_cray_manifest.add_argument(
"--directory", default=None, help="specify a directory storing a group of manifest files" "--directory", default=None, help="specify a directory storing a group of manifest files"
) )
read_cray_manifest.add_argument(
"--ignore-default-dir",
action="store_true",
default=False,
help="ignore the default directory of manifest files",
)
read_cray_manifest.add_argument( read_cray_manifest.add_argument(
"--dry-run", "--dry-run",
action="store_true", action="store_true",
@ -177,11 +183,16 @@ def external_read_cray_manifest(args):
manifest_directory=args.directory, manifest_directory=args.directory,
dry_run=args.dry_run, dry_run=args.dry_run,
fail_on_error=args.fail_on_error, fail_on_error=args.fail_on_error,
ignore_default_dir=args.ignore_default_dir,
) )
def _collect_and_consume_cray_manifest_files( def _collect_and_consume_cray_manifest_files(
manifest_file=None, manifest_directory=None, dry_run=False, fail_on_error=False manifest_file=None,
manifest_directory=None,
dry_run=False,
fail_on_error=False,
ignore_default_dir=False,
): ):
manifest_files = [] manifest_files = []
if manifest_file: if manifest_file:
@ -191,7 +202,7 @@ def _collect_and_consume_cray_manifest_files(
if manifest_directory: if manifest_directory:
manifest_dirs.append(manifest_directory) manifest_dirs.append(manifest_directory)
if os.path.isdir(cray_manifest.default_path): if not ignore_default_dir and os.path.isdir(cray_manifest.default_path):
tty.debug( tty.debug(
"Cray manifest path {0} exists: collecting all files to read.".format( "Cray manifest path {0} exists: collecting all files to read.".format(
cray_manifest.default_path cray_manifest.default_path

View file

@ -48,7 +48,8 @@ def translated_compiler_name(manifest_compiler_name):
def compiler_from_entry(entry): def compiler_from_entry(entry):
compiler_name = translated_compiler_name(entry["name"]) compiler_name = translated_compiler_name(entry["name"])
paths = entry["executables"] paths = entry["executables"]
version = entry["version"] # to instantiate a compiler class we may need a concrete version:
version = "={}".format(entry["version"])
arch = entry["arch"] arch = entry["arch"]
operating_system = arch["os"] operating_system = arch["os"]
target = arch["target"] target = arch["target"]

View file

@ -37,7 +37,9 @@
def slingshot_network(): def slingshot_network():
return os.path.exists("/opt/cray/pe") and os.path.exists("/lib64/libcxi.so") return os.path.exists("/opt/cray/pe") and (
os.path.exists("/lib64/libcxi.so") or os.path.exists("/usr/lib64/libcxi.so")
)
def _target_name_from_craype_target_name(name): def _target_name_from_craype_target_name(name):

View file

@ -1060,7 +1060,7 @@ _spack_external_list() {
} }
_spack_external_read_cray_manifest() { _spack_external_read_cray_manifest() {
SPACK_COMPREPLY="-h --help --file --directory --dry-run --fail-on-error" SPACK_COMPREPLY="-h --help --file --directory --ignore-default-dir --dry-run --fail-on-error"
} }
_spack_fetch() { _spack_fetch() {