diff --git a/build.py b/build.py index cea3125..569a120 100755 --- a/build.py +++ b/build.py @@ -35,22 +35,22 @@ def makefile(target, sources, flags, link_flags): flags = " ".join([flags.strip(), targets[target].get("cxx_flags", "").strip()]) - # DO NOT replace tabs with spaces - # fmt: off +# DO NOT replace tabs with spaces +# fmt: off return f""" CXX = em++ EXE = {target} -CXX_FLAGS = {flags} -Isrc -pthread -msse -msse2 -mssse3 -msse4.1 -msimd128 -flto -fno-exceptions \\ +CXX_FLAGS = {flags} -Isrc -pthread -msimd128 -mavx -flto -fno-exceptions \\ -DUSE_POPCNT -DUSE_SSE2 -DUSE_SSSE3 -DUSE_SSE41 -DNO_PREFETCH -DNNUE_EMBEDDING_OFF LD_FLAGS = {link_flags} \\ - --pre-js=../../src/initModule.js -sEXPORT_ES6 -sEXPORT_NAME={mod_name(target)} -sFILESYSTEM=0 \\ + --pre-js=../../src/initModule.js -sEXIT_RUNTIME -sEXPORT_ES6 -sEXPORT_NAME={mod_name(target)} \\ -sEXPORTED_FUNCTIONS='[_malloc,_main]' -sEXPORTED_RUNTIME_METHODS='[stringToUTF8,UTF8ToString,HEAPU8]' \\ -sINCOMING_MODULE_JS_API='[locateFile,print,printErr,wasmMemory,buffer,instantiateWasm]' \\ -sINITIAL_MEMORY=64MB -sALLOW_MEMORY_GROWTH -sSTACK_SIZE=2MB -sSTRICT -sPROXY_TO_PTHREAD \\ - -sALLOW_BLOCKING_ON_MAIN_THREAD=0 -sEXIT_RUNTIME -Wno-pthreads-mem-growth + -sALLOW_BLOCKING_ON_MAIN_THREAD=0 -Wno-pthreads-mem-growth SRCS = {sources} OBJS = $(addprefix src/, $(SRCS:.cpp=.o)) src/glue.o diff --git a/src/glue.cpp b/src/glue.cpp index bc085a9..b7bd47e 100644 --- a/src/glue.cpp +++ b/src/glue.cpp @@ -5,31 +5,10 @@ #include "uci.h" #include "nnue/nnue_architecture.h" -extern "C" { - EMSCRIPTEN_KEEPALIVE void uci(const char* utf8) { inQ.push(Command(utf8)); } - - EMSCRIPTEN_KEEPALIVE void setNnueBuffer(char* buf, size_t sz, int index) { - inQ.push(Command(buf, sz, index)); - } - - EMSCRIPTEN_KEEPALIVE const char* getRecommendedNnue(int index) { - return get_nnue_name(index); - } -} - -EMSCRIPTEN_KEEPALIVE std::string js_getline() { - auto cmd = inQ.pop(); - if (cmd.type == cmd.UCI) - return cmd.uci; - else if (cmd.type == cmd.NNUE && cmd.ptr) - return load_nnue_cmd(cmd); - else - return ""; -} - #if __has_include("nnue/evaluate_nnue.h") // single nnue - # include "nnue/evaluate_nnue.h" - +# include "nnue/evaluate_nnue.h" +# define EvalFileDefaultNameSmall EvalFileDefaultName +# define EvalFileDefaultNameBig EvalFileDefaultName const std::string load_nnue_cmd(Command& cmd) { std::istream in(&cmd); if (Stockfish::Eval::NNUE::load_eval("", in)) @@ -37,11 +16,6 @@ EMSCRIPTEN_KEEPALIVE std::string js_getline() { else std::cerr << "BAD_NNUE" << std::endl; return "setoption name Use NNUE value false"; } - - const char* get_nnue_name(int index) { - return EvalFileDefaultName; - } - #else // big/little nnue extern Stockfish::UCIEngine* uci_global; @@ -49,14 +23,10 @@ EMSCRIPTEN_KEEPALIVE std::string js_getline() { std::istream in(&cmd); if (cmd.index == 0) uci_global->engine.load_big_network(in); else if (cmd.index == 1) uci_global->engine.load_small_network(in); - else std::cerr << "BAD_NNUE " << cmd.index << std::endl; + //else std::cerr << "BAD_NNUE " << cmd.index << std::endl; return ""; } - const char* get_nnue_name(int index) { - return index == 1 ? EvalFileDefaultNameSmall : EvalFileDefaultNameBig; - } - namespace Stockfish::Tablebases { Config rank_root_moves(const OptionsMap& o, Position& p, Search::RootMoves& rM, bool rankDTZ) { return Config(); @@ -64,7 +34,30 @@ EMSCRIPTEN_KEEPALIVE std::string js_getline() { } #endif -// stubs for tbprobe.cpp (so we don't need -sALLOW_UNIMPLEMENTED_SYSCALLS) +CommandQueue inQ; + +extern "C" { + EMSCRIPTEN_KEEPALIVE void uci(const char* utf8) { inQ.push(Command(utf8)); } + + EMSCRIPTEN_KEEPALIVE void setNnueBuffer(char* buf, size_t sz, int index) { + inQ.push(Command(buf, sz, index)); + } + + EMSCRIPTEN_KEEPALIVE const char* getRecommendedNnue(int index) { + return index == 1 ? EvalFileDefaultNameSmall : EvalFileDefaultNameBig; + } +} + +EMSCRIPTEN_KEEPALIVE std::string js_getline() { + auto cmd = inQ.pop(); + if (cmd.type == cmd.UCI) + return cmd.uci; + else if (cmd.type == cmd.NNUE && cmd.ptr) + return load_nnue_cmd(cmd); + else + return ""; +} + namespace Stockfish::Tablebases { int MaxCardinality = 0; void init(const std::string& paths) {} diff --git a/src/glue.hpp b/src/glue.hpp index 3b6d552..6d41ec4 100644 --- a/src/glue.hpp +++ b/src/glue.hpp @@ -20,7 +20,7 @@ struct Command : public std::streambuf { using std::streambuf::seekpos; }; -struct { +struct CommandQueue { std::mutex m; std::queue q; std::condition_variable cv; @@ -39,7 +39,4 @@ struct { q.pop(); return el; } -} inQ; - -const char* get_nnue_name(int index); -const std::string load_nnue_cmd(Command& cmd); +};