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…

rust: los build scripts del stage2 tampoco tienen /usr/lib en su línea de enlace

Con `-lgcc` resuelto, el build avanza y muere más adentro: los build scripts de libc, proc-macro2 y
quote no encuentran `-lgcc_s` ni `-lc`. Mirando el renglón de enlace entero, sus únicos `-L` son 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.

Es la misma causa de las tres veces: 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 en /usr/lib del
lab: comprobado, no supuesto.

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

7deb512425f717e3b0395d87715160459c25c473 · ruwaq Sergio · (1 killa ñawpaq) · tayta 58930769d · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

1 qillqakuna · +16 −2

diff --git a/recipes/rust.toml b/recipes/rust.toml
index 12a0e7dd..8fb6d057 100644
--- a/recipes/rust.toml
+++ b/recipes/rust.toml
@@ -191,5 +191,19 @@ llvm-config --version
 #
 #    Un guardián que comprueba en la misma fase en la que escribe confirma algo que ya no será
 #    cierto cuando importe. Lo que cambia el entorno de una fase se hace EN esa fase.
-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"
+#
+# 3. **Y con `-lgcc` resuelto aparece el siguiente, más adentro**: los BUILD SCRIPTS del stage2
+#    (`libc`, `proc-macro2`, `quote`) mueren con
+#
+#        ld.lld: error: unable to find library -lgcc_s
+#        ld.lld: error: unable to find library -lc
+#
+#    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"