Files
fn_registry/bash/functions/infra/build_wasm_cpp_app.md
T
egutierrez a27dcc028c docs(capabilities): unifica tag gamedev en gamedev-2d + separa gamedev-engine
El doctor reportaba el dominio gamedev en doble FAIL: el tag plano `gamedev`
(44 funciones) como `ungrouped_candidate` y la pagina `gamedev-2d.md` como
`doc_orphan`. Causa raiz: el INDEX declaraba `[gamedev](gamedev-2d.md)` y el
auditor solo registra el slug cuando label==target, asi que ni casaba la
pagina ni declaraba el tag.

Al revisar las 44 funciones habia dos clusters reales bajo el mismo tag, asi
que se separan en dos grupos honestos:

- gamedev-2d (tag canonico): 31 builders de workflow ComfyUI + 5 de apoyo
  (post-proceso + puente a Godot) = 36. Se elimina el tag plano `gamedev` de
  los builders (ya tenian `gamedev-2d`) y se reemplaza por `gamedev-2d` en las
  de apoyo.
- gamedev-engine (grupo nuevo, pagina madre nueva): runtime de juego C++
  multiplataforma (SDL3 + sokol_gfx + miniaudio, Issue 0072b) = 8. Game loop,
  camara 2D, input unificado, sprite batch, setup render/audio, build wasm.

El tag plano `gamedev` queda eliminado (count 0). INDEX corregido: fila
gamedev-2d con label==target y conteo 36 + fila nueva gamedev-engine (8).

Verificacion: `fn index` + `fn doctor capabilities` -> ambos grupos OK
(declared_in_index=yes, doc_exists=yes, sin issues); `gamedev` plano = 0.
Solo se modifico el campo `tags` de los .md, ningun archivo de codigo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 02:40:50 +02:00

2.6 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, example, tested, tests, test_file_path, file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports example tested tests test_file_path file_path params output
build_wasm_cpp_app function bash infra 0.1.0 impure build_wasm_cpp_app(app_name: string, [--no-budget-check]) -> void Compila una app C++ del registry (cpp/apps/<name>) a WASM via emscripten. Sale build/wasm/<name>/<name>.{html,js,wasm,wasm.gz}. Falla si gzip > 2 MB.
wasm
emscripten
cpp
build
gamedev-engine
pendiente-usar
false error_go_core
bash bash/functions/infra/build_wasm_cpp_app.sh engine_smoke false
bash/functions/infra/build_wasm_cpp_app.sh
name desc
app_name Nombre del directorio bajo cpp/apps/. Debe contener CMakeLists.txt self-sufficient (top-level project) con guard `if(EMSCRIPTEN)` para flags wasm.
name desc
--no-budget-check Opcional. Salta verificacion de tamaño (gzip < 2 MB hard, < 1.5 MB soft).
Reporte de tamaños en stdout. Crea build/wasm/<app>/<app>.html/.js/.wasm/.wasm.gz. Exit 3 si excede budget hard.

build_wasm_cpp_app

Compila apps C++ del registry a WebAssembly. Issue 0072d (parte del stack gamedev).

Requisitos

  • emsdk instalado y activo en el shell, o presente en <repo>/emsdk/ (autoactiva).
  • cpp/apps/<app>/CMakeLists.txt con bloque if(EMSCRIPTEN) ... endif() que define los flags wasm (USE_WEBGL2, FULL_ES3, ALLOW_MEMORY_GROWTH, etc.).
  • cpp/CMakeLists.txt debe seguir tolerando configuracion via emcmake. La app target se elige con cmake --build $BUILD_DIR --target <app>.

Flujo

  1. Localiza emcc en PATH o autoactiva <repo>/emsdk/emsdk_env.sh.
  2. emcmake cmake -S cpp -B build/wasm/<app> -DCMAKE_BUILD_TYPE=MinSizeRel
  3. cmake --build build/wasm/<app> --target <app> -j
  4. gzip -9 -k <app>.wasm y brotli -q 11 -k <app>.wasm (si brotli disponible).
  5. Reporta tamaños y compara contra budget (1.5 MB gzip soft, 2 MB hard).

Budgets

Limite Valor Comportamiento
Soft 1.5 MB gzip Warning, sigue
Hard 2 MB gzip Exit 3, falla

Skip con --no-budget-check.

Apps soportadas

Cualquier app bajo cpp/apps/<name>/ cuyo CMakeLists.txt defina target con flags emscripten. Probada con: engine_smoke (issue 0072a).

Errores comunes

  • emcc no encontrado → instalar emsdk segun instrucciones del propio script.
  • <app>.wasm no encontrado → fallo de build. Re-ejecutar con 2>&1 | tee para ver compiler errors.
  • wasm.gz excede budget → revisar bloat, usar twiggy top o wasm-objdump -h. Ver issue 0072d.