# ══ SUBIÓ AL CORPUS (2026-09-04), Y LA COPIA DE LA COLA SE JUBILÓ ══════════════════════════════ # Nació en `incoming-cosmic` porque la pidió un crate `*-sys` del portal. Sube porque la PLATAFORMA # GECKO la necesita: el build de Firefox corre `bindgen` sobre los headers de C++ y bindgen carga # `libclang.so` en runtime — sin esto no hay Firefox, ni Waterfox, ni Zen. Y desde el corpus no se # alcanza una cola hermana. # # La mudanza fue GRATIS y se midió antes: sus cinco deps (cmake, samurai, python3, pkgconf, llvm18) # viven SÓLO en el corpus, o sea que `incoming-cosmic` ya las resolvía por caída al padre ⇒ el cierre # no cambia. `takana hash` dio el MISMO ArtifactHash (b3:25d95279…) en las dos rutas, así que # `xdg-desktop-portal-cosmic` no se entera: sigue resolviéndola por caída al padre, sin rebuild. # Se MUEVE y no se copia — dos ficheros para un artefacto es el cuadro de las dos glib esperando a # que uno de los dos derive. # # clang18 (18.1.8) — **sólo `libclang.so`**, y no está acá por querer un compilador más: está porque # `bindgen` no puede generar bindings sin él, y sin bindgen no hay backend del portal. # # ── LA CADENA DE POR QUÉ, QUE CONVIENE LEER ENTERA ANTES DE JUZGAR EL TAMAÑO ───────────────────── # `cosmic-screenshot` pide una captura al portal # → el frontend `xdg-desktop-portal` enruta al backend # → `xdg-desktop-portal-cosmic` implementa ScreenCast/Screenshot # → declara `pipewire` y `libspa-sys` como deps DURAS (no opcionales) # → `libspa-sys/build.rs` corre `bindgen::builder()` **incondicional**, sin bindings # pregenerados de reserva # → bindgen carga `libclang.so` en tiempo de ejecución. # # Se verificó que no hay atajo: el `build.rs` de libspa-sys no tiene rama alternativa (a diferencia # de `aws-lc-sys`, que sí cae a bindings pregenerados con `cargo:rustc-cfg=universal` y por eso cruzó # a musl sin cmake ni perl). Y `libclang.so` no está en el corpus ni en los 182 binarios del rootfs # del constructor: `llvm18` se selló con `-DLLVM_ENABLE_PROJECTS=""`, o sea LLVM a secas para el JIT # de llvmpipe. # # ── POR QUÉ ES MÁS BARATO DE LO QUE PARECE ────────────────────────────────────────────────────── # **No se recompila LLVM.** El artefacto `llvm18` ya publica `usr/include/llvm`, `usr/include/llvm-c` # y `usr/lib/cmake/llvm`, así que esto es un build de clang CONTRA un LLVM ya sellado # (`-DCLANG_LINK_CLANG_DYLIB=ON` + `LLVM_LINK_LLVM_DYLIB`), no el monstruo entero. # # Se instala sólo lo que bindgen necesita. El binario `clang` NO es el objetivo: el compilador de # esta distro sigue siendo zig-cc, y agregar otro compilador al catálogo sería justo lo contrario de # la deuda que la campaña «matar gcc» viene pagando. # # ── PATRÓN gcc-de-gueto, igual que llvm18 y cmake ─────────────────────────────────────────────── # C++ a escala ⇒ g++ del sandbox con `-static-libstdc++ -static-libgcc`, para que la `.so` quede con # `NEEDED` sólo `libc.musl` y no arrastre el runtime C++ de Alpine a todo el que la declare. Es la # lección de «MATAR GCC última milla»: sin esos dos flags, el artefacto contagia `libstdc++` y # `libgcc_s` a cada build que lo use. # # ⚠ **BUILD PESADO**: mismo peso que llvm18, que se selló en el worker gordo de la granja. En el # laptop pide horas y decenas de GB de `/home`. name = "clang18" version = "18.1.8" license = "Apache-2.0 WITH LLVM-exception" [source] tarball = "https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-project-18.1.8.src.tar.xz" sha256 = "0b58557a6d32ceee97c8d533a59b9212d87e0fc4d2833924eb6c611247db2f2a" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [build.phases] configure = ''' CC=gcc CXX='g++ -static-libstdc++ -static-libgcc' \ cmake -S clang -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_CXX_FLAGS="-include cstdint" \ -DCMAKE_C_FLAGS="-include stdint.h" \ -DLLVM_DIR=/usr/lib/cmake/llvm \ -DLLVM_LINK_LLVM_DYLIB=ON \ -DCLANG_LINK_CLANG_DYLIB=ON \ -DLLVM_ENABLE_RTTI=ON \ -DCLANG_INCLUDE_TESTS=OFF \ -DCLANG_INCLUDE_DOCS=OFF \ -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ -DCLANG_ENABLE_ARCMT=OFF \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_DOCS=OFF ''' compile = "ninja -C build libclang.so clang-resource-headers" # Sólo la librería y sus cabeceras: `ninja install` traería el binario `clang`, `clang-format`, # `scan-build` y compañía, que acá no cumplen ninguna función. install = ''' mkdir -p /out/usr/lib /out/usr/include cp -a build/lib/libclang.so* /out/usr/lib/ cp -a clang/include/clang-c /out/usr/include/ ''' [deps] build = ["cmake", "samurai", "python3", "pkgconf", "llvm18"]