docs(linux): veredicto formal — kernel al gueto gcc (zig-cc x86 kbuild)
zig 0.13 compila los host-tools del kernel (wrapper que traduce el depfile
-Wp,-MMD,PATH → -MMD -MF PATH; cache de zig deshabilitado), pero el target
choca con la traducción de flags x86 de zig cc (-mtune=generic, -march=x86-64).
gcc se retiene SOLO para {kernel, cmake}; el resto del userland C es gcc-free
vía zig 0.13. Futuro intento limpio: make LLVM=1 con el clang que zig empaqueta.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+14
-4
@@ -7,10 +7,20 @@
|
||||
# Criterio de éxito: el bzImage hammer-built bootea el builder de selfhost-verify y la corrida da
|
||||
# ✓ REPRODUCIBLE (KERNEL=<este bzImage> ./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)
|
||||
|
||||
Reference in New Issue
Block a user