5.7 KiB
5.7 KiB
Web Port (WASM) Build - Agent Handoff
Date: 2025-11-23 Status: BLOCKED - CMake configuration failing Priority: High - Web port is a key milestone for v0.4.0
Current State
The web port infrastructure exists but the CI build is failing during CMake configuration. The pthread detection issue was resolved, but new errors emerged.
What Works
- Web port source files exist (
src/web/shell.html,src/app/platform/file_dialog_web.cc) - CMake preset
wasm-releaseis defined inCMakePresets.json - GitHub Pages deployment workflow exists (
.github/workflows/web-build.yml) - GitHub Pages environment configured to allow
masterbranch deployment
What's Failing
The build fails at CMake Generate step with target_link_libraries errors:
CMake Error at src/app/gui/gui_library.cmake:83 (target_link_libraries)
CMake Error at src/cli/agent.cmake:150 (target_link_libraries)
CMake Error at src/cli/z3ed.cmake:30 (target_link_libraries)
These errors indicate that some targets are being linked that don't exist or aren't compatible with WASM builds.
Files to Investigate
Core Configuration
CMakePresets.json(lines 144-176) - wasm-release presetscripts/build-wasm.sh- Build script.github/workflows/web-build.yml- CI workflow
Problematic CMake Files
src/app/gui/gui_library.cmake:83- Check what's being linkedsrc/cli/agent.cmake:150- Agent CLI linking (should be disabled for WASM)src/cli/z3ed.cmake:30- z3ed CLI linking (should be disabled for WASM)
Web-Specific Source
src/web/shell.html- Emscripten HTML shellsrc/app/platform/file_dialog_web.cc- Browser file dialog implementationsrc/app/main.cc- Check for__EMSCRIPTEN__guards
Current WASM Preset Configuration
{
"name": "wasm-release",
"displayName": "Web Assembly Release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_CXX_STANDARD": "20",
"YAZE_BUILD_APP": "ON",
"YAZE_BUILD_LIB": "ON",
"YAZE_BUILD_EMU": "ON",
"YAZE_BUILD_CLI": "OFF", // CLI disabled but still causing errors
"YAZE_BUILD_TESTS": "OFF",
"YAZE_ENABLE_GRPC": "OFF",
"YAZE_ENABLE_JSON": "OFF",
"YAZE_ENABLE_AI": "OFF",
"YAZE_ENABLE_NFD": "OFF",
"YAZE_BUILD_AGENT_UI": "OFF",
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
"YAZE_ENABLE_AI_RUNTIME": "OFF",
"YAZE_ENABLE_HTTP_API": "OFF",
"YAZE_WITH_IMGUI": "ON",
"YAZE_WITH_SDL": "ON",
// Thread variables to bypass FindThreads
"CMAKE_THREAD_LIBS_INIT": "-pthread",
"CMAKE_HAVE_THREADS_LIBRARY": "TRUE",
"CMAKE_USE_PTHREADS_INIT": "TRUE",
"Threads_FOUND": "TRUE",
// Emscripten flags
"CMAKE_CXX_FLAGS": "-pthread -s USE_SDL=2 -s USE_FREETYPE=1 -s USE_PTHREADS=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_DISABLE_EXCEPTION_CATCHING --preload-file assets@/assets --shell-file src/web/shell.html",
"CMAKE_C_FLAGS": "-pthread -s USE_PTHREADS=1",
"CMAKE_EXE_LINKER_FLAGS": "-pthread -s USE_SDL=2 -s USE_FREETYPE=1 -s USE_PTHREADS=1 -s PTHREAD_POOL_SIZE=4 -s ALLOW_MEMORY_GROWTH=1 -s NO_DISABLE_EXCEPTION_CATCHING --preload-file assets@/assets --shell-file src/web/shell.html"
}
}
Known Issues Resolved
1. Pthread Detection (FIXED)
- Problem: CMake's FindThreads failed with Emscripten
- Solution: Pre-set thread variables in preset (
CMAKE_THREAD_LIBS_INIT, etc.)
2. GitHub Pages Permissions (FIXED)
- Problem: "Branch not allowed to deploy" error
- Solution: Added
masterto GitHub Pages environment allowed branches
Tasks for Next Agent
Priority 1: Fix CMake Target Linking
- Investigate why
gui_library.cmake,agent.cmake, andz3ed.cmakeare failing - These files may be including targets that require libraries not available in WASM
- Add proper guards:
if(NOT EMSCRIPTEN)around incompatible code
Priority 2: Verify WASM-Compatible Dependencies
Check each dependency for WASM compatibility:
- SDL2 - Should work (Emscripten has built-in port)
- ImGui - Should work
- Abseil - Needs pthread support (configured)
- FreeType - Should work (Emscripten has built-in port)
- NFD (Native File Dialog) - MUST be disabled for WASM
- yaml-cpp - May need to be disabled
- gRPC - MUST be disabled for WASM
Priority 3: Test Locally
# Install Emscripten SDK
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
# Build
cd /path/to/yaze
./scripts/build-wasm.sh
# Test locally
cd build-wasm/dist
python3 -m http.server 8080
# Open http://localhost:8080 in browser
Priority 4: Verify Web App Functionality
Once building, test these features:
- App loads without console errors
- ROM file can be loaded via browser file picker
- Graphics render correctly
- Basic editing operations work
- ROM can be saved (download)
CI Workflow Notes
The web-build workflow (.github/workflows/web-build.yml):
- Triggers on push to
master/mainonly (notdevelop) - Uses Emscripten SDK 3.1.51
- Builds both WASM app and Doxygen docs
- Deploys to GitHub Pages
Recent CI Run Logs
Check run 19616904635 for full logs:
gh run view 19616904635 --log
References
Contact
For questions about the web port architecture, see:
docs/internal/plans/web_port_strategy.md- Commit
7e35eceef0- "feat(web): implement initial web port (milestones 0-4)"