Files
hammer/docs/adr/0003-zig-cc-builder.md
T
sergioandClaude Opus 4.8 8bf1623044 Scaffold inicial: workspace Rust + SDDs completos
Arranque del proyecto hammer (distro AI-nativa: laboratorio funcional en el
sótano, terminal mutable clásica arriba, integración de IA programadora).

- Workspace Rust (compila, tests verdes): hammer-core, hammer-build,
  hammer-cli (bin `hammer`), hammerd.
- SDDs 00-10 + 6 ADRs en docs/ con toda la arquitectura.
- Esqueletos navegables mapeados a las fases del roadmap; Fase 0/1 listas
  para implementar el sandbox real.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 19:06:04 +00:00

1.7 KiB

ADR 0003 — zig cc como compilador por defecto del laboratorio

  • Estado: aceptada
  • Fecha: 2026-06-06

Contexto

El lab compila C/C++ upstream de forma hermética hacia un target musl, idealmente estático, y debe evitar contaminación del host. La opción clásica es construir un cross-toolchain (Stage 0) a mano: largo y frágil.

Decisión

Usar zig cc como compilador por defecto del lab, con el compilador configurable por receta (escotilla a clang/gcc). Esto es ortogonal al lenguaje del tooling, que es Rust (ADR 0001): Rust orquesta, zig cc aprieta el tornillo.

Razones

  • Mata el bootstrap: un solo binario (~45 MB) provee compilador C/C++ + musl + headers, para múltiples arquitecturas. Resuelve gran parte del Stage 0/1.
  • Hermético por defecto: trae sus propios headers de libc, no chupa /usr/include del host. Justo nuestro requisito de no-contaminación.
  • Cross-compile trivial: -target x86_64-linux-musl, aarch64, etc. Clave para el track de distro propia y otras arquitecturas.
  • Determinista: ayuda directamente al hashing CAS y a la reproducibilidad (SDD 09).

Consecuencias / riesgos

  • zig cc es clang por debajo: algunos paquetes con gcc-ismos (extensiones GNU, flags específicos) o configure de autotools mal detectado fallarán. Por eso el compilador es por receta, no global: escotilla a clang/gcc cuando haga falta.
  • No todo upstream compila limpio con clang/musl independientemente del compilador; es fricción inherente a musl/static, no de zig.
  • La versión de zig forma parte del hash de entrada del build (reproducibilidad).