feat(compat.sycl-runtime): the OpenCL adapter the payload ships is served - #378
Merged
Merged
Conversation
…rved The package declared it did not serve `libOpenCL.so.1`, and that decision was made from a real measurement and was still wrong. WHAT THE MEASUREMENT SAID. Declaring `compat:opencl` made the farm test pass with every member loading -- and pass with `libnvidia-ml.so.1` REMOVED from the farm. `compat:opencl` depends on `compat:opencl-runtime`, whose farm mirrors the host's NVIDIA OpenCL family and therefore carries NVML, so the new dependency was satisfying the need the rest of this change exists to satisfy, and the criterion could no longer fail. WHY THAT REASON EXPIRED. The masking was a property of a criterion that measured the PROCESS. `tests/farm.cpp` was rewritten -- because of that very measurement -- to read each member's DT_NEEDED against the farm alone. Once nothing on the search path can answer for the farm, the only objection left was the size of the surface, and a back end whose adapter the payload ships is not something a runtime adapter should leave permanently unreachable. Measured with the edge declared: the farm test passes, and with NVML removed it still fails naming `libur_adapter_cuda.so.0`. The decision is reversible because the criterion is no longer maskable. `libOpenCL.so.1` stays named in the test with its meaning changed: not "this package does not serve it" but "a declared dependency of this package provides it". mcpp deploys `compat:opencl`'s shared library beside the consumer's executable and `$ORIGIN` finds it there. Everything not on that short list must be in the farm, which is what keeps the self-sufficiency assertion exact without reopening the process to answer for it.
Sunrisepeak
pushed a commit
to mcpp-community/mcpp
that referenced
this pull request
Sep 9, 2026
R7 -- serving `libOpenCL.so.1` to the OpenCL adapter the SYCL payload ships -- was asserted by nothing. It was printed as a note, and a note does not fail: the first run against the released 2026.9.10.2 passed while printing `libur_adapter_opencl.so.0 needs libOpenCL.so.1`, which is R7 not working. It was not working in that sandbox because the sandbox held an mcpp-index copy from before mcpplibs/mcpp-index#378, whose `compat.sycl-runtime` read `deps = {}`. The host reported no such finding for an unrelated reason: its own `compat:opencl-runtime` farm mirrors a machine that has an ICD loader installed, so the host could not tell R7 working from R7 being unnecessary there. After `mcpp index update` in the sandbox the surface grows from 15 members to 37 and the finding is gone. Section D now asserts a named set of two sonames and prints its size, refuted against the record the earlier run published. The eleven remaining findings are attributed to mcpplibs/mcpp-index#376 in the output rather than absorbed, and the note text no longer carries a parenthetical from a draft that was reversed. Recorded in section 8.7 of the design record.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #375, and a reversal of one decision it made.
What changed
compat:sycl-runtimedeclarescompat:opencl, solibur_adapter_opencl.so.0can load. #375 declared the opposite — that the package does not servelibOpenCL.so.1— and that decision was made from a real measurement and was still wrong.Why #375 declined it
Declaring the edge made the farm test pass with every member loading, and it also passed with
libnvidia-ml.so.1removed from the farm.compat:opencldepends oncompat:opencl-runtime, whose farm mirrors the host's NVIDIA OpenCL family and therefore carries NVML, so the new dependency was satisfying the need the rest of that change exists to satisfy. The criterion could no longer fail, so the edge was withdrawn.Why that reason expired
The masking was a property of a criterion that measured the process.
tests/farm.cppwas rewritten in #375 — because of that very measurement — to read each member'sDT_NEEDEDagainst the farm alone. Once nothing on the search path can answer for the farm, the only objection left was the size of the surface, and a back end whose adapter the payload ships is not something a runtime adapter should leave permanently unreachable.Measured with the edge declared:
and with NVML removed from the farm, on the same build:
The decision is reversible precisely because the criterion is no longer maskable.
The name stays in the test, with a different meaning
libOpenCL.so.1is still listed — not as "this package does not serve it" but as "a declared dependency of this package provides it". mcpp deployscompat:opencl's shared library beside the consumer's executable and$ORIGINfinds it there. Everything not on that short list must be in the farm, which is what keeps the self-sufficiency assertion exact without reopening the process to answer for it.Ecosystem note
mcpp's OpenCL support itself is unaffected and was measured on the same host through
tests/examples/opencl:platform: NVIDIA CUDA (1 device(s)) / device: NVIDIA GeForce RTX 4080. The one stated gap there is Windows, where drivers are enumerated through the registry and this index does not model it yet.