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 1435Shell 145Markdown 88Rust 852987 Definiciones

⎇ a1ccce2b65dc99a65189455719c45bdae3b08976 recipes/llvm21.toml TOML · 68 líneas · 3.1 KB Historia crudo

llvm21: el LLVM que rustc necesita — porque el 18 NO sirve, y está medido 229ecff90 · Sergio ·

1# LLVM 21.1.2 — el LLVM que `rustc` necesita. NO es un duplicado de `llvm18`: son para dos cosas
2# distintas y ninguna sirve para la otra.
3#
4# ══ POR QUÉ 21 Y NO EL 18 QUE YA ESTÁ SELLADO ══════════════════════════════════════════════════
5# El plan era «rustc desde fuente con el llvm18 del corpus». Medido en el propio bootstrap de rustc
6# (`src/bootstrap/src/core/build_steps/llvm.rs`), el mínimo por versión es:
7#
8#     rustc 1.87 → LLVM ≥18   ·   1.90 → ≥19   ·   1.93/1.95 → ≥20   ·   **1.97 → ≥21**
9#
10#     panic!("\n\nbad LLVM version: {version}, need >=21\n\n")
11#
12# El lab —y por tanto todo lo que construimos— está en **rust 1.97.0**, así que con `llvm18` sólo se
13# podría construir `rustc 1.87`… que a su vez no se puede bootstrapear con lo que tenemos. La salida
14# no es bajar de rustc: es subir de LLVM.
15#
16# `llvm18` se queda donde está: lo usa `mesa-llvmpipe` y mesa 24.0.9 **no soporta** LLVM 21. Dos
17# consumidores con rangos incompatibles ⇒ dos artefactos. No es deuda, es la realidad de los rangos.
18#
19# ══ DIFERENCIAS DE BUILD FRENTE A `llvm18`, Y SON A PROPÓSITO ══════════════════════════════════
20# · **Sin DYLIB.** `llvm18` construye `libLLVM.so` porque mesa la enlaza. rustc quiere las estáticas
21#   y su `llvm-config`; y el link del dylib es lo que pide MUCHA RAM (la receta de llvm18 anota
22#   «worker GORDO» por eso). Sin él, el pico baja y entra en el worker de 6 núcleos y 16 G.
23# · **RTTI ON** (rustc lo exige) y sólo el target **X86**: nada de compilar los 20 backends.
24name    = "llvm21"
25version = "21.1.2"
26license = "Apache-2.0 WITH LLVM-exception"
27
28[source]
29tarball = "https://github.com/llvm/llvm-project/releases/download/llvmorg-21.1.2/llvm-project-21.1.2.src.tar.xz"
30sha256  = "1a417d1c8faf8d93e73fec1cbb76d393ed3218974c2283c7bac9672d3d47c54b"
31
32[build]
33compiler = "zig-cc"
34target   = "x86_64-linux-musl"
35link     = "static"
36flags    = []
37
38[deps]
39# Mismas deps que `llvm18`: `samurai` es el ninja del corpus (nombre distinto, mismo programa) y
40# `pkgconf` lo pide el configure de cmake.
41build = ["cmake", "samurai", "python3", "pkgconf"]
42
43[build.phases]
44# `g++` del sandbox con `-static-libstdc++ -static-libgcc`, igual que `llvm18` y `cmake`: C++ a
45# escala con zig sigue siendo terreno minado (ver el runtime de C++ que tiene que COINCIDIR).
46configure = '''
47CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' \
48cmake -S llvm -B build -G Ninja \
49  -DCMAKE_BUILD_TYPE=Release \
50  -DCMAKE_INSTALL_PREFIX=/usr \
51  -DLLVM_TARGETS_TO_BUILD=X86 \
52  -DLLVM_BUILD_LLVM_DYLIB=OFF \
53  -DLLVM_LINK_LLVM_DYLIB=OFF \
54  -DLLVM_ENABLE_RTTI=ON \
55  -DLLVM_ENABLE_PROJECTS="" \
56  -DLLVM_ENABLE_TERMINFO=OFF \
57  -DLLVM_ENABLE_ZLIB=OFF \
58  -DLLVM_ENABLE_ZSTD=OFF \
59  -DLLVM_ENABLE_LIBXML2=OFF \
60  -DLLVM_ENABLE_LIBEDIT=OFF \
61  -DLLVM_ENABLE_BINDINGS=OFF \
62  -DLLVM_INCLUDE_TESTS=OFF \
63  -DLLVM_INCLUDE_EXAMPLES=OFF \
64  -DLLVM_INCLUDE_BENCHMARKS=OFF \
65  -DLLVM_INCLUDE_DOCS=OFF
66'''
67compile = "ninja -C build"
68install = "DESTDIR=/out ninja -C build install"