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>
1.7 KiB
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/includedel 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 cces clang por debajo: algunos paquetes con gcc-ismos (extensiones GNU, flags específicos) oconfigurede autotools mal detectado fallarán. Por eso el compilador es por receta, no global: escotilla aclang/gcccuando 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
zigforma parte del hash de entrada del build (reproducibilidad).