selfhost-verify: climb rust 1.90→1.91.0→1.91.1 COMPLETO (toolchain self-hosted)
Ambos hops del climb construidos con el bootstrap real (x.py) en el sandbox devfs,
reusando LLVM 20.1.8 externo en todo (gate >=19) — sin rebuild de LLVM:
mrustc → rustc 1.90.0 → rustc 1.91.0 → rustc 1.91.1
- hop 1 (1.90.0→1.91.0): bootstrap.toml, stage0 = prefix run_rustc musl-host
1.90.0. stage-2 + install → rust-1.91.0-prefix relocatable (rpath).
- hop 2 (1.91.0→1.91.1): bootstrap-1.91.1.toml, stage0 rustc = el 1.91.0 instalado
(bind ro /stage0 vía STAGE0), stage0 cargo = el 1.90.0 (pasa el check minor-1).
extended+cargo. FIX cargo-native-static=true → feature all-static (openssl/curl/
libgit2/libz vendored desde fuente vía gcc), el devfs hermético no tiene OpenSSL.
- run-xpy.sh: añade bind ro opcional /stage0 (env STAGE0) para el stage0 del hop.
VERIFICADO: rust-1.91.1-prefix/bin/{rustc,cargo} corren standalone (solo prefix
montado, rpath). rustc 1.91.1 (ed61e7d7e) host x86_64-unknown-linux-musl LLVM
20.1.8; cargo 1.91.1. Smoke-test compila+corre. Es la versión EXACTA de Alpine,
auto-alojada desde la cadena mrustc. Cada hop ~45min (LLVM reusado).
NEXT: swap rust 1.91.1 en /toolchain + criterio de auto-consistencia (EXPECT_REF).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -21,16 +21,27 @@ These scripts + patch are the working artifacts. The mrustc tree itself lives in
|
|||||||
LLVM and `bin/mrustc`.
|
LLVM and `bin/mrustc`.
|
||||||
- **`run-runrustc.sh`** — run a `run_rustc` make target inside the devfs sandbox,
|
- **`run-runrustc.sh`** — run a `run_rustc` make target inside the devfs sandbox,
|
||||||
pointed at the musl-host stage0.
|
pointed at the musl-host stage0.
|
||||||
- **`bootstrap.toml`** — rust's own bootstrap config for the climb hop (1.90.0 →
|
- **`bootstrap.toml`** — rust's own bootstrap config for hop 1 (1.90.0 → 1.91.0):
|
||||||
1.91.0): `build`/`host`/`target = x86_64-unknown-linux-musl`, stage0
|
`build`/`host`/`target = x86_64-unknown-linux-musl`, stage0 `rustc`/`cargo` =
|
||||||
`rustc`/`cargo` = the run_rustc musl-host 1.90.0 prefix, external LLVM 20.1.8
|
the run_rustc musl-host 1.90.0 prefix, external LLVM 20.1.8 reused via
|
||||||
reused via `llvm-config` (clears bootstrap's `>=19` gate, no LLVM rebuild),
|
`llvm-config` (clears bootstrap's `>=19` gate, no LLVM rebuild), `crt-static =
|
||||||
`crt-static = false` (dynamic link against the devfs system musl, like Alpine
|
false` (dynamic link against the devfs system musl, like Alpine and the
|
||||||
and the run_rustc toolchain), `rpath = true`. Copy it into the rust source root.
|
run_rustc toolchain), `rpath = true`. Copy it into the rust source root.
|
||||||
|
- **`bootstrap-1.91.1.toml`** — config for hop 2 (1.91.0 → 1.91.1). Same as hop 1
|
||||||
|
except: stage0 `rustc = /stage0/bin/rustc` (the installed hop-1 toolchain, bound
|
||||||
|
read-only via `STAGE0`), stage0 `cargo` = the run_rustc 1.90.0 cargo (1.90
|
||||||
|
satisfies bootstrap's "minor-1" check for a 1.91.x source), `extended = true` +
|
||||||
|
`tools = ["cargo"]` so the install yields a hammer-built cargo, and
|
||||||
|
**`cargo-native-static = true`** — the hermetic devfs has no system
|
||||||
|
OpenSSL/curl/libgit2, so this makes bootstrap build cargo with the `all-static`
|
||||||
|
feature set (vendored openssl/libgit2 + static curl/libz, compiled from the
|
||||||
|
vendored C sources via gcc). Without it the cargo tool fails on `openssl-sys`.
|
||||||
- **`run-xpy.sh`** — run rust's `x.py` inside the devfs sandbox, binding the
|
- **`run-xpy.sh`** — run rust's `x.py` inside the devfs sandbox, binding the
|
||||||
source at `/src`, the install prefix at `/out`, and the mrustc tree at `/mrustc`
|
source at `/src`, the install prefix at `/out`, and the mrustc tree at `/mrustc`
|
||||||
(so the stage0 + `llvm-config` paths in `bootstrap.toml` resolve).
|
(so the stage0 + `llvm-config` paths in `bootstrap.toml` resolve). Set the
|
||||||
Usage: `run-xpy.sh <SRCDIR> <PREFIXDIR> -- build --stage 2 compiler/rustc library/std`.
|
`STAGE0` env var to also bind a prior hop's installed prefix read-only at
|
||||||
|
`/stage0`. Usage:
|
||||||
|
`run-xpy.sh <SRCDIR> <PREFIXDIR> -- build --stage 2 compiler/rustc library/std`.
|
||||||
|
|
||||||
> The runners hardcode `/home/sergio/hammer` and assume the prepared devfs at
|
> The runners hardcode `/home/sergio/hammer` and assume the prepared devfs at
|
||||||
> `.dev-fs/alpine` (256-TLS-key musl loader + g++; see the bootstrap-devfs notes).
|
> `.dev-fs/alpine` (256-TLS-key musl loader + g++; see the bootstrap-devfs notes).
|
||||||
@@ -107,7 +118,29 @@ git -C .scratch/mrustc apply scripts/rust-frontier/run_rustc.patch
|
|||||||
# 3. build the optimised rustc + cargo via run_rustc (stage 1/2/3)
|
# 3. build the optimised rustc + cargo via run_rustc (stage 1/2/3)
|
||||||
.scratch/run-runrustc.sh all
|
.scratch/run-runrustc.sh all
|
||||||
|
|
||||||
# 4. (next) climb 1.90.0 → 1.91.0 → 1.91.1, then swap rust into /toolchain
|
# 4. climb hop 1 — 1.90.0 -> 1.91.0 (stage0 = the run_rustc musl-host 1.90.0)
|
||||||
|
cp scripts/rust-frontier/bootstrap.toml .scratch/rustc-1.91.0-src/bootstrap.toml
|
||||||
|
.scratch/run-xpy.sh .scratch/rustc-1.91.0-src .scratch/rust-1.91.0-prefix -- \
|
||||||
|
build --stage 2 compiler/rustc library/std
|
||||||
|
.scratch/run-xpy.sh .scratch/rustc-1.91.0-src .scratch/rust-1.91.0-prefix -- \
|
||||||
|
install --stage 2 rustc library/std # -> relocatable 1.91.0 (rpath)
|
||||||
|
|
||||||
|
# 5. climb hop 2 — 1.91.0 -> 1.91.1 (stage0 rustc = the installed 1.91.0)
|
||||||
|
cp scripts/rust-frontier/bootstrap-1.91.1.toml .scratch/rustc-1.91.1-src/bootstrap.toml
|
||||||
|
STAGE0=.scratch/rust-1.91.0-prefix .scratch/run-xpy.sh \
|
||||||
|
.scratch/rustc-1.91.1-src .scratch/rust-1.91.1-prefix -- \
|
||||||
|
build --stage 2 compiler/rustc library/std src/tools/cargo
|
||||||
|
STAGE0=.scratch/rust-1.91.0-prefix .scratch/run-xpy.sh \
|
||||||
|
.scratch/rustc-1.91.1-src .scratch/rust-1.91.1-prefix -- \
|
||||||
|
install --stage 2 rustc library/std cargo # -> hammer rustc+cargo 1.91.1
|
||||||
|
|
||||||
|
# 6. (next) swap rust 1.91.1 into /toolchain + auto-consistency criterion (EXPECT_REF)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**DONE (2026-06-16):** both hops built. `rust-1.91.1-prefix/bin/{rustc,cargo}` run
|
||||||
|
standalone (rpath), `rustc 1.91.1 (ed61e7d7e)` host `x86_64-unknown-linux-musl`
|
||||||
|
LLVM 20.1.8, `cargo 1.91.1`. Alpine's exact rust version, fully self-hosted from
|
||||||
|
the mrustc chain (mrustc → 1.90.0 → 1.91.0 → 1.91.1). Each hop ≈45 min compile
|
||||||
|
(LLVM reused throughout); hop 2's cargo needed the `cargo-native-static` fix.
|
||||||
|
|
||||||
Full diagnostic history is in the `selfhost-verify-rust-frontier` memory.
|
Full diagnostic history is in the `selfhost-verify-rust-frontier` memory.
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# bootstrap.toml — hammer self-host climb hop 2 (1.91.0 -> 1.91.1), musl host.
|
||||||
|
# stage0 rustc = the installed hammer-built 1.91.0 (bound read-only at /stage0);
|
||||||
|
# stage0 cargo = the run_rustc mrustc-bootstrapped 1.90.0 cargo (1.90 satisfies
|
||||||
|
# bootstrap's "minor-1" check for a 1.91.x source). LLVM 20.1.8 reused externally.
|
||||||
|
# extended+cargo so the install includes a hammer-built cargo 1.91.1 (final toolchain).
|
||||||
|
change-id = "ignore"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
build = "x86_64-unknown-linux-musl"
|
||||||
|
host = ["x86_64-unknown-linux-musl"]
|
||||||
|
target = ["x86_64-unknown-linux-musl"]
|
||||||
|
rustc = "/stage0/bin/rustc"
|
||||||
|
cargo = "/mrustc/run_rustc/output-1.90.0-x86_64-unknown-linux-musl/prefix/bin/cargo"
|
||||||
|
python = "/usr/bin/python3"
|
||||||
|
submodules = false
|
||||||
|
docs = false
|
||||||
|
extended = true
|
||||||
|
tools = ["cargo"]
|
||||||
|
# hermetic musl devfs has no system OpenSSL/curl/libgit2 → build cargo with the
|
||||||
|
# `all-static` feature set (vendored openssl/libgit2 + static curl/libz, all
|
||||||
|
# compiled from the vendored C sources via gcc). This is what bootstrap pushes
|
||||||
|
# for the cargo tool when cargo-native-static is set (prepare_tool_cargo).
|
||||||
|
cargo-native-static = true
|
||||||
|
vendor = true
|
||||||
|
locked-deps = true
|
||||||
|
verbose = 1
|
||||||
|
|
||||||
|
[rust]
|
||||||
|
channel = "stable"
|
||||||
|
download-rustc = false
|
||||||
|
lld = false
|
||||||
|
llvm-tools = false
|
||||||
|
rpath = true
|
||||||
|
|
||||||
|
[install]
|
||||||
|
prefix = "/out"
|
||||||
|
sysconfdir = "etc"
|
||||||
|
|
||||||
|
[llvm]
|
||||||
|
download-ci-llvm = false
|
||||||
|
|
||||||
|
[target.x86_64-unknown-linux-musl]
|
||||||
|
llvm-config = "/mrustc/rustc-1.90.0-src/build/bin/llvm-config"
|
||||||
|
crt-static = false
|
||||||
|
cc = "gcc"
|
||||||
|
cxx = "g++"
|
||||||
|
linker = "gcc"
|
||||||
@@ -12,11 +12,18 @@ SRC=${1:?src dir required}; shift
|
|||||||
PREFIX=${1:?prefix dir required}; shift
|
PREFIX=${1:?prefix dir required}; shift
|
||||||
[ "${1:-}" = "--" ] && shift
|
[ "${1:-}" = "--" ] && shift
|
||||||
|
|
||||||
|
# Optional read-only stage0 prefix (a prior hop's installed toolchain), bound at
|
||||||
|
# /stage0 when STAGE0 is set in the environment. bootstrap.toml's build.rustc can
|
||||||
|
# then reference /stage0/bin/rustc for a climb hop.
|
||||||
|
STAGE0_BIND=""
|
||||||
|
[ -n "${STAGE0:-}" ] && STAGE0_BIND="--ro-bind $STAGE0 /stage0"
|
||||||
|
|
||||||
exec bwrap \
|
exec bwrap \
|
||||||
--bind "$DEVFS" / \
|
--bind "$DEVFS" / \
|
||||||
--bind "$MRUSTC" /mrustc \
|
--bind "$MRUSTC" /mrustc \
|
||||||
--bind "$SRC" /src \
|
--bind "$SRC" /src \
|
||||||
--bind "$PREFIX" /out \
|
--bind "$PREFIX" /out \
|
||||||
|
$STAGE0_BIND \
|
||||||
--dev /dev --proc /proc \
|
--dev /dev --proc /proc \
|
||||||
--tmpfs /tmp --tmpfs /run \
|
--tmpfs /tmp --tmpfs /run \
|
||||||
--setenv PATH /usr/bin:/bin:/usr/sbin:/sbin \
|
--setenv PATH /usr/bin:/bin:/usr/sbin:/sbin \
|
||||||
|
|||||||
Reference in New Issue
Block a user