recipes: GNU make 4.4.1 — pieza 1 del toolchain hammer-from-source (variante b)
Arranca el auto-alojamiento *puro* (SDD 11 §7.2b): reemplazar una a una las piezas que el builder toma de Alpine (/toolchain) por recetas hammer desde fuente, con Stage 2 reverificando cada paso. make es la pieza base de toda receta autotools. Build estático musl con zig cc (mismo camino que grep: tarball release con configure → AutoconfReady), sellado b3:fbad44ac… y reproducible bit-a-bit (dos builds en stores distintos ⇒ árbol idéntico). Pendiente: swap al /toolchain del builder + Stage 2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
3 archivos · +38 −5
- docs/10-roadmap.md +8 −4
- docs/11-bootstrap.md +7 −1
- recipes/make.toml +23 −0
diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md
index b3ed5e00..5eff29a3 100644
--- a/docs/10-roadmap.md
+++ b/docs/10-roadmap.md
@@ -229,10 +229,14 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
Stage 0 → Stage 1 (booteado en QEMU, arje-zero como PID 1, `CRASHED` real) → **Stage 2
auto-alojamiento bit-a-bit confirmado** (`✓ REPRODUCIBLE`, host↔VM). Baseline reproducible
4/4: `of_tree(stage1)=b3:0039b2b9…` (cu=1).
-- ⏭️ **Siguiente:** (1) auto-alojamiento *puro* — que hammer construya el toolchain semilla
- desde fuente (no el zip de zig + Alpine como sustrato del builder), camino (b) de
- [SDD 11 §7](11-bootstrap.md); (2) ítems Stage 1 pendientes: bus único (B.2: exponer el
- `CRASHED` a la capa de IA) y atestación arje (A1/A2).
+- 🚧 **En curso — auto-alojamiento *puro* (variante b, [SDD 11 §7.2b](11-bootstrap.md)):** que
+ hammer construya el toolchain del builder desde fuente (no Alpine), reemplazando piezas una a una
+ con Stage 2 verificando cada paso. **Pieza 1 hecha:** GNU make `4.4.1` (`recipes/make.toml`) se
+ compila desde fuente con el lab — estática musl, sellada `b3:fbad44ac…`, reproducible bit-a-bit.
+ Pendiente: swap al `/toolchain` del builder + Stage 2 reverificando, y luego make/autotools →
+ linux-headers → bwrap → el gran tramo rust/llvm.
+- ⏭️ **También pendiente (Stage 1):** bus único (B.2: exponer el `CRASHED` a la capa de IA) y
+ atestación arje (A1/A2).
## Notas de entorno
- Desarrollo principal: laptop del autor.
diff --git a/docs/11-bootstrap.md b/docs/11-bootstrap.md
index 6917b688..9ee706e2 100644
--- a/docs/11-bootstrap.md
+++ b/docs/11-bootstrap.md
@@ -203,6 +203,11 @@ recetas, la **semilla** (`zig`, ya un artefacto sellado), `make`+autotools, `car
make/autotools, y el gran tramo: rust/llvm o un rustc bootstrappeado). Es el end-state; el más
caro (construir rust desde cero). Se llega **incrementalmente**, reemplazando una a una las piezas
Alpine por componentes hammer, con Stage 2 verificando cada paso.
+ - **Pieza 1 — GNU make `4.4.1`** (`recipes/make.toml`): arranque de (b). Build estático musl con
+ `zig cc` (mismo camino que `grep`: tarball release con `configure` → AutoconfReady), sellado en
+ `b3:fbad44ac…` y **reproducible bit-a-bit** (dos builds en stores distintos ⇒ árbol idéntico).
+ Es la herramienta base de toda receta autotools. Pendiente: swap al `/toolchain` del builder en
+ lugar del `make` de Alpine, con Stage 2 reverificando `of_tree(stage1')`.
### 7.3 Enganche con lo ya hecho
@@ -237,7 +242,8 @@ manifiesto (línea stage 2). Validado contra el store real (Stage 1 `73d7a9be…
no-interactivo; in-VM reconstruyó los 4/4 (arje-zero cu=1 en ~27 min) y `of_tree(stage1') =
b3:0039b2b9…` igualó la referencia ⇒ `✓ REPRODUCIBLE: stage1' == stage1`. Lo que queda es la
variante (b), el auto-alojamiento *puro* (toolchain construido por hammer desde fuente, §7.2).
-Ver [runbook §8](runbooks/stage1-vm-boot.md).
+**Arrancada:** la pieza 1, GNU make `4.4.1` (`recipes/make.toml`), ya se construye desde fuente
+con el lab — estática, reproducible bit-a-bit (§7.2b). Ver [runbook §8](runbooks/stage1-vm-boot.md).
## 8. Hecho cuando
diff --git a/recipes/make.toml b/recipes/make.toml
new file mode 100644
index 00000000..91dfc891
--- /dev/null
+++ b/recipes/make.toml
@@ -0,0 +1,23 @@
+# GNU make 4.4.1 — primera pieza del toolchain hammer-from-source (SDD 11 §7.2b).
+#
+# Arranca el reemplazo, una a una, de las herramientas que hoy el builder toma de Alpine
+# (`/toolchain`) por recetas hammer construidas desde fuente. `make` es la pieza base: todas las
+# demás recetas autotools (musl, busybox, el propio grep) la invocan en su fase de compile/install.
+#
+# Build estático con `zig cc` cross al target, mismo camino ya probado con `grep` 3.12: el tarball
+# release trae `configure` generado (AutoconfReady → ./configure && make && make install), así que no
+# hay `./bootstrap` ni gnulib por red. `--disable-nls` evita gettext; sin guile (opcional, ausente).
+# El sha256 del tarball es identificador inmutable, pinned igual de fuerte que un commit (ADR 0006).
+
+name = "make"
+version = "4.4.1"
+
+[source]
+tarball = "https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz"
+sha256 = "dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+flags = ["--disable-nls"]