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

37 lines
1.7 KiB
Markdown

# 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](0001-rust-for-tooling.md)): 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](../09-trust-model.md)).
## 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).