From 8bee5027bc58ff93677122265568cb0b706434f9 Mon Sep 17 00:00:00 2001 From: YeiHuynh <70838508+kan6868@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:56:52 +0700 Subject: [PATCH 1/3] Refactor code to adapt emsdk 4.0.x --- platform/emscripten/Rtt_EmscriptenContext.cpp | 14 ++++---- platform/emscripten/Rtt_EmscriptenContext.h | 10 +++--- platform/resources/webPackageApp.lua | 32 +++++++++++-------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/platform/emscripten/Rtt_EmscriptenContext.cpp b/platform/emscripten/Rtt_EmscriptenContext.cpp index 14aaca94d..7f4e09f96 100644 --- a/platform/emscripten/Rtt_EmscriptenContext.cpp +++ b/platform/emscripten/Rtt_EmscriptenContext.cpp @@ -595,12 +595,12 @@ namespace Rtt return 0; } - int CoronaAppContext::touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData) + bool CoronaAppContext::touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData) { return mouseupCallback(0, 0, 0); } - int CoronaAppContext::blurCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) + bool CoronaAppContext::blurCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) { // check event target, ingnore all events except #window if (*focusEvent->id == 0) // event from #window ? @@ -608,10 +608,10 @@ namespace Rtt CoronaAppContext* ctx = (CoronaAppContext*) userData; ctx->pause(); } - return 0; + return false; } - int CoronaAppContext::focusCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) + bool CoronaAppContext::focusCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) { // check event target, ingnore all events except #window if (*focusEvent->id == 0) // event from #window ? @@ -619,10 +619,10 @@ namespace Rtt CoronaAppContext* ctx = (CoronaAppContext*) userData; ctx->resume(); } - return 0; + return false; } - int CoronaAppContext::resizeCallback(int eventType, const EmscriptenUiEvent *uiEvent, void *userData) + bool CoronaAppContext::resizeCallback(int eventType, const EmscriptenUiEvent *uiEvent, void *userData) { SDL_Event sdlevent; sdlevent.type = SDL_WINDOWEVENT; @@ -631,7 +631,7 @@ namespace Rtt sdlevent.window.windowID = 0; sdlevent.window.event = SDL_WINDOWEVENT_RESIZED; SDL_PushEvent(&sdlevent); - return 0; + return false; } const char* CoronaAppContext::beforeunloadCallback(int eventType, const void *reserved, void *userData) diff --git a/platform/emscripten/Rtt_EmscriptenContext.h b/platform/emscripten/Rtt_EmscriptenContext.h index 67bc5c4e1..053cb6b58 100644 --- a/platform/emscripten/Rtt_EmscriptenContext.h +++ b/platform/emscripten/Rtt_EmscriptenContext.h @@ -141,11 +141,11 @@ namespace Rtt int getFPS() const { return fRuntime ? fRuntime->GetFPS() : 30; } #if defined(EMSCRIPTEN) - static int resizeCallback(int eventType, const EmscriptenUiEvent *uiEvent, void *userData); - static int mouseupCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void * userData); - static int touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData); - static int blurCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData); - static int focusCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData); + static bool resizeCallback(int eventType, const EmscriptenUiEvent *uiEvent, void *userData); + static bool mouseupCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void * userData); + static bool touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData); + static bool blurCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData); + static bool focusCallback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData); static const char* beforeunloadCallback(int eventType, const void *reserved, void *userData); #endif diff --git a/platform/resources/webPackageApp.lua b/platform/resources/webPackageApp.lua index 25ac6ee17..302252174 100755 --- a/platform/resources/webPackageApp.lua +++ b/platform/resources/webPackageApp.lua @@ -714,19 +714,19 @@ function webPackageApp( options ) --generate new loadPackaghe for .js - local loadPackage = 'loadPackage({"files":['; + local loadPackage = 'loadPackage({files:['; local pos = 0 log('.data file map (size/name)'); local totalDataSize = 0; for i = 1, #dataFiles do -- {"audio":0,"start":0,"crunched":0,"end":5,"filename":"/main.lua"} - loadPackage = loadPackage .. '{"audio":0,'; - loadPackage = loadPackage .. '"start":' .. pos .. ','; + loadPackage = loadPackage .. '{audio:0,'; + loadPackage = loadPackage .. 'start:' .. pos .. ','; pos = pos + dataFiles[i].size - loadPackage = loadPackage .. '"crunched":0,'; - loadPackage = loadPackage .. '"end":' .. pos .. ','; - loadPackage = loadPackage .. '"filename":"' .. dataFiles[i].name ..'"}'; + loadPackage = loadPackage .. 'crunched:0,'; + loadPackage = loadPackage .. 'end:' .. pos .. ','; + loadPackage = loadPackage .. 'filename:"' .. dataFiles[i].name ..'"}'; if i == #dataFiles then loadPackage = loadPackage .. ']' else loadPackage = loadPackage .. "," end -- print log @@ -740,10 +740,10 @@ function webPackageApp( options ) log('Total data file size = ' .. totalDataSize .. ' = ' .. math.floor(totalDataSize / 1024) .. 'KB = ' .. math.floor(totalDataSize / 1024 / 1024) .. 'MB'); -- ,"remote_package_size":5,"package_uuid":"134361ad-01a4-42aa-aea6-5b48c05818f7"}) - loadPackage = loadPackage .. ',"remote_package_size":' .. pos; + loadPackage = loadPackage .. ',remote_package_size:' .. pos; -- fixme UUID - loadPackage = loadPackage .. ',"package_uuid":"134361ad-01a4-42aa-aea6-5b48c05818f7"})'; + loadPackage = loadPackage .. ',package_uuid:"134361ad-01a4-42aa-aea6-5b48c05818f7"})'; --log3('loadPackage:', loadPackage); --generate new FS_createPath for .js @@ -770,12 +770,16 @@ function webPackageApp( options ) fi:close() -- seek loadPackage({"files":[{"audio":0,"start":0,"crunched":0,"end":359,"filename":"/main.lua"},{"audio":0,"start":359,"crunched":0,"end":718,"filename":"/zzz/main.lua"}],"remote_package_size":718,"package_uuid":"be67bd33-1e30-46ab-85c8-ab4d3f06cf1d"}) - local count - src, count = src:gsub('loadPackage%b()', loadPackage, 1) - if count < 1 then - return 'Source .js file does not contain loadPackage(...)'; - end - + local count = 0 + src = src:gsub("loadPackage%b()", function(m) + count = count + 1 + if count == 2 then + return loadPackage + else + return m + end + end) + -- seek Module["FS_createPath"]("/","CORONA_FOLDER_PLACEHOLDER",true,true); src, count = src:gsub("Module%['FS_createPath']%b();", createPaths, 1) if count < 1 then From eaec6b7a13eb2757a9e2c5a0ce98f8c3802823f4 Mon Sep 17 00:00:00 2001 From: YeiHuynh <70838508+kan6868@users.noreply.github.com> Date: Sat, 18 Oct 2025 18:11:29 +0700 Subject: [PATCH 2/3] mouseupCallback change return type --- platform/emscripten/Rtt_EmscriptenContext.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/emscripten/Rtt_EmscriptenContext.cpp b/platform/emscripten/Rtt_EmscriptenContext.cpp index 7f4e09f96..695f92409 100644 --- a/platform/emscripten/Rtt_EmscriptenContext.cpp +++ b/platform/emscripten/Rtt_EmscriptenContext.cpp @@ -579,7 +579,7 @@ namespace Rtt #if defined(EMSCRIPTEN) // iOS Web Audio Unlocker - int CoronaAppContext::mouseupCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void * userData) + bool CoronaAppContext::mouseupCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void * userData) { CoronaAppContext* ctx = (CoronaAppContext*) userData; jsContextUnlockAudio(); @@ -592,7 +592,7 @@ namespace Rtt isFirstTime = false; ctx->requestFullscreen(EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT, EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF, EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT); } - return 0; + return false; } bool CoronaAppContext::touchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData) From 5801aa4e12f359914c335b765e880dbe21d61ddb Mon Sep 17 00:00:00 2001 From: YeiHuynh <70838508+kan6868@users.noreply.github.com> Date: Sat, 18 Oct 2025 20:15:04 +0700 Subject: [PATCH 3/3] Change emcc --- platform/emscripten/gmake/build_app.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/platform/emscripten/gmake/build_app.sh b/platform/emscripten/gmake/build_app.sh index 4d3c47af4..4df420335 100755 --- a/platform/emscripten/gmake/build_app.sh +++ b/platform/emscripten/gmake/build_app.sh @@ -124,11 +124,10 @@ pushd $path > /dev/null echo " " echo "Building HTML:" - echo '\t' emcc obj/"$CONFIG"/libratatouille.a obj/"$CONFIG"/librtt.a $CC_FLAGS obj/"$CONFIG"/libBox2D.a $CC_FLAGS obj/"$CONFIG"/liblua.a $CC_FLAGS obj/"$CONFIG"/libpng.a $CC_FLAGS obj/"$CONFIG"/libjpeg.a $CC_FLAGS obj/"$CONFIG"/libz.a $CC_FLAGS obj/"$CONFIG"/liblfs.a $CC_FLAGS obj/"$CONFIG"/liblpeg.a $CC_FLAGS obj/"$CONFIG"/libRenderer.a -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -O3 -s USE_SDL=2 -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_MEMORY=128MB --js-library ../Rtt_PlatformWebAudioPlayer.js --js-library ../Rtt_EmscriptenPlatform.js --js-library ../Rtt_EmscriptenVideo.js --preload-file "$TMP_DIR"@/ -o "$OUTPUT_HTML" - emcc obj/"$CONFIG"/libratatouille.a obj/"$CONFIG"/librtt.a $CC_FLAGS obj/"$CONFIG"/libBox2D.a $CC_FLAGS obj/"$CONFIG"/liblua.a $CC_FLAGS obj/"$CONFIG"/libpng.a $CC_FLAGS obj/"$CONFIG"/libjpeg.a $CC_FLAGS obj/"$CONFIG"/libz.a $CC_FLAGS obj/"$CONFIG"/liblfs.a $CC_FLAGS obj/"$CONFIG"/liblpeg.a $CC_FLAGS obj/"$CONFIG"/libRenderer.a -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -O3 -s USE_SDL=2 -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_MEMORY=128MB --js-library ../Rtt_PlatformWebAudioPlayer.js --js-library ../Rtt_EmscriptenPlatform.js --js-library ../Rtt_EmscriptenVideo.js -lidbfs.js --preload-file "$TMP_DIR"@/ -o "$OUTPUT_HTML" + echo '\t' emcc obj/"$CONFIG"/libratatouille.a obj/"$CONFIG"/librtt.a $CC_FLAGS obj/"$CONFIG"/libBox2D.a $CC_FLAGS obj/"$CONFIG"/liblua.a $CC_FLAGS obj/"$CONFIG"/libpng.a $CC_FLAGS obj/"$CONFIG"/libjpeg.a $CC_FLAGS obj/"$CONFIG"/libz.a $CC_FLAGS obj/"$CONFIG"/liblfs.a $CC_FLAGS obj/"$CONFIG"/liblpeg.a $CC_FLAGS obj/"$CONFIG"/libRenderer.a -s EXPORTED_RUNTIME_METHODS=['ccall','cwrap','addFunction','removeFunction','UTF8ToString'] -s EXPORTED_FUNCTIONS=['_main','_malloc','_free'] -s LEGACY_RUNTIME=1 -O3 -msimd128 -s USE_SDL=2 -s FORCE_FILESYSTEM=1 -s STACK_SIZE=1MB -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_HEAP=128MB --js-library ../Rtt_PlatformWebAudioPlayer.js --js-library ../Rtt_EmscriptenPlatform.js --js-library ../Rtt_EmscriptenVideo.js --preload-file "$TMP_DIR"@/ -o "$OUTPUT_HTML" + emcc obj/"$CONFIG"/libratatouille.a obj/"$CONFIG"/librtt.a $CC_FLAGS obj/"$CONFIG"/libBox2D.a $CC_FLAGS obj/"$CONFIG"/liblua.a $CC_FLAGS obj/"$CONFIG"/libpng.a $CC_FLAGS obj/"$CONFIG"/libjpeg.a $CC_FLAGS obj/"$CONFIG"/libz.a $CC_FLAGS obj/"$CONFIG"/liblfs.a $CC_FLAGS obj/"$CONFIG"/liblpeg.a $CC_FLAGS obj/"$CONFIG"/libRenderer.a -s EXPORTED_RUNTIME_METHODS=['ccall','cwrap','addFunction','removeFunction','UTF8ToString'] -s EXPORTED_FUNCTIONS=['_main','_malloc','_free'] -s LEGACY_RUNTIME=1 -O3 -msimd128 -s USE_SDL=2 -s FORCE_FILESYSTEM=1 -s STACK_SIZE=1MB -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_HEAP=128MB --js-library ../Rtt_PlatformWebAudioPlayer.js --js-library ../Rtt_EmscriptenPlatform.js --js-library ../Rtt_EmscriptenVideo.js -lidbfs.js --preload-file "$TMP_DIR"@/ -o "$OUTPUT_HTML" checkError - echo "SUCCESS! Run with command:" echo '\t' emrun $OUTPUT_HTML