From b7f70f37a8f8d510d780582fa8ff113add002982 Mon Sep 17 00:00:00 2001 From: Sergio Date: Wed, 16 Sep 2026 00:58:29 +0000 Subject: [PATCH] =?UTF-8?q?rust:=20`lld=20=3D=20true`=20=E2=80=94=20el=20c?= =?UTF-8?q?ompilador=20que=20no=20pod=C3=ADa=20enlazar=20ahora=20trae=20su?= =?UTF-8?q?=20enlazador?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Muro 8, cerrado por la vía (a): el toolchain se construye su propio `rust-lld` en vez de depender de un `cc` que en una caja takana no existe. Lo que lo destraba es una línea del log que parece informativa: `skipping llvm-tools (…): external LLVM`. Al usar un LLVM externo —que es lo que queremos, porque `llvm21` es del corpus— x.py se salta las herramientas de LLVM, y `rust-lld` es una de ellas. El prebuilt oficial sí la trae, y por eso el escalón 1 enlazaba y el 2 no. Comprobado ANTES de encolar dos horas de build, leyendo el bootstrap y midiendo los artefactos: · el paso `Lld` compila desde `src/llvm-project/lld`, que YA VIENE en el tarball (1,1 G de fuente); · usa el `llvm-config`/cmake del LLVM EXTERNO y NO dispara un build de LLVM entero; · `llvm21` publica `lib/cmake/llvm/LLVMConfig.cmake`, que es justo lo que ese paso necesita; · `dist.rs` copia `rust-lld` al sysroot SÓLO `if builder.config.lld_enabled`; · y `llvm21` no servía de repuesto: sobre sus 1,6 G no publica NINGÚN `lld`. Co-Authored-By: Claude Opus 5 (1M context) --- recipes/rust.toml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/recipes/rust.toml b/recipes/rust.toml index 4b0fc559..c0584d88 100644 --- a/recipes/rust.toml +++ b/recipes/rust.toml @@ -100,6 +100,21 @@ channel = "stable" codegen-tests = false deny-warnings = false musl-root = "/usr" +# ⚠ SIN ESTO EL COMPILADOR NO PUEDE ENLAZAR, y el primer sellado lo demostró: `rustc hola.rs` en una +# caja sin `cc` daba «linker `lld` not found», y con el `ld` de binutils «cannot find -lgcc». La +# causa estaba en una línea del log que parece informativa —`skipping llvm-tools (…): external +# LLVM`—: al usar un LLVM externo, que es lo que queremos porque `llvm21` es del corpus, x.py se +# salta las herramientas de LLVM y `rust-lld` es una de ellas. El prebuilt oficial sí la trae, y por +# eso el escalón 1 enlazaba y el 2 no. +# +# `lld = true` construye LLD desde el `src/llvm-project/lld` que YA VIENE en el tarball (1,1 G de +# fuente) contra el cmake del LLVM externo — comprobado que `llvm21` publica su +# `lib/cmake/llvm/LLVMConfig.cmake`, que es lo que ese paso necesita, y que NO dispara un build de +# LLVM entero (el paso `Lld` reusa el `llvm-config` externo). Después, `dist.rs` lo copia al sysroot +# como `rust-lld` sólo `if builder.config.lld_enabled`. +# +# ⚠ `llvm21` no servía de repuesto: medido sobre sus 1,6 G, **no publica ningún `lld`**. +lld = true [target.x86_64-alpine-linux-musl] llvm-config = "/usr/bin/llvm-config"