mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 02:56:43 +01:00
emscripten: revise compiler settings and add a pre-js file with audio autoplay workaround
This commit is contained in:
parent
f357d75591
commit
5fb99a97f8
4 changed files with 21 additions and 7 deletions
|
@ -193,19 +193,20 @@ if (NOT LIBSUPERDERPY_CONFIG_INCLUDED)
|
|||
if(EMSCRIPTEN)
|
||||
set(CMAKE_EXECUTABLE_SUFFIX ".bc")
|
||||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s SIDE_MODULE=1 -s EXPORT_ALL=1")
|
||||
set(EMSCRIPTEN_FLAGS -s FULL_ES2=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s EMTERPRETIFY_WHITELIST=[\"_libsuperderpy_emscripten_mainloop\",\"_libsuperderpy_mainloop\",\"_MainloopTick\",\"_GamestateLoadingThread\"] -s PRECISE_F32=1 -s EXPORT_ALL=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=[\"Pointer_stringify\"])
|
||||
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -s SIDE_MODULE=2 -s EXPORTED_FUNCTIONS=[\"_Gamestate_ProgressCount\",\"_Gamestate_Draw\",\"_Gamestate_Logic\",\"_Gamestate_Tick\",\"_Gamestate_Load\",\"_Gamestate_PostLoad\",\"_Gamestate_Start\",\"_Gamestate_Pause\",\"_Gamestate_Resume\",\"_Gamestate_Stop\",\"_Gamestate_Unload\",\"_Gamestate_ProcessEvent\",\"_Gamestate_Reload\"]")
|
||||
set(EMSCRIPTEN_FLAGS --llvm-lto 1 --use-preload-plugins --pre-js "${LIBSUPERDERPY_DIR}/src/emscripten-pre-js.js" -s FULL_ES2=1 -s STRICT=1 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s EMTERPRETIFY_WHITELIST=[\"_libsuperderpy_emscripten_mainloop\",\"_libsuperderpy_mainloop\",\"_MainloopTick\",\"_GamestateLoadingThread\"] -s EXPORT_ALL=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=[\"Pointer_stringify\"])
|
||||
|
||||
set(LIBSUPERDERPY_EMSCRIPTEN_MODE "asm.js" CACHE STRING "Emscripten compilation mode (JavaScript or WebAssembly)")
|
||||
set_property(CACHE LIBSUPERDERPY_EMSCRIPTEN_MODE PROPERTY STRINGS "asm.js;wasm")
|
||||
if("${LIBSUPERDERPY_EMSCRIPTEN_MODE}" STREQUAL "wasm")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -s WASM=1 -s BINARYEN_METHOD=native-wasm")
|
||||
set(EMSCRIPTEN_FLAGS ${EMSCRIPTEN_FLAGS} -s WASM=1 -s BINARYEN_METHOD=native-wasm)
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -s WASM=1")
|
||||
set(EMSCRIPTEN_FLAGS ${EMSCRIPTEN_FLAGS} -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy)
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".wasm")
|
||||
add_definitions(-DLIBSUPERDERPY_WASM=1)
|
||||
else()
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -s WASM=0")
|
||||
set(EMSCRIPTEN_FLAGS ${EMSCRIPTEN_FLAGS} -s WASM=0)
|
||||
set(EMSCRIPTEN_FLAGS ${EMSCRIPTEN_FLAGS} -s WASM=0 -s PRECISE_F32=1)
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".js")
|
||||
endif()
|
||||
|
||||
|
|
14
src/emscripten-pre-js.js
Normal file
14
src/emscripten-pre-js.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
var Module;
|
||||
if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
|
||||
// Disable image and audio decoding
|
||||
Module.noImageDecoding = true;
|
||||
Module.noAudioDecoding = true;
|
||||
|
||||
// autoplay workaround
|
||||
document.addEventListener("click", function() {
|
||||
try {
|
||||
if (!SDL2 || !SDL2.audioContext || !SDL2.audioContext.resume) return;
|
||||
SDL2.audioContext.resume();
|
||||
} catch (err) {}
|
||||
}
|
||||
);
|
|
@ -386,7 +386,6 @@ SYMBOL_EXPORT int libsuperderpy_start(struct Game* game) {
|
|||
SYMBOL_INTERNAL void libsuperderpy_emscripten_mainloop(void* game) {
|
||||
if (!libsuperderpy_mainloop(game)) {
|
||||
libsuperderpy_destroy(game);
|
||||
free(game);
|
||||
printf("Halted.\n");
|
||||
emscripten_cancel_main_loop();
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ struct GamestateResources;
|
|||
#elif defined(ALLEGRO_IPHONE)
|
||||
#include <allegro5/allegro_iphone.h>
|
||||
#elif defined(__EMSCRIPTEN__)
|
||||
#include <emscripten.h>
|
||||
#include <emscripten/emscripten.h>
|
||||
#endif
|
||||
|
||||
#include "character.h"
|
||||
|
|
Loading…
Reference in a new issue