Files
hammer/recipes/samurai.toml
T
sergioandClaude Opus 4.8 756928aa8c static: la causa raíz NO era libtool — es que CC no lleva -target (samurai arreglada)
samurai declaraba link=static y salía DINÁMICO (NEEDED: libc.so). No usa libtool, así que el
patrón -all-static de jq/parted/shadow no aplicaba. Medido DENTRO del sandbox con readelf, sobre
un `int main(){return 0;}` trivial:

    zig cc -mcpu=baseline -static                           → NEEDED=1  (dinámico)
    zig cc -mcpu=baseline -target x86_64-linux-musl -static → NEEDED=0  (estático)

El lab exporta CC="zig cc -mcpu=baseline" SIN -target (sandbox.rs:415) ⇒ zig compila NATIVO,
detecta la musl de Alpine del rootfs (/usr/lib/libc.a existe) y enlaza contra ella IGNORANDO el
-static que el propio lab exporta por link="static". El -target fuerza la musl bundleada de zig.

Las recetas YA declaran target = "x86_64-linux-musl": el campo existe y no llega al CC. El fix
de framework re-hashea los 841 sellados ⇒ decisión aparte; por ahora va por receta.

samurai: estático de verdad (NEEDED=0), corre en el host, samu --version = 1.9.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:31:21 -04:00

39 lines
1.9 KiB
TOML

# samurai 1.3 — clon C de ninja (lo que usa Alpine como `ninja`). Build-tool del stack meson
# (libdrm/wayland/mesa lo invocan como backend). Provee /usr/bin/samu + symlink /usr/bin/ninja.
# zig 0.13.0: con el zig default (0.16/clang21) el binario musl miscompila y falla en runtime
# con "reallocarray: No error information" — el patrón conocido (binutils/elfutils/flex).
name = "samurai"
version = "1.3"
[source]
tarball = "https://github.com/michaelforney/samurai/releases/download/1.3/samurai-1.3.tar.gz"
sha256 = "1bc020a9e133432df51911ac71cc34322f828934d9a2282ba2916d88c15976af"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
zig_version = "0.13.0"
[deps]
build = ["make"]
[build.phases]
# `-target x86_64-linux-musl` en LDFLAGS: samurai NO usa libtool (Makefile pelado), así que el
# `-all-static` de jq/parted/shadow no aplica — sería un flag desconocido para zig-cc. La causa era
# otra y NO es de samurai: el lab exporta `CC="zig cc -mcpu=baseline"` SIN `-target` (sandbox.rs),
# así que zig compila NATIVO, detecta la musl de Alpine del rootfs (/usr/lib/libc.a existe) y enlaza
# contra ella IGNORANDO el `-static` que el lab exporta por `link = "static"`. Medido dentro del
# sandbox sobre un `int main(){return 0;}` trivial, con readelf:
# zig cc -mcpu=baseline -static → NEEDED=1 (dinámico)
# zig cc -mcpu=baseline -target x86_64-linux-musl -static → NEEDED=0 (estático)
# El `-target` fuerza la musl BUNDLEADA de zig ⇒ el `-static` se respeta. La receta ya declaraba
# `target = "x86_64-linux-musl"`, pero ese campo no llega al CC: hasta que eso se arregle en el
# framework (re-hashea los 841 sellados), va por receta.
compile = 'make CFLAGS="-O2" LDFLAGS="-target x86_64-linux-musl -static"'
install = '''
set -e
make install PREFIX="/usr" DESTDIR="/out"
ln -s samu /out/usr/bin/ninja
'''