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