Verify a cross where the machine can run what it built - #165
Merged
Conversation
x86_64-apple-darwin became native in #161 because nothing ever executed what the cross produced: no toolchain contract, no bootstrap smoke test, so it could not be published. That was the right call for the evidence and it cost the time. In the first real nine-host publication it took 62 minutes against 14 for its arm64 sibling, and it is the pole every other host waits behind. "Only a native build can run its own output" is true of a canadian cross to Windows or FreeBSD and false of Apple: an arm64 Mac runs x86_64 Mach-O through Rosetta, so the machine that cross-builds the Intel SDK is the one that can check it. The gate now asks how to run this host's binaries here rather than whether the build is native, and passes the launcher to both the contract and the smoke test. Windows and FreeBSD answer "cannot" and are skipped exactly as before. Measured end to end in the probe repository before touching this: cross 650s, contract 24s, bootstrap smoke 30s, 12m18s for the whole job against 62m22s native -- same checks, same published host.
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.
x86_64-apple-darwinbecame a native build in #161 for a good reason: nothing ever executed what the cross produced, so it had no toolchain contract and no bootstrap smoke test, and a host nobody can check is a host that should not publish. Native fixed that and cost the time. In the first real nine-host publication it took 62m22s against 14m03s for its arm64 sibling on the same run, and every stage-3 host waits behind it.The line that decided this reads:
True of a canadian cross to Windows or FreeBSD. Not true of Apple: an arm64 Mac runs x86_64 Mach-O through Rosetta, so the machine that cross-builds the Intel SDK is the same one that can execute and check it.
So the question changes from is this native to how do I run this host's binaries here.
host_runneranswers with a launcher prefix — empty for a native host,arch -x86_64for the Intel Mac SDK built on arm64 — or fails for a host nothing here can execute. Both the contract and the smoke test take that prefix, andcheck-toolchain-contractgets it through a newVITASDK_HOST_RUNNERcache variable so the invocation stays in one place rather than being duplicated into the shell script.Windows and FreeBSD answer "cannot" and are skipped exactly as they were, and the skip now says so instead of being silent.
Measured before writing any of this, in
frangarcj/vitasdk-ci-probe, onmacos-14:macos-15-intel, for comparisonThe smoke test there was the real one — install from the bootstrap archive against its sha256, then
vdpm --help,libexec/vdpm/pacman --versionandarm-vita-eabi-gcc --version— and the contract includedchecking that public headers compile on their own, which is the check that caught two broken headers earlier today.tests/ci/test-host-runner.shcovers the seven cases, including the two directions Rosetta does not go: a Linux box cannot run the Intel Mac SDK, and an Intel Mac cannot run an arm64 one. It also pins the set of packaged hosts this script cannot run — Windows and the two FreeBSD ones — so adding another passes somebody's eyes. Windows stays verified by its own job on a real Windows runner; the two FreeBSD hosts are verified nowhere, which that test records as a gap rather than fixes, since closing it needs a FreeBSD VM and not Rosetta.AI tools were used in preparing this PR (Claude Opus 5, Anthropic).