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>
39 lines
1.9 KiB
TOML
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
|
|
'''
|