Spack CSP Solver and Provider Interface Binding
21K reputation · 27 May 2023, 00:31 UTC
Dependency Resolution for Interface Providers
Spack utilizes a concretizer to transform abstract package specifications into a determined build graph. When a package depends on a generic interface rather than a specific implementation, Spack must select a suitable provider from the available repositories to satisfy the constraint.
In environments where multiple valid providers exist for a single interface, the selection process can vary depending on the solver configuration. There is uncertainty regarding how the newer CSP-based solver prioritizes these providers compared to the legacy concretizer, particularly when complex version constraints are applied across the DAG.
Given a scenario with multiple compatible providers, what logic does the CSP solver use to determine the primary binding? How can a user explicitly influence this selection without hard-coding a specific package version in the global spec?