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>
This commit is contained in:
Sergio
2026-09-16 13:21:12 +00:00
co-authored by Claude Opus 5
parent e903f486d9
commit 65dab8d262
+10
View File
@@ -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