Stop the host Hermes compiler build from targeting visionOS - #443
Merged
Conversation
CMake reports a failed feature check as a bare "not found", with the compiler's actual complaint only in its configure log. The host hermesc configure is failing on the macOS runner with checks that succeed everywhere else, so surface that log rather than guess at it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UkNbgdyuKgHaFwT27RahGH
Every command got all three deployment targets build-apple-framework.sh can ask for, including the host compiler build. XROS_DEPLOYMENT_TARGET is also a clang driver variable, so clang targeted visionOS against the macOS sysroot: clang: warning: using sysroot for 'MacOSX' but targeting 'XR' error: 'pthread_mutexattr_init' is unavailable: not available on visionOS Every API marked unavailable on visionOS then failed to compile, which is why unistd.h (which reaches _fd_def.h through sys/select.h) came back "not found" while sys/stat.h did not, and why the configure died on CheckAtomic. Each platform build now gets only the deployment target it needs, and the host compiler build gets none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UkNbgdyuKgHaFwT27RahGH
2 tasks
kraenhansen
added a commit
that referenced
this pull request
Aug 13, 2026
The paths filter fires on any edit to hermes.ts, hermes-prebuilt.ts or this workflow, not just a bumped pin — and `--no-download` meant the run then rebuilt for half an hour and re-uploaded 118 MB identical to what was already on the release. Merging #443 did exactly that. The Actions cache does not cover this: it is scoped to the branch that wrote it, so a build on a feature branch leaves nothing behind for `next`, and it evicts after 7 days idle or under the repository's 10 GB cap, which several multi-gigabyte ccache entries already compete for. The archive name covers every input that changes its contents, so an asset already published under that name is what the run would rebuild. Look it up and skip the build and the upload, with a `force` dispatch input for deliberate rebuilds. Claude-Session: https://claude.ai/code/session_01UkNbgdyuKgHaFwT27RahGH Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.
Fixes the
Hermes prebuiltworkflow, which had failed on every run (1, 2, 3) with:Verified: run 31719660147 on this branch built Hermes in 26m46s and published the first asset —
hermes-5a795c9f8800-rn0.88.0-nightly-20260809-db662caea-debug-iphoneos-iphonesimulator-arm64.tar.gz, 118 MB, into the release the first failure had left empty.The actual cause
buildArchiveexported all three deployment targetsbuild-apple-framework.shcan ask for to every command it ran, including the host compiler configure.XROS_DEPLOYMENT_TARGETis not only the name that script reads — it is also a clang driver variable. With it set and no explicit target, clang built for visionOS:Every feature check touching an API marked unavailable on visionOS failed, and CMake reports those as a bare
not found. That is what made this hard to read from the console log:unistd.hreported missing whilesys/stat.hdid not, which looks impossible until you see thatunistd.hreaches_fd_def.hthroughsys/select.handsys/stat.hdoesn't.CheckAtomicwas simply the first such check that treats failure as fatal.Each platform build now gets only the deployment target that platform needs, and the host compiler build gets none. This also explains why React Native's own
[RN] [1] Build Hermescnever hit it: that runs its CMake underenv -i, so nothing from the job environment reaches clang.How it was found
Two earlier attempts were guesses from console output and both were wrong — first
CMAKE_OSX_ARCHITECTURES(#442, removed on a hypothesis that turned out not to be the cause; that change is still worth keeping for the archive-naming reasons in its own description), then a suspicion about inherited environment in general, right in shape but not actionable without knowing which variable.What settled it was the failure-only diagnostic added here: it dumps CMake's
CMakeConfigureLog.yaml, where the compiler's real complaint lives, plus the job environment,xcode-select -pand the SDK path, and uploads the full log as an artifact. Those steps are kept — this configure was misdiagnosed twice from the console log alone, and they turn the next occurrence into one round trip.A useful control along the way: the identical configure succeeds on Linux against the same pinned Hermes (every header found,
HAVE_CXX_ATOMICS_WITHOUT_LIB - Success), which ruled out the Hermes source, the pin and the CMake arguments.Test plan
Hermes prebuiltdispatched on this branch gets past the host compiler and publishes an asset--print nameproduces, and the URL--print urlcomposes serves a valid gzipTest app (iOS)should now download the asset rather than build