Skip to content

feat: migrate wasm_optimize to native loom toolchain v1.1.14 (#512) - #514

Merged
avrabe merged 2 commits into
mainfrom
feat/loom-native-toolchain
Jun 16, 2026
Merged

feat: migrate wasm_optimize to native loom toolchain v1.1.14 (#512)#514
avrabe merged 2 commits into
mainfrom
feat/loom-native-toolchain

Conversation

@avrabe

@avrabe avrabe commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Completes #512 (native-loom migration; builds on the merged #513 registry entry). loom v1.x is native-only (no loom.wasm), shipping signed per-OS binaries with the loom#172/#196/#220 correctness fixes.

Native loom toolchain:

  • toolchains/loom_toolchain.bzlloom_repository (download + extract the tarball, expose the loom binary; stub for unsupported/Windows hosts) + loom_toolchainToolchainInfo. Mirrors meld_toolchain.bzl (meld is a bare binary; loom is a tarball).
  • loom_toolchain_type + bzl_library + tool_registry URL pattern; @loom_toolchain registered in MODULE.bazel (v1.1.14).

wasm_optimize rewire:

Verification (local)

  • bazel build @loom_toolchain//:loom — fetches + extracts loom 1.1.14.
  • bazel build //test/p3:hello_p2_optimizednative loom optimizes a real component (4/4 core modules, "Optimization complete").
  • ⏳ The meld → loom → synth fused falcon path needs @avrabe's //:falcon-optimized e2e — please verify against this branch (it should also let jess drop the dead-stores override per the issue).

Notes

  • Windows loom (loom.exe) is stubbed (follow-up).
  • tools/loom_wrapper is now unused by loom; left in place, removable in cleanup.

🤖 Generated with Claude Code

avrabe and others added 2 commits June 15, 2026 07:56
loom v1.x ships native per-OS binaries (no loom.wasm). Add a hermetic loom
toolchain, mirroring meld_toolchain.bzl but extracting the tarball (meld ships a
bare binary):
- toolchains/loom_toolchain.bzl: loom_repository (download+extract loom-v{ver}-
  {triple}.tar.gz, expose the loom binary; stub for unsupported/Windows hosts)
  + loom_toolchain rule -> ToolchainInfo(loom=...).
- toolchains/BUILD.bazel: loom_toolchain_type + bzl_library.
- toolchains/tool_registry.bzl: _URL_PATTERNS["loom"] (tarball; strip_prefix ""
  and binary "loom" via the existing defaults).
- wasm/extensions.bzl + MODULE.bazel: register @loom_toolchain (v1.1.14).

Registered but not yet consumed — wasm_optimize still uses the @loom_wasm 0.3.0
component; the rewire to the native toolchain is the next step (#512). Windows
loom (loom.exe) stubbed for now (follow-up).

Verified: `bazel build @loom_toolchain//:loom` fetches + extracts loom 1.1.14
for the host and resolves the binary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rapper (#512)

Rewire wasm_optimize to the native loom toolchain (added in the previous
commit) instead of running the loom.wasm component under wasmtime:
- executable = ctx.toolchains[loom_toolchain_type].loom; args `optimize <input>
  -o <output> [flags]` (loom CLI unchanged). Native loom reads the input
  directly through the OS, so the wasmtime/WASI-preopen/symlink workaround
  (#490, loom_wrapper) and the wasmtime toolchain dep are no longer needed and
  are removed from the rule.
- Drop the @loom_wasm 0.3.0 wasm_component_download from MODULE.bazel.
- Add //test/p3:loom_optimize_build_test (wasm_optimize on the P2 component) for
  coverage.

Verified locally: //test/p3:hello_p2_optimized builds — native loom 1.1.14
optimizes the component (4/4 core modules, "Optimization complete").

(tools/loom_wrapper is now unused by loom; left in place — wasmsign2 patterns
may still reference the approach — removable in a cleanup follow-up.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@avrabe avrabe changed the title feat(toolchains): add native loom toolchain (#512 step 2) feat: migrate wasm_optimize to native loom toolchain v1.1.14 (#512) Jun 15, 2026
@avrabe
avrabe merged commit 013931f into main Jun 16, 2026
29 checks passed
@avrabe
avrabe deleted the feat/loom-native-toolchain branch June 16, 2026 18:44
avrabe added a commit that referenced this pull request Jun 18, 2026
#530)

The updater still had loom as UniversalWasm{loom.wasm} + AssetExists, which
kept it pinned at v0.3.0 — the last release shipping loom.wasm. #514 migrated
the registry + toolchain to native per-platform binaries
(loom-v{version}-{triple}.tar.gz, .zip on Windows), so the auto-updater could
no longer advance loom past 0.3.0.

loom's toolchain reads the registry url_suffix as the FULL versioned filename
(tool_registry.bzl loom: `filename: "{suffix}"`, like wkg/wrpc). The existing
PerPlatformAsset can't express that — its stored suffix is static, with no
{version} — so it would write a stale filename on the next loom release. Add a
PerPlatformVersionedAsset pattern whose resolved filename (with {version} and
{platform}) is both the download asset and the verbatim url_suffix, so the two
can never drift. Thread `version` into get_url_suffix (single caller) and
re-point loom to the new pattern with VersionFilter::Any (GitHub /releases/latest
correctly returns v1.1.14).

Verified: `update --tools loom --force` selects v1.1.14, downloads all 4 native
tarballs from the correct URLs, and reproduces the hand-authored #513 registry
block (url_suffix + sha256) byte-for-byte — zero functional diff, proving the
updater output matches what the loom toolchain consumes. New unit test
test_per_platform_versioned_asset_loom_native asserts the exact strings; full
lib suite 24/24 pass. No registry change needed (loom already at 1.1.14); this
only lets future loom releases be picked up automatically.

With this, every PulseEngine tool the updater tracks is auto-managed
(remaining exclusion: `go`, null github_repo — separate mechanism).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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