SDL: emscripten: Add JS library dependencies using EM_JS_DEPS macro (b42cb)

From b42cb1c6f2e4af13288615624c0bb65a57289f0b Mon Sep 17 00:00:00 2001
From: Sam Clegg <[EMAIL REDACTED]>
Date: Wed, 5 Jul 2023 13:52:37 -0700
Subject: [PATCH] emscripten: Add JS library dependencies using EM_JS_DEPS
 macro

See https://github.com/emscripten-core/emscripten/pull/19780

(cherry picked from commit 042243471fb7ecf6ba5e53f0ba35e825a8bb066a)
---
 .github/workflows/emscripten.yml           | 2 +-
 docs/README-emscripten.md                  | 2 +-
 src/audio/emscripten/SDL_emscriptenaudio.c | 3 +++
 src/misc/emscripten/SDL_sysurl.c           | 8 +++-----
 src/video/emscripten/SDL_emscriptenmouse.c | 2 ++
 5 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml
index ba94be10cead..66b744d38a16 100644
--- a/.github/workflows/emscripten.yml
+++ b/.github/workflows/emscripten.yml
@@ -13,7 +13,7 @@ jobs:
       - uses: actions/checkout@v3
       - uses: mymindstorm/setup-emsdk@v10
         with:
-          version: 2.0.32
+          version: 3.1.35
       - name: Install ninja
         run: |
           sudo apt-get -y update
diff --git a/docs/README-emscripten.md b/docs/README-emscripten.md
index 8fa7ca63437c..5c56984e6d43 100644
--- a/docs/README-emscripten.md
+++ b/docs/README-emscripten.md
@@ -38,7 +38,7 @@ for some Javascript code to steal for this approach.
 
 ## Building SDL/emscripten
 
-SDL currently requires at least Emscripten 2.0.32 to build. Newer versions
+SDL currently requires at least Emscripten 3.1.35 to build. Newer versions
 are likely to work, as well.
 
 
diff --git a/src/audio/emscripten/SDL_emscriptenaudio.c b/src/audio/emscripten/SDL_emscriptenaudio.c
index d64ca71fbd81..cdb4308f4cf7 100644
--- a/src/audio/emscripten/SDL_emscriptenaudio.c
+++ b/src/audio/emscripten/SDL_emscriptenaudio.c
@@ -196,6 +196,9 @@ static void EMSCRIPTENAUDIO_CloseDevice(SDL_AudioDevice *_this)
 #endif
 }
 
+
+EM_JS_DEPS(sdlaudio, "$autoResumeAudioContext,$dynCall");
+
 static int EMSCRIPTENAUDIO_OpenDevice(SDL_AudioDevice *_this, const char *devname)
 {
     SDL_AudioFormat test_format;
diff --git a/src/misc/emscripten/SDL_sysurl.c b/src/misc/emscripten/SDL_sysurl.c
index 93a78b2abdd1..8926a929cfcf 100644
--- a/src/misc/emscripten/SDL_sysurl.c
+++ b/src/misc/emscripten/SDL_sysurl.c
@@ -24,12 +24,10 @@
 
 #include <emscripten/emscripten.h>
 
+EM_JS_DEPS(sdlsysurl, "$UTF8ToString");
+
 int SDL_SYS_OpenURL(const char *url)
 {
-    EM_ASM({
-        window.open(UTF8ToString($0), "_blank");
-    },
-           url);
-
+    EM_ASM(window.open(UTF8ToString($0), "_blank"), url);
     return 0;
 }
diff --git a/src/video/emscripten/SDL_emscriptenmouse.c b/src/video/emscripten/SDL_emscriptenmouse.c
index 7c3be34095ff..0cc3ec41c111 100644
--- a/src/video/emscripten/SDL_emscriptenmouse.c
+++ b/src/video/emscripten/SDL_emscriptenmouse.c
@@ -60,6 +60,8 @@ static SDL_Cursor *Emscripten_CreateDefaultCursor()
     return Emscripten_CreateCursorFromString("default", SDL_FALSE);
 }
 
+EM_JS_DEPS(sdlmouse, "$stringToUTF8,$UTF8ToString");
+
 static SDL_Cursor *Emscripten_CreateCursor(SDL_Surface *surface, int hot_x, int hot_y)
 {
     const char *cursor_url = NULL;