gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1181Shell 82Rust 62Markdown 521515 Definiciones

⎇ 026eb446777f4ad4e4ec358e1c07efdf251a6b0f recipes/rust.toml TOML · 83 líneas · 3.6 KB Historia crudo

rust 1.97.0 desde fuente: paso 2 — con llvm21 externo y el prebuilt como stage0 026eb4467 · Sergio ·

1# rust 1.97.0 DESDE FUENTE — el paso 2 de los tres, y el que hace que el compilador sea nuestro.
2#
3# ══ LA CADENA, Y POR QUÉ ESTE ES EL SEGUNDO ESCALÓN ════════════════════════════════════════════
4#   1. `rust-toolchain-bin` — el tarball oficial, `foreign`, sellado tal cual. Desbloqueó que una
5#      caja takana compile Rust (probado: `rustc 1.97.0` y un binario que corre). Es el escalón.
6#   2. **esto** — rustc construido acá, con `llvm21` del corpus y con el (1) como **stage0**. Un
7#      prebuilt ajeno sirve exactamente para esto: ser el escalón que permite dejar de necesitarlo.
8#   3. La cadena `mrustc → 1.90 → 1.91.0 → 1.91.1` del selfhost, que quita hasta ese escalón.
9#
10# ⚠ **`local-rebuild = true` NO es un detalle.** El bootstrap de rustc espera que el stage0 sea el
11# compilador ANTERIOR (o el beta de esta versión); acá el stage0 es **1.97.0 construyendo 1.97.0**, y
12# sin esa opción x.py aborta por «stage0 compiler version mismatch». Es el modo que usan las distros
13# para reconstruir la misma versión con la misma versión.
14#
15# ⚠ **El LLVM es EXTERNO y tiene que ser ≥21**, medido en el propio bootstrap:
16# `panic!("bad LLVM version: {version}, need >=21")`. Por eso existe `llvm21` y por eso `llvm18` —que
17# ya estaba sellado— no servía: lo usa mesa, que no soporta 21. Ver `recipes/llvm21.toml`.
18#
19# ⚠ Sin red: el tarball `-src` trae `vendor/` con todas las deps de cargo. Es la única forma de que
20# esto construya dentro del sandbox, que no tiene red después del fetch.
21name    = "rust"
22version = "1.97.0"
23license = "MIT OR Apache-2.0"
24
25[source]
26tarball = "https://static.rust-lang.org/dist/rustc-1.97.0-src.tar.xz"
27sha256  = "de002ee301c1b7422b0a7b09d7c4cb4924cd3224e6cfb24f065dad786dd3ed12"
28
29[build]
30compiler = "zig-cc"
31target   = "x86_64-linux-musl"
32link     = "dynamic"
33flags    = []
34
35[deps]
36# `rust-toolchain-bin` es el STAGE0: el compilador con el que arranca el build. `llvm21` aporta el
37# `llvm-config` y las librerías. `cmake`/`samurai`/`pkgconf` los pide el propio bootstrap aunque el
38# LLVM venga hecho (compila algunas cosas nativas: `compiler-rt` para los sanitizers, jemalloc…).
39build = ["rust-toolchain-bin", "llvm21", "cmake", "samurai", "python3", "pkgconf", "curl"]
40
41[build.phases]
42# El fichero de configuración de x.py se llama `bootstrap.toml` desde 1.8x; se escribe también
43# `config.toml` porque el nombre viejo sigue siendo el que busca media documentación, y un fichero
44# de más no cuesta nada mientras el de verdad esté.
45configure = '''
46cat > bootstrap.toml <<'CFG'
47profile = "dist"
48change-id = "ignore"
49
50[build]
51docs = false
52extended = true
53tools = ["cargo"]
54local-rebuild = true
55rustc = "/usr/bin/rustc"
56cargo = "/usr/bin/cargo"
57target = ["x86_64-unknown-linux-musl"]
58host = ["x86_64-unknown-linux-musl"]
59vendor = true
60
61[llvm]
62download-ci-llvm = false
63link-shared = false
64
65[rust]
66channel = "stable"
67codegen-tests = false
68deny-warnings = false
69musl-root = "/usr"
70
71[target.x86_64-unknown-linux-musl]
72llvm-config = "/usr/bin/llvm-config"
73crt-static = true
74CFG
75cp bootstrap.toml config.toml
76# La versión del stage0 se COMPRUEBA, no se asume: `local-rebuild` sólo es correcto si el compilador
77# de arranque es exactamente esta versión, y si alguien mueve el pin de `rust-toolchain-bin` esto
78# tiene que fallar acá y no tres horas después.
79rustc --version | grep -q '1\\.97\\.0' || { echo "stage0 NO es 1.97.0: $(rustc --version)" >&2; exit 1; }
80llvm-config --version
81'''
82compile = "python3 x.py build --stage 2"
83install = "DESTDIR=/out python3 x.py install --stage 2"