sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
SDD 25 H7: BTF cuesta +14,97% de bzImage — medido construyendo, no estimado
1# ── RECETA DE MEDICIÓN, NO DE CATÁLOGO ────────────────────────────────────────────────────────
2# Copia de `recipes/linux-generic.toml` cuyo ÚNICO propósito es ponerle número a SDD 25 §7-H7: qué
3# cuesta en bytes de bzImage encender `DEBUG_INFO_BTF`. Vive en `work/` —fuera de `recipes/`— para
4# no entrar al grafo compartido como deuda, y el catálogo se le presta por symlinks en el mismo
5# directorio (`hammer build` no tiene `--base-dir`; sólo el fallback al catálogo padre).
6#
7# POR QUÉ SOBRE linux-generic Y NO SOBRE linux (que es más barato de construir): BTF tiene
8# `depends on BPF_SYSCALL`, y el `.config` sellado de `linux` lo trae APAGADO. Medir ahí obligaría a
9# encender BPF_SYSCALL a la vez, y el delta mezclaría dos cosas. `linux-generic` ya lo trae ⇒ la
10# única diferencia con el artefacto sellado son las líneas de DWARF/BTF, y el delta es limpio.
11#
12# BASELINE contra el que se compara: el bzImage del `linux-generic` VIGENTE, 16 937 984 bytes
13# (store/23f1cc43…-linux-generic/boot/bzImage), que es el mismo número que cita §7-H1.
14#
15# `-j2` en vez de `$(nproc)`: con `-g` cada gcc pesa más y momento tiene ~4 G disponibles. El
16# paralelismo NO cambia los bytes del bzImage, que es lo único que se mide acá; capar `-j` en una
17# receta de catálogo sería otra cosa (re-hashea), pero esta receta no es de catálogo.
18
19name = "linux-generic-btf"
20version = "7.1.2"
21license = "GPL-2.0-only WITH Linux-syscall-note"
22
23[source]
24tarball = "https://mirrors.edge.kernel.org/pub/linux/kernel/v7.x/linux-7.1.2.tar.gz"
25sha256 = "b43e0a2db2a89fc5a88f54417ea13a3f05fbb17fdaf53015ce16525750a2db83"
26
27[build]
28compiler = "zig-cc"
29target = "x86_64-linux-musl"
30link = "dynamic"
31
32[deps]
33# `python3`: DESCUBIERTO construyendo (2026-08-31). Encender BTF hace que kbuild descienda a
34# `tools/bpf/resolve_btfids`, que compila un libbpf VENDORIZADO, y su Makefile genera
35# `bpf_helper_defs.h` con un script de Python ⇒ `env: 'python3': No such file or directory`,
36# Error 127. No sale en ninguna documentación de BTF: sale construyendo.
37build = ["flex", "bison", "m4", "openssl", "elfutils", "make", "dwarves", "python3"]
38
39# SDD 25 §7-H1: `-e MEMCG -e PSI`. Sin MEMCG el fichero `memory.max` NO EXISTE y
40# `arje-incarnate::cgroup` sólo emite un `warn!` ⇒ la Card corre SIN tope de memoria. Va en la
41# fase configure porque el .config ES la identidad del artefacto (SDD 22 §1): esto re-hashea el
42# kernel a propósito. Comprobable con `hammer kernel contract` sobre el config YA PRODUCIDO.
43[build.phases]
44configure = """
45make ARCH=x86_64 defconfig && \
46scripts/config -d MODULE_SIG -d MODULE_SIG_ALL -d MODULES \
47 -e DEBUG_KERNEL -e DEBUG_INFO_DWARF5 -d DEBUG_INFO_REDUCED -d DEBUG_INFO_SPLIT \
48 -e DEBUG_INFO_BTF \
49 -d UNWINDER_ORC -e UNWINDER_FRAME_POINTER \
50 -e BLK_DEV_INITRD -e DEVTMPFS -e DEVTMPFS_MOUNT -e TMPFS \
51 -e OVERLAY_FS -e USER_NS -e NAMESPACES \
52 -e FANOTIFY -e FANOTIFY_ACCESS_PERMISSIONS \
53 -e OVERLAY_FS_REDIRECT_DIR -e OVERLAY_FS_INDEX -e OVERLAY_FS_XINO_AUTO -e OVERLAY_FS_METACOPY \
54 -e SECURITY -e SECURITY_LANDLOCK -e AUDIT -e IO_URING -e BPF_SYSCALL \
55 -e MEMCG -e PSI -d PSI_DEFAULT_DISABLED \
56 -e VIRTIO -e VIRTIO_PCI -e VIRTIO_BLK -e VIRTIO_NET -e DRM_VIRTIO_GPU \
57 -e PCI -e PCIEPORTBUS -e ACPI -e FW_LOADER \
58 -e EXT4_FS -e SQUASHFS -e SQUASHFS_XZ -e SQUASHFS_ZSTD -e SQUASHFS_LZ4 \
59 -e SATA_AHCI -e ATA -e ATA_PIIX -e SCSI -e BLK_DEV_SD -e BLK_DEV_SR -e BLK_DEV_LOOP \
60 -e NVME_CORE -e BLK_DEV_NVME \
61 -e MMC -e MMC_BLOCK -e MMC_SDHCI -e MMC_SDHCI_PCI -e MMC_SDHCI_ACPI \
62 -e USB_SUPPORT -e USB -e USB_PCI -e USB_XHCI_HCD -e USB_XHCI_PCI \
63 -e USB_EHCI_HCD -e USB_EHCI_PCI -e USB_OHCI_HCD -e USB_UHCI_HCD -e USB_STORAGE \
64 -e HID -e HID_GENERIC -e USB_HID -e HID_MULTITOUCH -e INPUT_EVDEV \
65 -e INPUT_KEYBOARD -e KEYBOARD_ATKBD -e INPUT_MOUSE -e MOUSE_PS2 -e INPUT_TOUCHPAD \
66 -e SERIO -e SERIO_I8042 -e VT -e VT_CONSOLE \
67 -e DRM -e DRM_SIMPLEDRM -e SYSFB_SIMPLEFB -e FB -e FB_EFI -e FB_VESA \
68 -e DRM_I915 -e DRM_RADEON -e DRM_NOUVEAU -d DRM_AMDGPU -d DRM_AMD_DC -d HSA_AMD \
69 -e DRM_FBDEV_EMULATION -e FRAMEBUFFER_CONSOLE -e FRAMEBUFFER_CONSOLE_DETECT_PRIMARY \
70 -e EFI -e EFI_STUB -e EFI_PARTITION -e EFIVAR_FS -e CMDLINE_BOOL \
71 -e VFAT_FS -e FAT_FS -e MSDOS_FS -e NLS_CODEPAGE_437 -e NLS_ISO8859_1 -e NLS_UTF8 \
72 -e ISO9660_FS -e JOLIET -e DEVTMPFS \
73 -e WLAN -e WIRELESS -e CFG80211 -e MAC80211 -e RFKILL \
74 -e WLAN_VENDOR_INTEL -e IWLWIFI -e IWLMVM -e IWLDVM \
75 -e ETHERNET -e NET_VENDOR_INTEL -e E1000 -e E1000E -e IGB -e IGC \
76 -e NET_VENDOR_REALTEK -e R8169 -e NET_VENDOR_BROADCOM -e TG3 \
77 -e USB_NET_DRIVERS -e USB_USBNET -e USB_NET_CDCETHER -e USB_NET_CDC_NCM -e USB_NET_RNDIS_HOST \
78 -d SOUND -d SND -d MEDIA_SUPPORT -d INFINIBAND -d BT -d NFC -d CAN \
79 -d WATCHDOG -d USB4 -d FIREWIRE -d DEBUG_WX \
80 -d XFS_FS -d BTRFS_FS -d F2FS_FS -d JFS_FS -d GFS2_FS -d NTFS3_FS && \
81scripts/config --set-str CMDLINE "console=tty0 console=ttyS0,115200 ignore_loglevel" && \
82make ARCH=x86_64 olddefconfig && \
83pahole --version && \
84{ grep -q '^CONFIG_DEBUG_INFO_BTF=y' .config || { echo "FATAL: DEBUG_INFO_BTF no quedo en el .config PRODUCIDO — pahole ausente durante configure?"; grep -E 'BTF|PAHOLE|DEBUG_INFO' .config; exit 1; }; } && \
85echo "OK: CONFIG_DEBUG_INFO_BTF=y en el .config producido"
86"""
87# amdgpu (AMD moderno) NO compila en 7.1 con el gcc del gueto (ICE sin mensaje en amdgpu_userq_fence.c)
88# y syncconfig lo re-activaba pese a -d en kconfig (default-y de DRM_AMD_DC + un select que no aparece).
89# SLEDGEHAMMER GARANTIZADO: borro las líneas `obj-$(CONFIG_DRM_AMDGPU)+= amd/...` del Makefile del drm
90# ⇒ amd/{amdgpu,amdxcp,display} nunca se descienden, sin importar kconfig. amdgpu es self-contained
91# (nada del core lo referencia) ⇒ excluirlo es seguro. radeon (AMD viejo) + i915 + nouveau quedan.
92compile = "sed -i '/CONFIG_DRM_AMDGPU)+= amd/d' drivers/gpu/drm/Makefile && make ARCH=x86_64 CC=gcc HOSTCC=gcc -j2 bzImage"
93install = """
94mkdir -p /out/boot /out/medicion && \
95cp arch/x86/boot/bzImage /out/boot/bzImage && \
96cp .config /out/boot/config-7.1.2-generic-btf && \
97stat -c 'vmlinux %s bytes' vmlinux > /out/medicion/tamanos.txt && \
98stat -c 'bzImage %s bytes' arch/x86/boot/bzImage >> /out/medicion/tamanos.txt && \
99{ readelf -SW vmlinux | grep -E 'BTF|debug_info' >> /out/medicion/tamanos.txt || echo '(readelf no disponible)' >> /out/medicion/tamanos.txt; } && \
100{ objcopy --dump-section .BTF=/out/medicion/vmlinux.BTF vmlinux && stat -c '.BTF %s bytes' /out/medicion/vmlinux.BTF >> /out/medicion/tamanos.txt; } || echo '(objcopy fallo)' >> /out/medicion/tamanos.txt
101"""