aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild9
-rw-r--r--web/callback.js9
-rw-r--r--web/http/index.html2
-rw-r--r--web/http/nissyapp.mjs14
-rw-r--r--web/storage.cpp7
-rw-r--r--web/worker.mjs7
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"
127CPPFLAGS="-std=c++20 -pthread" 127CPPFLAGS="-std=c++20 -pthread"
128 128
129# Build flags for emscripten (WASM target) 129# Build flags for emscripten (WASM target)
130WASMCFLAGS="-std=c11 -fPIC -D_POSIX_C_SOURCE=199309L -pthread" 130WASMCFLAGS="-std=c11 -fPIC -D_POSIX_C_SOURCE=199309L -pthread \
131 -sMEMORY64 -sMAXIMUM_MEMORY=10737418240 -sASSERTIONS"
132WASMCPPFLAGS="-std=c++20 -pthread -sMEMORY64 -sMAXIMUM_MEMORY=10737418240 \
133 -sASSERTIONS"
131WASMMFLAGS="-DTHREADS=$THREADS -DWASMSIMD" 134WASMMFLAGS="-DTHREADS=$THREADS -DWASMSIMD"
132WASMLINKFLAGS="--no-entry -sEXPORT_NAME='Nissy' -sMODULARIZE \ 135WASMLINKFLAGS="--no-entry -sEXPORT_NAME='Nissy' -sMODULARIZE -sMEMORY64 \
133 -sALLOW_MEMORY_GROWTH -sSTACK_SIZE=5MB -sPTHREAD_POOL_SIZE=$THREADS \ 136 -sALLOW_MEMORY_GROWTH -sSTACK_SIZE=5MB -sPTHREAD_POOL_SIZE=$THREADS \
134 -sFETCH -sASYNCIFY -sLINKABLE -sEXPORT_ALL" 137 -sFETCH -sASYNCIFY -sLINKABLE -sEXPORT_ALL"
135 138
@@ -271,7 +274,7 @@ build_web() {
271 run $EMCC $WASMCFLAGS $WFLAGS $WASMMFLAGS $(odflags) -c \ 274 run $EMCC $WASMCFLAGS $WFLAGS $WASMMFLAGS $(odflags) -c \
272 -o nissy.o src/nissy.c || exit 1 275 -o nissy.o src/nissy.c || exit 1
273 run $EMCC -lembind -lidbfs.js \ 276 run $EMCC -lembind -lidbfs.js \
274 $CPPFLAGS $(odflags) $WASMLINKFLAGS \ 277 $WASMCPPFLAGS $(odflags) $WASMLINKFLAGS \
275 --js-library web/callback.js -o web/"$obj".mjs \ 278 --js-library web/callback.js -o web/"$obj".mjs \
276 cpp/nissy.cpp web/storage.cpp web/adapter.cpp nissy.o || exit 1 279 cpp/nissy.cpp web/storage.cpp web/adapter.cpp nissy.o || exit 1
277 cp web/"$obj".mjs web/http/ 280 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) {
31 31
32callFunction__deps: [ 'cbfl', 'validateCallbackId' ], 32callFunction__deps: [ 'cbfl', 'validateCallbackId' ],
33callFunction: function(id, arg) { 33callFunction: function(id, arg) {
34 // This is a workaround related to usign WASM64
35 // JavaScript's UTF8ToString expects a pointer argument, which for JS is
36 // of type "number", but WASM64 is passing a BigInt. See also:
37 // https://github.com/emscripten-core/emscripten/issues/21541
38 // (but I could not make the suggested solution work in this case).
39 // TODO: check if there is a better workaround.
40 const non64_arg = Number(arg);
34 if (_validateCallbackId(id)) 41 if (_validateCallbackId(id))
35 _cbfl[id](UTF8ToString(arg)); 42 _cbfl[id](UTF8ToString(non64_arg));
36}, 43},
37 44
38callFunctionInt__deps: [ 'cbfl', 'validateCallbackId' ], 45callFunctionInt__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 @@
11 <select id="solverSelector"> 11 <select id="solverSelector">
12 <option value="h48h0k4">h48 h=0 k=4 (59Mb)</option> 12 <option value="h48h0k4">h48 h=0 k=4 (59Mb)</option>
13 <option value="h48h3k2" selected="selected">h48 h=3 k=2 (283Mb)</option> 13 <option value="h48h3k2" selected="selected">h48 h=3 k=2 (283Mb)</option>
14 <!--option value="h48h7k2">h48 h=7 k=2 (3.6Gb)</option--> 14 <option value="h48h7k2">h48 h=7 k=2 (3.6Gb)</option>
15 </select> 15 </select>
16 <button id="solveButton">Solve</button> 16 <button id="solveButton">Solve</button>
17 <div id="confirmDownload" style="display:none"> 17 <div id="confirmDownload" style="display:none">
diff --git a/web/http/nissyapp.mjs b/web/http/nissyapp.mjs
index b8a525c..55ca198 100644
--- a/web/http/nissyapp.mjs
+++ b/web/http/nissyapp.mjs
@@ -50,20 +50,6 @@ solveButton.addEventListener("click", () => {
50 const solver = solverSelector.options[solverSelector.selectedIndex].value; 50 const solver = solverSelector.options[solverSelector.selectedIndex].value;
51 const scramble = scrField.value; 51 const scramble = scrField.value;
52 loadDataThenSolve(solver, scramble); 52 loadDataThenSolve(solver, scramble);
53
54 const solveCallbackId = ++lastCallbackId;
55 callbacks.set(solveCallbackId, {
56 f: (callbackArg, loadResult) => {
57 if (loadResult.success) {
58 startSolve(callbackArg.solver, callbackArg.scramble);
59 } else {
60 updateResults("", "", true);
61 }
62 },
63 arg: { solver: solver, scramble: scramble }
64 });
65
66 const downloadCallbackId = ++lastCallbackId;
67}); 53});
68 54
69function loadDataThenSolve(solver, scramble) { 55function loadDataThenSolve(solver, scramble) {
diff --git a/web/storage.cpp b/web/storage.cpp
index cbf9e9c..eef145e 100644
--- a/web/storage.cpp
+++ b/web/storage.cpp
@@ -43,8 +43,11 @@ EM_ASYNC_JS(int, download_and_store, (const char *key, const char *url), {
43 self instanceof WorkerGlobalScope; 43 self instanceof WorkerGlobalScope;
44 console.assert(inBrowser || inWorker, "Non-browsers not supported"); 44 console.assert(inBrowser || inWorker, "Non-browsers not supported");
45 45
46 url = UTF8ToString(url); 46 // See comment in callback.js about this workaround
47 key = UTF8ToString(key); 47 const non64_url = Number(url);
48 const non64_key = Number(key);
49 url = UTF8ToString(non64_url);
50 key = UTF8ToString(non64_key);
48 let response = await fetch(url); 51 let response = await fetch(url);
49 if (!response.ok) { 52 if (!response.ok) {
50 console.log("Error downloading data for " + key); 53 console.log("Error downloading data for " + key);
diff --git a/web/worker.mjs b/web/worker.mjs
index ceceaec..0cb618b 100644
--- a/web/worker.mjs
+++ b/web/worker.mjs
@@ -1,10 +1,7 @@
1import Nissy from "./nissy_web_module.mjs" 1import Nissy from "./nissy_web_module.mjs"
2 2
3const nissy = await Nissy(); 3const nissy = await Nissy();
4function log(message) { 4const log = (msg) => postMessage({ command: "log", id: -1, object: msg });
5 postMessage({ command: "log", id: -1, object: message });
6 console.log(message);
7}
8nissy.setLogger(nissy._addCallbackFunction(log)); 5nissy.setLogger(nissy._addCallbackFunction(log));
9 6
10const commands = [ 7const commands = [
@@ -32,7 +29,7 @@ onmessage = (event) => {
32 } 29 }
33 } 30 }
34 31
35 log("[nissy worker] unknown command " + event.data.command); 32 console.log("[nissy worker] unknown command " + event.data.command);
36}; 33};
37 34
38// Load solver data from storage. 35// Load solver data from storage.

Generated with cgit - Back to sebastiano.tronto.net