From b1770039f4d483cdab2d4d136cd7ffbf12f165b7 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 28 May 2025 14:32:38 +0200 Subject: Enable WASM64 --- build | 9 ++++++--- web/callback.js | 9 ++++++++- web/http/index.html | 2 +- web/http/nissyapp.mjs | 14 -------------- web/storage.cpp | 7 +++++-- web/worker.mjs | 7 ++----- 6 files changed, 22 insertions(+), 26 deletions(-) diff --git a/build b/build index b86adb3..da71227 100755 --- a/build +++ b/build @@ -127,9 +127,12 @@ MFLAGS="-DTHREADS=$THREADS -D$ARCH" CPPFLAGS="-std=c++20 -pthread" # Build flags for emscripten (WASM target) -WASMCFLAGS="-std=c11 -fPIC -D_POSIX_C_SOURCE=199309L -pthread" +WASMCFLAGS="-std=c11 -fPIC -D_POSIX_C_SOURCE=199309L -pthread \ + -sMEMORY64 -sMAXIMUM_MEMORY=10737418240 -sASSERTIONS" +WASMCPPFLAGS="-std=c++20 -pthread -sMEMORY64 -sMAXIMUM_MEMORY=10737418240 \ + -sASSERTIONS" WASMMFLAGS="-DTHREADS=$THREADS -DWASMSIMD" -WASMLINKFLAGS="--no-entry -sEXPORT_NAME='Nissy' -sMODULARIZE \ +WASMLINKFLAGS="--no-entry -sEXPORT_NAME='Nissy' -sMODULARIZE -sMEMORY64 \ -sALLOW_MEMORY_GROWTH -sSTACK_SIZE=5MB -sPTHREAD_POOL_SIZE=$THREADS \ -sFETCH -sASYNCIFY -sLINKABLE -sEXPORT_ALL" @@ -271,7 +274,7 @@ build_web() { run $EMCC $WASMCFLAGS $WFLAGS $WASMMFLAGS $(odflags) -c \ -o nissy.o src/nissy.c || exit 1 run $EMCC -lembind -lidbfs.js \ - $CPPFLAGS $(odflags) $WASMLINKFLAGS \ + $WASMCPPFLAGS $(odflags) $WASMLINKFLAGS \ --js-library web/callback.js -o web/"$obj".mjs \ cpp/nissy.cpp web/storage.cpp web/adapter.cpp nissy.o || exit 1 cp web/"$obj".mjs web/http/ diff --git a/web/callback.js b/web/callback.js index 178b8e9..e277cf5 100644 --- a/web/callback.js +++ b/web/callback.js @@ -31,8 +31,15 @@ addCallbackFunction: function(f) { callFunction__deps: [ 'cbfl', 'validateCallbackId' ], callFunction: function(id, arg) { + // This is a workaround related to usign WASM64 + // JavaScript's UTF8ToString expects a pointer argument, which for JS is + // of type "number", but WASM64 is passing a BigInt. See also: + // https://github.com/emscripten-core/emscripten/issues/21541 + // (but I could not make the suggested solution work in this case). + // TODO: check if there is a better workaround. + const non64_arg = Number(arg); if (_validateCallbackId(id)) - _cbfl[id](UTF8ToString(arg)); + _cbfl[id](UTF8ToString(non64_arg)); }, callFunctionInt__deps: [ 'cbfl', 'validateCallbackId' ], diff --git a/web/http/index.html b/web/http/index.html index 0846ea8..47ccc0d 100644 --- a/web/http/index.html +++ b/web/http/index.html @@ -11,7 +11,7 @@