commit f1a2985897850321e0a9acb1b74bb41e016deb5c
parent 52c74a1c33ce12b93ec5830f5a6348d9578c7c6e
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Thu, 5 Jun 2025 11:42:12 +0200
Added debug mode to web build and fixed a couple of bugs
Diffstat:
4 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/build b/build
@@ -142,6 +142,7 @@ CPPFLAGS="-std=c++20 -pthread"
WASMCFLAGS="-std=c11 -fPIC -D_POSIX_C_SOURCE=199309L -pthread
-mfpu=neon -mrelaxed-simd"
WASMCPPFLAGS="-std=c++20 -pthread"
+WASMDBGFLAGS="-sASSERTIONS"
WASMMFLAGS="-DTHREADS=$THREADS -DNEON"
WASMLINKFLAGS="--no-entry -sEXPORT_NAME='Nissy' -sMODULARIZE
-sEXPORTED_RUNTIME_METHODS=addFunction,UTF8ToString
@@ -216,7 +217,7 @@ run() {
odflags() {
if [ "$debug" = "yes" ]; then
echo "$DFLAGS"
- else
+ else
echo "$OFLAGS"
fi
}
@@ -283,10 +284,16 @@ build_web() {
obj="nissy_web_module"
- run $EMCC $WASMCFLAGS $WFLAGS $WASMMFLAGS $(odflags) -c \
+ if [ "$debug" = "yes" ]; then
+ ODFLAGS="$DFLAGS -sASSERTIONS"
+ else
+ ODFLAGS="$OFLAGS"
+ fi
+
+ run $EMCC $WASMCFLAGS $WFLAGS $WASMMFLAGS $ODFLAGS -c \
-o nissy.o src/nissy.c || exit 1
run $EMCC -lembind -lidbfs.js \
- $WASMCPPFLAGS $(odflags) $WASMLINKFLAGS -o web/"$obj".mjs \
+ $WASMCPPFLAGS $ODFLAGS $WASMLINKFLAGS -o web/"$obj".mjs \
cpp/nissy.cpp web/storage.cpp web/adapter.cpp nissy.o || exit 1
cp web/"$obj".mjs web/http/
cp web/"$obj".wasm web/http/
diff --git a/web/adapter.cpp b/web/adapter.cpp
@@ -151,13 +151,14 @@ int poll_status(void *arg)
if (arg == nullptr)
return nissy::status::RUN.value;
- std::function<int(void)> poll((int (*)(void))arg);
+ std::function<int(void)> poll((int (*)(void))*(int *)arg);
return poll();
}
// The parameter js_poll_status is of type int here, but actually it is a
// pointer to a JS function. The type will have to be changed to a 64-bit
// integer when we move to WASM64.
+int js_poll_status_global = 0;
nissy::solver::solve_result solve(std::string name,
nissy::cube cube, nissy::nissflag nissflag, unsigned minmoves,
unsigned maxmoves, unsigned maxsols, unsigned optimal, unsigned threads,
@@ -179,9 +180,10 @@ nissy::solver::solve_result solve(std::string name,
// TODO: when running multiple solvers at the same time, we could use
// poll_status_id as intended (i.e. an id of some sort)
+ js_poll_status_global = js_poll_status;
return loaded_solvers.at(name).solve(cube, nissflag, minmoves,
maxmoves, maxsols, optimal, threads,
- poll_status, &js_poll_status);
+ poll_status, &js_poll_status_global);
}
EMSCRIPTEN_BINDINGS(Nissy)
diff --git a/web/http/nissyapp.mjs b/web/http/nissyapp.mjs
@@ -267,10 +267,10 @@ function startSolve(solver, scramble) {
arg: {
solver: solver,
scramble: scramble,
- minmoves: minSlider.value,
- maxmoves: maxSlider.value,
- maxsolutions: maxSolsInput.value,
- optimal: optimalInput.value,
+ minmoves: Number(minSlider.value),
+ maxmoves: Number(maxSlider.value),
+ maxsolutions: Number(maxSolsInput.value),
+ optimal: Number(optimalInput.value),
threads: window.navigator.hardwareConcurrency,
}
});
diff --git a/web/http/worker.mjs b/web/http/worker.mjs
@@ -3,7 +3,8 @@ import Nissy from "./nissy_web_module.mjs"
const nissy = await Nissy();
const log = (cstr) => postMessage({
- command: "log", id: -1,
+ command: "log",
+ id: -1,
object: nissy.UTF8ToString(cstr)
});
nissy.setLogger(nissy.addFunction(log, "vp"));