--- description: "Compila app del registry (C++ o Wails Go), copia el .exe a Desktop/apps// y relanza en Windows. Wrapper sobre compile_cpp_app o compile_wails_app segun framework declarado en app.md." --- # /compile — Compila app C++ o Wails y la copia al escritorio de Windows Wrapper sobre 2 pipelines del registry segun el framework: - **C++ (imgui / cmake)** → `compile_cpp_app_bash_pipelines`. Cross-compile MinGW + assets/enrichers/runtime + taskkill, NO relanza. - **Wails Go (matrix_client_pc, matrix_admin_panel, etc.)** → `compile_wails_app_bash_pipelines`. `wails build -platform windows/amd64` con `-tags goolm` si E2EE + taskkill + **RELANZA** la app tras copy. Toda la logica vive en el registry (resolver app desde CWD/arg, build, deploy con preservacion de `local_files/`). ## Dispatch ```bash cd $HOME/fn_registry # Detecta framework via wails.json o CMakeLists.txt en el dir del app APP="$ARGUMENTS" RESOLVED=$(bash -c ' source bash/functions/infra/resolve_cpp_app_dir.sh resolve_cpp_app_dir "'"$APP"'" ' 2>/dev/null) || true APP_DIR="$(echo "$RESOLVED" | cut -f2)" if [ -n "$APP_DIR" ] && [ -f "$APP_DIR/wails.json" ]; then ./fn run compile_wails_app "$ARGUMENTS" elif [ -n "$APP_DIR" ] && [ -f "$APP_DIR/CMakeLists.txt" ]; then ./fn run compile_cpp_app "$ARGUMENTS" else echo "ERROR: no se detecto framework (falta wails.json o CMakeLists.txt en $APP_DIR)" >&2 exit 1 fi ``` ## Argumento `$ARGUMENTS` — opcional. Nombre de app (ej: `chart_demo`, `matrix_client_pc`). - Sin argumento: deduce desde `pwd` si estas dentro de `cpp/apps//`, `apps//` o `projects/*/apps//`. - Si no se puede deducir y no se pasa argumento, lista las apps disponibles en stderr y aborta. ## Que hace el pipeline (C++) 1. `resolve_cpp_app_dir_bash_infra` — resuelve `` y ``. 2. Verifica `CMakeLists.txt`. 3. `build_cpp_windows_bash_infra ` — cross-compila con MinGW. 4. `deploy_cpp_exe_to_windows_bash_infra `: - `taskkill.exe /IM .exe /F`. - Copia `.exe` + DLLs. - rsync `assets/`, `enrichers/`, `runtime/` (si aplica). - Preserva `local_files/`. - **NO** relanza. ## Que hace el pipeline (Wails) 1. `resolve_cpp_app_dir_bash_infra` (reusado — sirve para Wails apps tambien). 2. Verifica `wails.json` + `go.mod`. 3. Detecta `-tags goolm` automaticamente (grep `matrix_crypto_init` en `app.md` o `build:tags` en `wails.json`). 4. `wails build -platform windows/amd64 [-tags goolm]`. 5. `deploy_wails_exe_to_windows_bash_infra `: - `taskkill.exe /IM .exe /F`. - Copia `.exe` (+ `appicon.ico` si existe). - **Relanza** via `cmd.exe /c start "" .exe`. - Preserva `local_files/`. ## Notas - Solo target Windows hoy. Linux ya lo da `wails build` / `cpp/build/` nativo. - Variables override-ables: `BUILD_WIN`, `WIN_DESKTOP_APPS`, `FN_REGISTRY_ROOT`. - Si la app C++ no esta registrada en `cpp/CMakeLists.txt`, el build falla — registrar siguiendo `.claude/rules/cpp_apps.md` §5. - Si la app Wails falla build con `no required module provides package`, correr `go mod tidy` en el dir del app primero. - Para tocar la logica: editar `bash/functions/{infra,pipelines}/{resolve_cpp_app_dir,build_cpp_windows,deploy_{cpp,wails}_exe_to_windows,compile_{cpp,wails}_app}.sh`, no este wrapper.