Clean up emscripten build

* Don't use an external premake extension for emscripten; just set up the environment ourselves to build with emscripten.

* Delete the spots that turned on the '-pthread' flag for emscripten.

* Get the WebGL and WebGPU builds compiling again and add a github workflow for them.

* Delete the bubbles example. It didn't compile on android or wasm and caused confusion. It's in the git history if we want it back.

Diffs=
ac0d97c12 Clean up emscripten build (#6531)

Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
diff --git a/.rive_head b/.rive_head
index 71b8716..55fcd07 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-acdaee21fea7a690e2db6d01b8a6d2cd150f1db7
+ac0d97c1243ea3c2e473a319f4eb100fed52e1d5
diff --git a/build/rive_build_config.lua b/build/rive_build_config.lua
index 296a235..713af55 100644
--- a/build/rive_build_config.lua
+++ b/build/rive_build_config.lua
@@ -362,13 +362,28 @@
 end
 
 if _OPTIONS['arch'] == 'wasm' or _OPTIONS['arch'] == 'js' then
-    -- Target emscripten via https://github.com/TurkeyMan/premake-emscripten.git
-    -- Premake doesn't properly load the _preload.lua for this module, so we load it here manually.
-    -- BUG: https://github.com/premake/premake-core/issues/1235
-    require('premake-emscripten/_preload')
-    require('premake-emscripten/emscripten')
+    -- make a new system called "emscripten" so we don't try including host-os-specific files in the
+    -- web build.
+    premake.api.addAllowed('system', 'emscripten')
+
+    -- clone the clang toolset into a custom one called "emsdk".
+    premake.tools.emsdk = {}
+    for k, v in pairs(premake.tools.clang) do
+        premake.tools.emsdk[k] = v
+    end
+
+    -- update the emsdk toolset to use the appropriate binaries.
+    local emsdk_tools = {
+        cc = 'emcc',
+        cxx = 'em++',
+        ar = 'emar',
+    }
+    function premake.tools.emsdk.gettoolname(cfg, tool)
+        return emsdk_tools[tool]
+    end
+
     system('emscripten')
-    toolset('emcc')
+    toolset('emsdk')
 
     linkoptions({ '-sALLOW_MEMORY_GROWTH' })
 
diff --git a/decoders/premake5_v2.lua b/decoders/premake5_v2.lua
index bbf3bc3..7d35ee2 100644
--- a/decoders/premake5_v2.lua
+++ b/decoders/premake5_v2.lua
@@ -5,10 +5,12 @@
 dofile(rive .. '/dependencies/premake5_libpng_v2.lua')
 
 project('rive_decoders')
-dependson('libpng')
-kind('StaticLib')
-flags({ 'FatalWarnings' })
+do
+    dependson('libpng')
+    kind('StaticLib')
+    flags({ 'FatalWarnings' })
 
-includedirs({ 'include', '../include', libpng })
+    includedirs({ 'include', '../include', libpng })
 
-files({ 'src/**.cpp' })
+    files({ 'src/**.cpp' })
+end
diff --git a/dependencies/premake5_harfbuzz_v2.lua b/dependencies/premake5_harfbuzz_v2.lua
index 0dbecaa..f5e4179 100644
--- a/dependencies/premake5_harfbuzz_v2.lua
+++ b/dependencies/premake5_harfbuzz_v2.lua
@@ -218,12 +218,7 @@
 
     defines({ 'HAVE_OT', 'HB_NO_FALLBACK_SHAPE', 'HB_NO_WIN1256' })
 
-    filter('system:emscripten')
-    do
-        buildoptions({ '-pthread' })
-    end
-
-    filter('toolset:clang')
+    filter('toolset:not msc')
     do
         flags({ 'FatalWarnings' })
         buildoptions({
diff --git a/dependencies/premake5_libpng_v2.lua b/dependencies/premake5_libpng_v2.lua
index 325de38..2c44808 100644
--- a/dependencies/premake5_libpng_v2.lua
+++ b/dependencies/premake5_libpng_v2.lua
@@ -59,6 +59,15 @@
         zlib .. '/inflate.c',
     })
 
+    filter('toolset:not msc')
+    do
+        flags({ 'FatalWarnings' })
+        buildoptions({
+            '-Wno-unknown-warning-option',
+            '-Wno-deprecated-non-prototype',
+        })
+    end
+
     filter('system:not windows')
     do
         defines({ 'HAVE_UNISTD_H' })
diff --git a/dependencies/premake5_sheenbidi_v2.lua b/dependencies/premake5_sheenbidi_v2.lua
index 7f251bb..f741005 100644
--- a/dependencies/premake5_sheenbidi_v2.lua
+++ b/dependencies/premake5_sheenbidi_v2.lua
@@ -15,11 +15,6 @@
 
     linkoptions({ '-r' })
 
-    filter('system:emscripten')
-    do
-        buildoptions({ '-pthread' })
-    end
-
     filter('options:config=debug')
     do
         files({
diff --git a/premake5_v2.lua b/premake5_v2.lua
index 7a8c270..a188aba 100644
--- a/premake5_v2.lua
+++ b/premake5_v2.lua
@@ -104,11 +104,6 @@
         architecture('x64')
         defines({ '_USE_MATH_DEFINES' })
     end
-
-    filter('system:emscripten')
-    do
-        buildoptions({ '-pthread' })
-    end
 end
 
 newoption({
diff --git a/viewer/build/premake5_viewer.lua b/viewer/build/premake5_viewer.lua
index 01a5239..1f7b2d9 100644
--- a/viewer/build/premake5_viewer.lua
+++ b/viewer/build/premake5_viewer.lua
@@ -1,4 +1,4 @@
-dofile 'rive_build_config.lua'
+dofile('rive_build_config.lua')
 
 dependencies = os.getenv('DEPENDENCIES')