Skip to content

fix(release): restore watchOS, unbreak visionOS - #7379

Merged
proggeramlug merged 2 commits into
mainfrom
fix/release-watchos-visionos
Aug 4, 2026
Merged

fix(release): restore watchOS, unbreak visionOS#7379
proggeramlug merged 2 commits into
mainfrom
fix/release-watchos-visionos

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Two separate problems. One is a latent release breakage; the other kept a platform out for months on a misdiagnosis.

1. visionOS was broken, and no release had caught it

dyn-eval joined perry-runtime's default feature set in #6584 (2026-07-18). It reaches psm three crates down — dyn-evalperry-parserswc_ecma_parserstackerpsm — and psm selects its assembly with:

#if defined(CFG_TARGET_OS_darwin) || defined(CFG_TARGET_OS_macos) || defined(CFG_TARGET_OS_ios) || defined(CFG_TARGET_OS_tvos)

watchos and visionos aren't in that list, so both fall through to the #else ELF branch and emit .type/.size — directives the Mach-O assembler rejects. Nothing in Perry is involved.

release-packages.yml builds these targets with default features, and its last successful run was 2026-07-04 — before the regression. The two runs since were cancelled. So this was sitting there waiting for the next release.

Fixed upstream: rust-lang/stacker#152. Until that lands, watchOS and visionOS build default minus dyn-eval — the list in the workflow is exactly that, nothing else — so the only capability they lose is runtime new Function over a string body. There's a DELETE this branch when it lands marker on both sites.

2. watchOS was dropped for a reason that never applied to the triple it ships on

The v0.5.888 note said:

ring 0.17.14 has a pointer-size assertion that fails for arm64_32-apple-watchos (32-bit pointers with 64-bit regs)

That's true — and ILP32-specific. aarch64-apple-watchos is LP64. ring builds for it, and so does perry-ui-watchos. The note also asserted "watchOS = arm64_32" as though that were the only watchOS triple, which is what made the drop look total.

Restored on the LP64 device triple + its simulator, across all three sites that needed it: the build: cross-compile loop, the build-cross matrix, and the bottle staging step. arm64_32 stays out until ring is fixed or pinned.

Verification

Per-target cargo check on stable, with the exact feature list the workflow now passes:

target runtime + -static stdlib + -static UI crate
aarch64-apple-watchos
aarch64-apple-watchos-sim
aarch64-apple-visionos
aarch64-apple-visionos-sim

cargo check isn't proof a staticlib emits, so I also ran the real thing — cargo +nightly build -Z build-std=core,std,panic_abort --target aarch64-apple-watchos:

Finished `dev` profile in 1m 05s
target/aarch64-apple-watchos/debug/libperry_runtime.a   391M
lipo -info: architecture arm64
LC_BUILD_VERSION: platform 4      <- PLATFORM_WATCHOS

A genuine watchOS arm64 archive, not a host build in a differently-named directory.

library_search.rs already maps _watchos / _watchos_sim (lines 1092–1093), so no compiler-side change was needed.

Comments corrected

Three claimed watchOS was dropped; one asserted the device triple is arm64_32. The second is what kept the platform out — worth fixing precisely rather than deleting, since the ILP32 constraint is still real for that triple.

Risk

Release-workflow only; no library or compiler code changes. The if [ -f ] guards in staging keep the existing degrade-gracefully behavior, so a target that fails to build drops out of the bottle rather than failing the job — same as today.

Summary by CodeRabbit

  • New Features

    • Restored 64-bit watchOS device and simulator builds in release packages.
    • Added watchOS libraries to cross-platform bundles alongside tvOS and visionOS artifacts.
    • Added release support for affected visionOS and watchOS targets.
  • Bug Fixes

    • Fixed visionOS and watchOS release build failures by excluding unsupported runtime features where necessary.
    • Excluded the unsupported 32-bit watchOS target from release builds.

Ralph Küpper added 2 commits August 4, 2026 16:34
Two problems, one latent since 2026-07-18.

visionOS was broken and no release had caught it. dyn-eval joined
perry-runtime's `default` in #6584 and reaches psm three crates down
(dyn-eval -> perry-parser -> swc_ecma_parser -> stacker -> psm), whose Mach-O
guard enumerates darwin/macos/ios/tvos and omits watchos/visionos -- so both
fall through to psm's ELF branch and emit .type/.size, which the Mach-O
assembler rejects. Nothing in Perry is involved. release-packages.yml builds
these with default features and its last successful run was 2026-07-04,
before the regression, so it would have surfaced at the next release. Fixed
upstream as rust-lang/stacker#152; until that lands these two build `default`
minus `dyn-eval`, losing only runtime `new Function`.

watchOS was dropped for a reason that never applied to the triple it ships
on. The v0.5.888 note blamed ring 0.17.14's pointer-size assertion -- real,
but specific to the ILP32 arm64_32-apple-watchos triple.
aarch64-apple-watchos is LP64; ring builds for it, as does perry-ui-watchos.
The LP64 device triple and its simulator are restored across all three sites
that needed it: the build: cross loop, the build-cross matrix, and bottle
staging. arm64_32 stays out until ring is fixed or pinned.

Verified per target on stable with the exact feature list the workflow now
passes: runtime+static, stdlib+static and the UI crate all build for
watchos, watchos-sim, visionos and visionos-sim. library_search.rs already
maps _watchos/_watchos_sim, so no compiler-side change was needed.

Three stale comments claiming watchOS was dropped, and one asserting the
device triple is arm64_32, are corrected -- the second is what kept the
platform out for months.

Claude-Session: https://claude.ai/code/session_01EaD6yNwoinzdW1JbYNkMMF
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 40f3e43c-f913-493e-a984-2b2b6815c257

📥 Commits

Reviewing files that changed from the base of the PR and between fe3afc5 and 3b4c48a.

📒 Files selected for processing (2)
  • .github/workflows/release-packages.yml
  • changelog.d/7379-release-watchos-visionos.md

📝 Walkthrough

Walkthrough

The release workflow restores LP64 watchOS device and simulator builds, excludes dyn-eval from watchOS and visionOS runtime builds, and stages the restored watchOS libraries. A changelog entry documents the platform fixes and verification results.

Changes

Release workflow fixes and changelog

Layer / File(s) Summary
Host build and staging: restore watchOS, exclude dyn-eval
.github/workflows/release-packages.yml
Restores aarch64 watchOS device and simulator builds, applies reduced runtime features for watchOS and visionOS, and adds watchOS targets to Apple cross-library staging.
Cross-compile matrix: watchOS entries and feature selection
.github/workflows/release-packages.yml
Adds LP64 watchOS targets to the Tier-3 matrix and applies the dyn-eval exclusion to watchOS and visionOS runtime cross-bundle builds.
Changelog entry documenting the fixes
changelog.d/7379-release-watchos-visionos.md
Documents the visionOS assembly incompatibility, the watchOS pointer-size correction, restored targets, verification results, and corrected comments.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Suggested labels: run-extended-tests

Suggested reviewers: andrewtdiz

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the two main workflow fixes: restoring watchOS builds and resolving the visionOS release breakage.
Description check ✅ Passed The description thoroughly explains the root causes, workflow changes, verification results, platform scope, and risk, despite omitting explicit template headings and checklist items.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/release-watchos-visionos

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug
proggeramlug merged commit bca4804 into main Aug 4, 2026
9 of 16 checks passed
@proggeramlug
proggeramlug deleted the fix/release-watchos-visionos branch August 4, 2026 16:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant