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 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ 8d4746bba976b963f0d2ebd5aba3c57cfd1ee5da recipes/mold.toml TOML · 61 líneas · 3.8 KB Historia crudo

recetas: mold y wireguard-tools — `link = "static"` era una etiqueta, no un hecho f0614f679 · Sergio ·

1# mold 2.42.1 — enlazador paralelo. C++20, CMake.
2#
3# ── POR QUÉ ENTRA, Y ES DISTINTO DEL RESTO DE ESTA TANDA ──────────────────────────────────────
4# Las otras recetas de la tanda son para el usuario del producto; ésta es para quien CONSTRUYE con
5# él. El catálogo trae `sccache` (cachear compilaciones) y no tenía con qué acelerar el enlace, que
6# es justo la fase serial de un build grande. No reemplaza al lld de zig que usa el lab: entra como
7# herramienta del userland, no del sandbox.
8#
9# ── `-DCMAKE_LINK_DEPENDS_USE_LINKER=OFF`, Y NO ES OPCIONAL ───────────────────────────────────
10# El lld que trae zig SEGFAULTEA cuando CMake le pasa `--dependency-file` (CMake ≥3.31 lo hace de
11# fábrica para calcular dependencias de enlace). Ya está medido en este repo: de 15 recetas CMake
12# barridas, 5 NO construían por esto. Una línea lo evita.
13#
14# `-DMOLD_USE_SYSTEM_TBB=OFF` y mimalloc: mold trae sus dependencias en `third-party/` y prefiere
15# las suyas; el corpus no tiene ni tbb ni mimalloc, así que usar las de upstream no es una
16# concesión sino la única vía sin escribir dos recetas más.
17name    = "mold"
18version = "2.42.1"
19license = "MIT"
20
21[source]
22repo   = "https://github.com/rui314/mold"
23commit = "9b376bc6a9899d4a16b41777de1f013989459fbc"
24
25[build]
26compiler = "zig-cc"
27target   = "x86_64-linux-musl"
28link     = "static"
29
30# ⚠ `strip_debug` NO ES COSMÉTICA ACÁ, Y ESTÁ MEDIDA. El primer sello de esta receta dio un
31# artefacto de **629 MB, de los cuales 628 son UN SOLO FICHERO**: `/usr/bin/mold` con la info de
32# depuración adentro. Un enlazador pesa ~8 MB pelado; el resto es DWARF de un C++20 grande
33# compilado con `-g`, que `CMAKE_BUILD_TYPE=Release` no quita. Sellar eso no rompe nada —el binario
34# funciona— y por eso es el modo de fallo caro: entra en el store, entra en la imagen, entra en el
35# respaldo, y nadie mira el tamaño. Split SDD 23 (entra en `hash_inputs`; obliga a `binutils`).
36strip_debug = true
37
38[build.phases]
39# ⚠ `MOLD_MOSTLY_STATIC=ON` + `-static` EXPLÍCITO — LOS DOS, Y SE APRENDIÓ CORRIENDO EL BINARIO.
40# El primer sello llevaba `link = "static"` y salió **dinámico**: `NEEDED libz.so.1 libzstd.so.1
41# libc.so`, con intérprete. Al ejecutarlo:
42#     Error relocating /lib/libz.so.1: __snprintf_chk: symbol not found
43# …que es la zlib de glibc DEL ANFITRIÓN resolviendo símbolos de `_FORTIFY_SOURCE` que musl no
44# tiene. O sea el cuadro completo de la casa: **selló, reprodujo y NO CORRÍA**. Dos causas
45# independientes, y hacen falta las dos perillas:
46#   1. `CMakeLists.txt:149` — `if(ZLIB_FOUND AND NOT MOLD_MOSTLY_STATIC)` enlaza la zlib
47#      COMPARTIDA del sistema; con MOSTLY_STATIC usa la `zlibstatic` que trae en tree (ídem
48#      zstd y blake3, líneas 161 y 179). Sin esto el binario pide sonames que el corpus no
49#      publica: `zlib` canónica es `.a`.
50#   2. `-DCMAKE_EXE_LINKER_FLAGS=-static` — el `LDFLAGS=-static` que el lab exporta para
51#      `link = "static"` NO llegó a la línea de enlace de CMake. Declararlo es lo que hace
52#      que `link = "static"` sea verdad y no una etiqueta.
53#
54# Moraleja para la próxima receta CMake: `link = "static"` es una DECLARACIÓN, no una
55# comprobación. Lo único que la comprueba es `readelf -d` sobre el artefacto — o correrlo.
56configure = 'cmake -S . -B _build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_LINK_DEPENDS_USE_LINKER=OFF -DCMAKE_EXE_LINKER_FLAGS=-static -DMOLD_MOSTLY_STATIC=ON -DMOLD_USE_SYSTEM_TBB=OFF -DBUILD_TESTING=OFF'
57compile   = 'cmake --build _build'
58install   = 'DESTDIR=/out cmake --install _build'
59
60[deps]
61build = ["cmake", "samurai", "zlib", "zstd", "openssl", "pkgconf", "binutils"]