Tercera iteración del fix de la corrida real (runbook §8). +crt-static (y
relocation-model=static) en RUSTFLAGS rompen los proc-macros en build nativo:
RUSTFLAGS alcanza a las deps, y un proc-macro es un dylib PIC que no puede ser
estático ("cannot produce proc-macro for clap_derive ... crate types").
Fix: pasar los flags de codegen del binario por `cargo rustc --release … -- <flags>`,
que los aplica SÓLO a la crate top-level, dejando proc-macros/deps intactos. Así el
binario final es crt-static + relocation-model=static (AUTOCONTENIDO y ET_EXEC sin
interpreter, como busybox: sin libc.so, sin loader, sin soname). El linker (zig cc)
sigue por RUSTFLAGS. musl queda --disable-shared (no se necesita loader).
Validado por unit tests; la corrida real rebuildea hammerd/arje-zero crt-static.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
26 lines
1.0 KiB
TOML
26 lines
1.0 KiB
TOML
# musl libc 1.2.5 — libc del target para el userland mínimo del Stage 1 (SDD 11 §3).
|
|
#
|
|
# Se compila estática con `zig cc` cross al target. El artefacto aporta headers + libc.a (y el
|
|
# loader, para uso dinámico futuro) al rootfs sellado. Tarball release pinned por sha256: igual de
|
|
# fuerte que un commit git para reproducibilidad (ADR 0006).
|
|
|
|
name = "musl"
|
|
version = "1.2.5"
|
|
|
|
[source]
|
|
tarball = "https://musl.libc.org/releases/musl-1.2.5.tar.gz"
|
|
sha256 = "a9a118bbe84d8764da0ea0d28b3ab3fae8477fc7e4085d90102b8596fc7c75e4"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
|
|
[build.phases]
|
|
# El sandbox exporta CC="zig cc", DESTDIR=/out y PREFIX=/usr. musl trae su propio `configure`.
|
|
# Sólo estático: los componentes Rust se compilan crt-static + no-PIE (autocontenidos, ET_EXEC sin
|
|
# interpreter), así que el rootfs no necesita el loader/shared de musl. Ver runbooks §8.
|
|
configure = "./configure --prefix=/usr --disable-shared --enable-static"
|
|
compile = "make -j\"$(nproc)\""
|
|
install = "make install"
|