gioser

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…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ main recipes/wasi-sdk.toml TOML · 61 líneas · 2.6 KB Historia crudo

wasi-libcxx: el eslabón que faltaba en la cadena wasm (lo encontró el build) 553fc1fb7 · Sergio ·

1# wasi-sdk — el fichero de configuración que le dice a clang dónde está el sysroot de wasm.
2#
3# Es la pieza más chica de la cadena y la que la vuelve INVISIBLE para quien la usa: sin esto,
4# firefox tendría que enterarse por un flag de cómo llegar al sysroot; con esto, `clang
5# --target=wasm32-wasip1` lo encuentra solo. El clang de Alpine lee `/etc/clang22/<triple>.cfg`
6# —el lab ya trae ahí su propio `x86_64-alpine-linux-musl.cfg`, así que el mecanismo está probado en
7# esta misma máquina— y overlayfs FUSIONA directorios, así que esta dep suma su fichero sin pisar el
8# del lab.
9#
10# NO TIENE FUENTE UPSTREAM porque el contenido es nuestro: una línea. Usa `[source] dir`, el modo
11# que se agregó para `atuq` (SDD 26 §2.ter). Es su segundo consumidor, y el primero fuera del caso
12# que lo motivó.
13#
14# ⚠ `/etc/clang22` lleva la versión del lab en la RUTA. No es una constante que se pueda olvidar: si
15# el lab sube de LLVM, esta ruta deja de existir y el sysroot se vuelve invisible en silencio — por
16# eso el guardián de abajo comprueba que el directorio del lab exista ANTES de escribir dentro.
17name    = "wasi-sdk"
18version = "27"
19license = "Apache-2.0"
20
21[source]
22dir = "wasi-sdk"
23
24[build]
25compiler = "clang"
26
27[deps]
28# Las TRES que declara el `wasi-sdk` de Alpine (`depends="wasi-libc wasi-libcxx
29# wasi-compiler-rt"`), verificado contra su APKBUILD el 2026-09-06. Acá `wasi-libcxx` no es
30# decorativa: sin ella el sysroot al que apunta el .cfg tiene la C y no la C++, y el guardián de
31# abajo —que sólo mira `libc.a`— lo daría por bueno.
32build = ["wasi-libc", "wasi-libcxx"]
33
34[build.phases]
35configure = "true"
36compile = "true"
37install = '''
38set -e
39
40# Si el lab cambió de versión de LLVM, esta ruta ya no es la que clang lee. Fallar acá es barato;
41# fallar dentro del build de firefox, cuatro horas después y con un error sobre un header de wasm
42# que no nombra a esta receta, no lo es.
43test -d /etc/clang22 || {
44  echo "!! el lab no tiene /etc/clang22: ¿subió de versión de LLVM?" >&2
45  ls -d /etc/clang* 2>/dev/null >&2
46  exit 1
47}
48
49mkdir -p /out/etc/clang22
50cp /src/wasm32-unknown-wasip1.cfg         /out/etc/clang22/
51cp /src/wasm32-unknown-wasip1-threads.cfg /out/etc/clang22/
52
53# GUARDIÁN: que el sysroot al que apunta el .cfg EXISTA. Un `--sysroot` que señala a la nada no da
54# error: clang sigue adelante y falla mucho después por headers que no encuentra.
55S=$(sed -n 's/^--sysroot //p' /out/etc/clang22/wasm32-unknown-wasip1.cfg)
56test -f "$S/lib/wasm32-wasip1/libc.a" || {
57  echo "!! el .cfg apunta a $S y ahí no hay libc.a de wasm32-wasip1" >&2
58  exit 1
59}
60echo "guardián: /etc/clang22 apunta a un sysroot wasm real ($S)"
61'''