La granja revelo una clase entera de fallos Rust: crates con dep-C cuyo build-script (cc-rs) compila C con zig-cc, que lo RECHAZA/miscompila (delta=libgit2-sys, gitui=openssl-sys, jless=libc-stdhandle). Mismo frente que file/jq en C puro -> misma solucion: el GUETO gcc. FIX (hammer-build/lib.rs, camino Cargo nativo): cuando la receta declara compiler="gcc", cc-rs usa CC=gcc (el Alpine musl gcc del sandbox, probado en C) para compilar el C de las deps; el LINKER sigue siendo el wrapper zig-cc. Los .o/.a de gcc-musl y el Rust zig-musl son ABI-compatibles (ambos musl, mismo ELF x86-64). ADITIVO: una receta Rust sin compiler= queda en ZigCc -> baseline (ripgrep/fd/...) intacto. 2 tests nuevos. PROBADO END-TO-END: delta 0.19.2 construye+corre ELF estatico (libgit2-sys vendorea y compila libgit2 desde decenas de .c con gcc; + dep zlib para -lz que libgit2/libz-sys enlazan). Publicado al repo firmado (83 paquetes). Corpus 82->83. LEVERAGE: libgit2-sys/openssl-sys/onig_sys/libc-stdhandle aparecen en CIENTOS de crates -> el gueto gcc (+ resolver libs externas via deps.build) destraba esa clase entera, no solo delta. jless queda staged (su feature de clipboard pide libxcb/X11, fuera de alcance, NO toolchain). gitui (openssl-src vendoreado) deberia construir con el mismo patron (compiler=gcc), pendiente de correr.
30 lines
1.2 KiB
TOML
30 lines
1.2 KiB
TOML
# Importada de nixpkgs por `hammer import-nix` (Etapa G). PUNTO DE PARTIDA, no final:
|
|
# - el build usa el lab de hammer (zig-cc / musl estático), NO el stdenv de nix ⇒ revisá
|
|
# compiler/link/phases y adaptá hasta que compile.
|
|
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
|
|
name = "delta"
|
|
version = "0.19.2"
|
|
|
|
[source]
|
|
repo = "https://github.com/dandavison/delta"
|
|
commit = "1502986e81c8e3fa27bfb5b84bac6b281a6b1edd"
|
|
|
|
# GUETO gcc para los build-scripts: delta trae `libgit2-sys`, que vendorea y COMPILA libgit2 desde
|
|
# C (decenas de .c). zig-cc los rechaza (la granja lo reveló: ToolExecError en apply.c/attr_file.c/…).
|
|
# `compiler="gcc"` ⇒ cc-rs compila ese C con el Alpine musl gcc (probado en C); el linker sigue zig-cc.
|
|
[build]
|
|
compiler = "gcc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = ["--bin", "delta"]
|
|
|
|
[build.phases]
|
|
install = "mkdir -p /out/usr/bin && cp target/release/delta /out/usr/bin/delta"
|
|
|
|
# libgit2-sys y libz-sys enlazan `-lz`; el lab materializa zlib (libz.a en /usr/lib) como capa overlay.
|
|
[deps]
|
|
build = ["zlib"]
|
|
|
|
# buildInputs de nix (NO deps de hammer — cargo vendorea; backend Rust por
|
|
# defecto). Si algún sys-crate C falla, adaptá per-paquete (patch/feature): git, oniguruma
|