Skip to content

Unify toolchain version pins (WASI SDK 24 vs 25 mismatch, per-arch Binaryen, macOS-only download) #46

Description

@zklapow

Why

Toolchain version pins are scattered across Dockerfiles, shell scripts, and Mill — and some are already contradictory:

  • WASI SDK: 24 vs 25. The builder image (cpython/builder/Dockerfile) and python-host/build-wasm.sh pin SDK 24, but cpython/cpython-wasi/Dockerfile pins SDK 25 — so libpython is built with a different SDK than the Rust host that links it.
  • Binaryen: per-arch split. cpython/cpython-wasi/Dockerfile uses 111 on x86_64 vs 125 on arm64 (builder image: 125). Per-architecture optimizer versions mean per-arch artifacts aren't comparable, undermining any reproducibility/verification story.
  • build-wasm.sh hardcodes the -macos.tar.gz WASI SDK download regardless of unamewasm-local on Linux downloads macOS binaries and fails confusingly.
  • Wizer 10.0.0 is pinned in two places; Rust 1.86 in two (rust-toolchain.toml, FROM rust:1.86-bookworm); the string python3.14 appears in ~8 places across Java (PythonExecutorFactory.java), Mill (build.mill), build-wasm.sh, both build.rs files, Dockerfiles, CI, and the overlay path — a CPython 3.15 bump is a cross-cutting find-and-replace with no single source of truth.

What

  • One versions file (e.g. versions.env or Mill constants) consumed by Dockerfiles (build args), shell scripts, and Mill for: WASI SDK, Wizer, Binaryen, Rust, CPython version.
  • Align WASI SDK across libpython and the Rust host build; unify Binaryen across architectures.
  • Platform-detect the WASI SDK download in build-wasm.sh.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions