tawasuyu

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 1506Shell 193Rust 108Markdown 983676 Sutichaykuna

rust: el enlazador pasa a ser gcc — dejo de tapar síntomas de la misma causa

Tres intentos persiguieron el mismo problema por partes: `-lgcc` no se encuentra, después `-lgcc_s` y
`-lc` en los build scripts del stage2. La causa es una sola: un enlazador invocado SIN driver de C no
conoce los caminos del sistema. Ese `-L /usr/lib`, el directorio privado de gcc y las libs implícitas
las agrega `gcc`, no `ld`. Dárselos a mano es una lista sin fondo, porque cada etapa del bootstrap
enlaza cosas distintas.

Y el intento de dárselos por RUSTFLAGS (_BOOTSTRAP y _NOT_BOOTSTRAP) NO llegó a los build scripts:
comprobado mirando el renglón de enlace, donde `/usr/lib` seguía sin aparecer. Así que la cura va
donde corresponde: `linker = "gcc"` en el `[target.x86_64-alpine-linux-musl]` de bootstrap.toml. De
paso, con gcc de driver los `-Wl,-rpath,…` del bootstrap vuelven a ser válidos —eran lo que había
obligado a `rpath = false`, que se deja igual porque sigue siendo lo correcto con prefijo /usr—.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

2720253a418150ac6d131d09ef538ba8c11f45b8 · ruwaq Sergio · (1 killa ñawpaq) · tayta 7deb51242 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +17 −6

diff --git a/recipes/rust.toml b/recipes/rust.toml
index 8fb6d057..664a78ea 100644
--- a/recipes/rust.toml
+++ b/recipes/rust.toml
@@ -137,6 +137,16 @@ prefix = "/usr"
 
 [target.x86_64-alpine-linux-musl]
 llvm-config = "/usr/bin/llvm-config"
+# El ENLAZADOR es `gcc`, no `ld.lld` directo. Tres intentos fueron persiguiendo síntomas de lo
+# mismo: `-lgcc` no se encuentra, después `-lgcc_s` y `-lc` en los build scripts del stage2. La
+# causa única es que **un enlazador invocado sin driver de C no conoce los caminos del sistema**:
+# ese `-L /usr/lib`, el directorio privado de gcc y las libs implícitas las agrega `gcc`, no `ld`.
+# Dárselos a mano es una lista sin fondo —cada etapa del bootstrap enlaza cosas distintas— y encima
+# `RUSTFLAGS_BOOTSTRAP`/`_NOT_BOOTSTRAP` NO llegaron a los build scripts: se comprobó mirando el
+# renglón de enlace, donde el `-L /usr/lib` no aparecía.
+# Con `gcc` de driver, además, los `-Wl,-rpath,…` del bootstrap vuelven a ser válidos (eran lo que
+# obligó a `rpath = false`, que se deja igual porque sigue siendo lo correcto para un prefijo /usr).
+linker = "gcc"
 # `false` a propósito: habilita dylibs, y sin dylibs no hay PROC-MACROS. Un rustc con
 # `crt-static = true` no puede compilar `serde_derive`, `clap_derive` ni ninguna de las 44 recetas
 # `cargo-*` del corpus que usan `derive`.
@@ -201,9 +211,10 @@ llvm-config --version
 #    Mirando el renglón de enlace entero, esos `-L` son sólo sus propios directorios de build: **no
 #    lleva `/usr/lib`**. El enlace de `std` sí lo llevaba —de ahí `musl-root = "/usr"`— pero eso
 #    aplica al TARGET, no a los binarios de host que el bootstrap compila por el camino. Otra vez lo
-#    mismo: sin driver de C, nadie agrega los caminos del sistema. Se los damos por `RUSTFLAGS`, en
-#    las dos variantes que mira el bootstrap (`_BOOTSTRAP` para lo que compila el stage0,
-#    `_NOT_BOOTSTRAP` para stage1+). `libc.so`, `libc.a` y `libgcc_s.so` están los tres ahí:
-#    comprobado en el lab, no supuesto.
-compile = "LIBGCC=$(gcc -print-libgcc-file-name) && ln -sf \"$LIBGCC\" /usr/lib/libgcc.a && export RUSTFLAGS_BOOTSTRAP=\"-L native=/usr/lib\" RUSTFLAGS_NOT_BOOTSTRAP=\"-L native=/usr/lib\" CC=gcc CXX=g++ AR=ar RANLIB=ranlib OPENSSL_STATIC=1 OPENSSL_DIR=/usr && python3 x.py build --stage 2"
-install = "LIBGCC=$(gcc -print-libgcc-file-name) && ln -sf \"$LIBGCC\" /usr/lib/libgcc.a && export RUSTFLAGS_BOOTSTRAP=\"-L native=/usr/lib\" RUSTFLAGS_NOT_BOOTSTRAP=\"-L native=/usr/lib\" CC=gcc CXX=g++ AR=ar RANLIB=ranlib OPENSSL_STATIC=1 OPENSSL_DIR=/usr && DESTDIR=/out python3 x.py install --stage 2"
+#    mismo: sin driver de C, nadie agrega los caminos del sistema. Probé dárselos por `RUSTFLAGS`
+#    (`_BOOTSTRAP` y `_NOT_BOOTSTRAP`) y **no llegaron**: el renglón de enlace seguía sin `/usr/lib`.
+#    Ahí paré de tapar síntomas: la cura está en el `[target…]` de `bootstrap.toml` —`linker = "gcc"`—
+#    y se explica allá. El `ln -sf` de `libgcc.a` de acá abajo queda como cinturón: con gcc de driver
+#    ya no hace falta, pero no estorba y documenta dónde vive esa librería.
+compile = "LIBGCC=$(gcc -print-libgcc-file-name) && ln -sf \"$LIBGCC\" /usr/lib/libgcc.a && export CC=gcc CXX=g++ AR=ar RANLIB=ranlib OPENSSL_STATIC=1 OPENSSL_DIR=/usr && python3 x.py build --stage 2"
+install = "LIBGCC=$(gcc -print-libgcc-file-name) && ln -sf \"$LIBGCC\" /usr/lib/libgcc.a && export CC=gcc CXX=g++ AR=ar RANLIB=ranlib OPENSSL_STATIC=1 OPENSSL_DIR=/usr && DESTDIR=/out python3 x.py install --stage 2"