Flycast WASM integration, GPL-2.0-or-later. No game data or console firmware.
Sources: flyinghead/flycast 2c48c018 (patched nasomers/flycast-wasm v1.0) and EmulatorJS/RetroArch master 1207677. Emscripten 4.0.20, CMake 4.x.
Extract modified-sources.tar.gz in this directory. Sources contain local fixes already.
Activate Emscripten 4.0.20, then:
emcmake cmake -S source -B source/build-wasm-prod -DLIBRETRO=ON -DUSE_GLES=ON -DUSE_HOST_LIBZIP=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-DJIT_PROD_BUILD=1 -DFLY_RELEASE_BUILD=1" -DCMAKE_CXX_FLAGS="-DJIT_PROD_BUILD=1 -DFLY_RELEASE_BUILD=1"
cmake --build source/build-wasm-prod -j2
In EJS-RetroArch add a temporary target to Makefile.emscripten:
.PHONY: objects-only
objects-only: $(RARCH_OBJ)
Then: emmake make -f Makefile.emscripten HAVE_STATIC_DUMMY=1 LIBRETRO=dummy HAVE_OPENGLES3=1 objects-only -j2
The Emscripten EGL context in this source requests OpenGL ES3, which WebGL2 requires.
Compile the three standalone helpers:
emcc -O3 -I EJS-RetroArch/libretro-common/include -c build/flycast_stubs.c -o build/flycast_stubs-source.o
emcc -O3 -I EJS-RetroArch/libretro-common/include -I EJS-RetroArch -c build/video_dimensions.c -o build/video_dimensions.o
emcc -O3 -I EJS-RetroArch/libretro-common/include -I EJS-RetroArch -c EJS-RetroArch/cores/dynamic_dummy.c -o build/retroarch-dummy.o
The last helper must NOT define HAVE_STATIC_DUMMY. The archive's original object has duplicate retro_* symbols.
Run bash build/link.sh. Output is in out/. It includes all required zip/elf/UPnP libraries and rejects missing functions. Keep library_errno_codes.js. HEAPU8/HEAP16/HEAPU32 are explicit exports used by the JIT and AudioWorklet. The JS GL extension-string helper uses getSupportedExtensions instead of unsupported getParameter(GL_EXTENSIONS).
Package flycast_libretro.js, flycast_libretro.wasm and build.json using 7z into flycast.data for EmulatorJS4.2.3. Core metadata is core.json. All binary/dependency licenses are retained within the modified source archive.
