Fix performance issue on macOS (#48997)

archspec.cpu.host() is not memoized, so compute
it as less as possible.

---------

Co-authored-by: alalazo <alalazo@users.noreply.github.com>
This commit is contained in:
Massimiliano Culpo 2025-02-11 18:54:32 +01:00 committed by GitHub
parent 57a1807443
commit 5518ad9611
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -72,6 +72,9 @@ def __init__(self, *, configuration: spack.config.Configuration, repo: spack.rep
self.repo = repo
self.runtime_pkgs = set(self.repo.packages_with_tags(RUNTIME_TAG))
self.runtime_virtuals = set()
self._platform_condition = spack.spec.Spec(
f"platform={spack.platforms.host()} target={archspec.cpu.host().family}:"
)
for x in self.runtime_pkgs:
pkg_class = self.repo.get_pkg_class(x)
self.runtime_virtuals.update(pkg_class.provided_virtual_names())
@ -88,14 +91,11 @@ def is_virtual(self, name: str) -> bool:
def is_allowed_on_this_platform(self, *, pkg_name: str) -> bool:
"""Returns true if a package is allowed on the current host"""
pkg_cls = self.repo.get_pkg_class(pkg_name)
platform_condition = (
f"platform={spack.platforms.host()} target={archspec.cpu.host().family}:"
)
for when_spec, conditions in pkg_cls.requirements.items():
if not when_spec.intersects(platform_condition):
if not when_spec.intersects(self._platform_condition):
continue
for requirements, _, _ in conditions:
if not any(x.intersects(platform_condition) for x in requirements):
if not any(x.intersects(self._platform_condition) for x in requirements):
tty.debug(f"[{__name__}] {pkg_name} is not for this platform")
return False
return True