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…

TOML 1471Shell 173Rust 105Markdown 943545 Definitions

⎇ a6a9d59e4f0d354cf2c9066538c6fa7016fc6721 recipes/incoming-cosmic/clang18.toml TOML · 77 lines · 3.9 KB History raw

🚪 cosmic: el BACKEND del portal + clang18 — recetas listas para la granja e914dd63e · sergio ·

1# clang18 (18.1.8) — **sólo `libclang.so`**, y no está acá por querer un compilador más: está porque
2# `bindgen` no puede generar bindings sin él, y sin bindgen no hay backend del portal.
3#
4# ── LA CADENA DE POR QUÉ, QUE CONVIENE LEER ENTERA ANTES DE JUZGAR EL TAMAÑO ─────────────────────
5#   `cosmic-screenshot` pide una captura al portal
6#     → el frontend `xdg-desktop-portal` enruta al backend
7#       → `xdg-desktop-portal-cosmic` implementa ScreenCast/Screenshot
8#         → declara `pipewire` y `libspa-sys` como deps DURAS (no opcionales)
9#           → `libspa-sys/build.rs` corre `bindgen::builder()` **incondicional**, sin bindings
10#             pregenerados de reserva
11#             → bindgen carga `libclang.so` en tiempo de ejecución.
12#
13# Se verificó que no hay atajo: el `build.rs` de libspa-sys no tiene rama alternativa (a diferencia
14# de `aws-lc-sys`, que sí cae a bindings pregenerados con `cargo:rustc-cfg=universal` y por eso cruzó
15# a musl sin cmake ni perl). Y `libclang.so` no está en el corpus ni en los 182 binarios del rootfs
16# del constructor: `llvm18` se selló con `-DLLVM_ENABLE_PROJECTS=""`, o sea LLVM a secas para el JIT
17# de llvmpipe.
18#
19# ── POR QUÉ ES MÁS BARATO DE LO QUE PARECE ──────────────────────────────────────────────────────
20# **No se recompila LLVM.** El artefacto `llvm18` ya publica `usr/include/llvm`, `usr/include/llvm-c`
21# y `usr/lib/cmake/llvm`, así que esto es un build de clang CONTRA un LLVM ya sellado
22# (`-DCLANG_LINK_CLANG_DYLIB=ON` + `LLVM_LINK_LLVM_DYLIB`), no el monstruo entero.
23#
24# Se instala sólo lo que bindgen necesita. El binario `clang` NO es el objetivo: el compilador de
25# esta distro sigue siendo zig-cc, y agregar otro compilador al catálogo sería justo lo contrario de
26# la deuda que la campaña «matar gcc» viene pagando.
27#
28# ── PATRÓN gcc-de-gueto, igual que llvm18 y cmake ───────────────────────────────────────────────
29# C++ a escala ⇒ g++ del sandbox con `-static-libstdc++ -static-libgcc`, para que la `.so` quede con
30# `NEEDED` sólo `libc.musl` y no arrastre el runtime C++ de Alpine a todo el que la declare. Es la
31# lección de «MATAR GCC última milla»: sin esos dos flags, el artefacto contagia `libstdc++` y
32# `libgcc_s` a cada build que lo use.
33#
34# ⚠ **BUILD PESADO**: mismo peso que llvm18, que se selló en el worker gordo de la granja. En el
35# laptop pide horas y decenas de GB de `/home`.
36name    = "clang18"
37version = "18.1.8"
38
39[source]
40tarball = "https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-project-18.1.8.src.tar.xz"
41sha256  = "0b58557a6d32ceee97c8d533a59b9212d87e0fc4d2833924eb6c611247db2f2a"
42
43[build]
44compiler = "zig-cc"
45target   = "x86_64-linux-musl"
46link     = "dynamic"
47
48[build.phases]
49configure = '''
50CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' \
51cmake -S clang -B build -G Ninja \
52  -DCMAKE_BUILD_TYPE=Release \
53  -DCMAKE_INSTALL_PREFIX=/usr \
54  -DCMAKE_CXX_FLAGS="-include cstdint" \
55  -DCMAKE_C_FLAGS="-include stdint.h" \
56  -DLLVM_DIR=/usr/lib/cmake/llvm \
57  -DLLVM_LINK_LLVM_DYLIB=ON \
58  -DCLANG_LINK_CLANG_DYLIB=ON \
59  -DLLVM_ENABLE_RTTI=ON \
60  -DCLANG_INCLUDE_TESTS=OFF \
61  -DCLANG_INCLUDE_DOCS=OFF \
62  -DCLANG_ENABLE_STATIC_ANALYZER=OFF \
63  -DCLANG_ENABLE_ARCMT=OFF \
64  -DLLVM_INCLUDE_TESTS=OFF \
65  -DLLVM_INCLUDE_DOCS=OFF
66'''
67compile = "ninja -C build libclang.so clang-resource-headers"
68# Sólo la librería y sus cabeceras: `ninja install` traería el binario `clang`, `clang-format`,
69# `scan-build` y compañía, que acá no cumplen ninguna función.
70install = '''
71mkdir -p /out/usr/lib /out/usr/include
72cp -a build/lib/libclang.so* /out/usr/lib/
73cp -a clang/include/clang-c /out/usr/include/
74'''
75
76[deps]
77build = ["cmake", "samurai", "python3", "pkgconf", "llvm18"]