rust: `rpath = false`, la pareja obligatoria de poner lld como enlazador directo
El build con `ld.lld` en el spec murió compilando `std`:
ld.lld: error: unknown argument '-Wl,-z,origin'
ld.lld: error: unknown argument '-Wl,-rpath,$ORIGIN/../lib'
Con el enlazador invocado DIRECTO (sin driver de C), los `-Wl,…` que el bootstrap añade para el
rpath de sus propios binarios llegan tal cual a lld, que no los entiende — esa sintaxis existe para
que un `cc` los traduzca.
El rpath sobra igual: con `prefix = "/usr"` las librerías quedan en `/usr/lib`, que ya está en el
camino del cargador. Es lo que hacen las distros que empaquetan rust.
Costó 6 minutos de build descubrirlo, que es lo que vale tener la cadena en la granja: cada intento
falla temprano y con el mensaje exacto.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +10 −0
- recipes/rust.toml +10 −0
diff --git a/recipes/rust.toml b/recipes/rust.toml
index bfc63b04..f1e6de09 100644
--- a/recipes/rust.toml
+++ b/recipes/rust.toml
@@ -117,6 +117,16 @@ channel = "stable"
codegen-tests = false
deny-warnings = false
musl-root = "/usr"
+# ⚠ `rpath = false` es la pareja de haber puesto `ld.lld` como enlazador en el spec del triple.
+# Con el enlazador INVOCADO DIRECTO (sin driver de C), los `-Wl,…` que el bootstrap añade para el
+# rpath de sus propios binarios llegan tal cual a lld, que no los entiende:
+#
+# ld.lld: error: unknown argument '-Wl,-z,origin'
+# ld.lld: error: unknown argument '-Wl,-rpath,$ORIGIN/../lib'
+#
+# …y muere compilando `std`. El rpath sobra igual: con `prefix = "/usr"` las librerías quedan en
+# `/usr/lib`, que YA está en el camino del cargador. Es lo que hacen las distros que empaquetan rust.
+rpath = false
[install]
# ⚠ SIN ESTO EL TOOLCHAIN QUEDA FUERA DEL PATH, y es la trampa de «existe ≠ se encuentra»: el