diff --git a/recipes/linux.toml b/recipes/linux.toml index dffde96c..1f158442 100644 --- a/recipes/linux.toml +++ b/recipes/linux.toml @@ -7,10 +7,20 @@ # Criterio de éxito: el bzImage hammer-built bootea el builder de selfhost-verify y la corrida da # ✓ REPRODUCIBLE (KERNEL= ./scripts/selfhost-verify.sh). # -# Compilador: CC=gcc/HOSTCC=gcc (NO zig) — el kernel es el binario más grande del lab y zig 0.16 -# miscompila binarios grandes (lesson binutils/python/cmake/flex); el kernel se compila con la GNU -# toolchain estándar (gcc + binutils as/ld del toolchain). No es input del 4/4 (es el kernel que -# BOOTEA la VM, no algo que el 4/4 enlace), así que el compilador da igual mientras el kernel bootee. +# Compilador: CC=gcc/HOSTCC=gcc (NO zig) — DECISIÓN FORMAL (2026-06-19): el kernel se queda en el GUETO +# GCC (junto con cmake). gcc se retiene EXCLUSIVAMENTE como herramienta de bootstrap heredada para el +# kernel, por incompatibilidad de la CAPA DE TRADUCCIÓN DE FLAGS de `zig cc` con el kbuild de x86_64. +# Verdict tras experimento exhaustivo (recipes/linux-zig-test.toml, ya retirado): zig 0.13.0 SÍ compila +# todos los HOST-TOOLS del kernel (fixdep/kconfig/objtool) con un wrapper que traduce el depfile de +# kbuild `-Wp,-MMD,PATH` → `-MMD -MF PATH` (zig cc malinterpreta la forma cc1 de GCC; además el cache de +# zig debe ir DESHABILITADO o rompe el self-bootstrap de flex). PERO el compile del TARGET choca en +# cascada con la traducción de flags x86 de zig cc: `-mtune=generic` → "unknown target CPU 'generic'", +# `-march=x86-64` → "unknown CPU: 'x86'" (zig parte mal el `x86-64`), y aún faltarían el realmode 16-bit +# (`-march=i386`) e inline-asm/objtool. Es el "riesgo clang-build-Linux" del roadmap: open-ended y de +# payoff incierto, con el kernel YA reproducible-bit-a-bit y booteando bajo gcc. Un futuro intento limpio +# pasaría por exponer el clang/LLVM que zig empaqueta y construir con `make LLVM=1` (evita la capa de +# traducción de zig cc, la fuente real de los bugs). El resto del userland C SÍ es gcc-free vía zig 0.13. +# No es input del 4/4 (es el kernel que BOOTEA la VM, no algo que el 4/4 enlace). # # Config: defconfig x86_64 (base PC booteable en QEMU: 8250 serial, initrd, PCI) + ajustes monolíticos # - E1000/OVERLAY_FS/USER_NS =y (built-in): el builder usa e1000 (vendoring) + overlay (sandbox bwrap)