From 0ffb8b2a1533026124140f466fb2c6a31cda5401 Mon Sep 17 00:00:00 2001 From: "arthur.jamet" Date: Fri, 28 May 2021 22:41:46 +0200 Subject: [PATCH] more step toward wasm compilation, still not it --- .github/workflows/webassembly.yml | 1 + .gitignore | 3 ++- CMakeLists.txt | 3 ++- emsdk | 1 + emsdk.sh | 24 ++++++++---------------- lib/Ray/sources/Exceptions/RayError.hpp | 1 + lib/wal/sources/Wal.cpp | 6 +++--- lib/wal/sources/Wal.hpp | 20 +++++++++++--------- 8 files changed, 29 insertions(+), 30 deletions(-) create mode 160000 emsdk diff --git a/.github/workflows/webassembly.yml b/.github/workflows/webassembly.yml index 02c8c5af..3682dcb6 100644 --- a/.github/workflows/webassembly.yml +++ b/.github/workflows/webassembly.yml @@ -27,6 +27,7 @@ jobs: CLANG_PATH=$EMSDK_PATH/upstream/bin PATH=$PATH:$EMSDK_PATH:$EMSCRIPTEN_PATH:$CLANG_PATH:$NODE_PATH && cd $PRJECTDIR && + emcmake cmake -S . -B build && make PLATFORM=PLATFORM_WEB -B && cmake --build build && diff --git a/.gitignore b/.gitignore index 42cd6b29..51721e91 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ cmake-build-debug ./bomberman .vscode build/* -docs/* \ No newline at end of file +docs/* +emsdk/* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 37b6a26b..6d851867 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,8 +11,9 @@ add_subdirectory(${PROJECT_SOURCE_DIR}/lib/wal) add_subdirectory(${PROJECT_SOURCE_DIR}/lib/Ray) if (EMSCRIPTEN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") - set(CMAKE_EXECUTABLE_SUFFIX ".html") # This line is used to set your executable to build with the emscripten html template so taht you can directly open it. + set(CMAKE_EXECUTABLE_SUFFIX ".html") endif () diff --git a/emsdk b/emsdk new file mode 160000 index 00000000..f26ebb74 --- /dev/null +++ b/emsdk @@ -0,0 +1 @@ +Subproject commit f26ebb74c0aa12d783a8552888cd9516b635838e diff --git a/emsdk.sh b/emsdk.sh index 3cd21922..75885814 100755 --- a/emsdk.sh +++ b/emsdk.sh @@ -1,20 +1,12 @@ #! /bin/bash PRJECTDIR=`pwd` -EMSDK_PATH=$HOME/emsdk -if [[ ! -d $HOME/emsdk ]]; then +EMSDK_PATH=./emsdk +if [[ ! -d ./emsdk ]]; then git clone https://github.com/emscripten-core/emsdk.git fi -cd $EMSDK_PATH && -./emsdk install tot && -./emsdk install latest && -./emsdk activate latest && -source ./emsdk_env.sh && -EMSCRIPTEN_PATH=$EMSDK_PATH/upstream/emscripten -CLANG_PATH=$EMSDK_PATH/upstream/bin -PATH=$PATH:$EMSDK_PATH:$EMSCRIPTEN_PATH:$CLANG_PATH:$NODE_PATH && -cd $PRJECTDIR && -emcmake cmake -S . -B build && -make PLATFORM=PLATFORM_WEB -B && -cmake --build build && -make -C build PLATFORM=PLATFORM_WEB -B && -python3 wasm-server.py +./emsdk/emsdk install tot +./emsdk/emsdk activate latest +source ./emsdk/emsdk_env.sh +mkdir -p build && +cmake -S . -B build && +cmake --build build \ No newline at end of file diff --git a/lib/Ray/sources/Exceptions/RayError.hpp b/lib/Ray/sources/Exceptions/RayError.hpp index 52068b22..f700ac17 100644 --- a/lib/Ray/sources/Exceptions/RayError.hpp +++ b/lib/Ray/sources/Exceptions/RayError.hpp @@ -9,6 +9,7 @@ #define RAYERROR_HPP_ #include +#include namespace RAY::Exception { //! @brief base exception class for RAY lib diff --git a/lib/wal/sources/Wal.cpp b/lib/wal/sources/Wal.cpp index 875e3bd8..6ab6542a 100644 --- a/lib/wal/sources/Wal.cpp +++ b/lib/wal/sources/Wal.cpp @@ -41,8 +41,8 @@ namespace WAL { // TODO use an hashmap to cache results. const auto &dependency = system.getDependencies(); - return std::ranges::all_of(dependency.begin(), dependency.end(), [&entity](const auto &dependency) { - return entity.hasComponent(dependency); - }); + //return std::ranges::all_of(dependency.begin(), dependency.end(), [&entity](const auto &dependency) { + // return entity.hasComponent(dependency); + //}); } } // namespace WAL \ No newline at end of file diff --git a/lib/wal/sources/Wal.hpp b/lib/wal/sources/Wal.hpp index c222862f..bce38bec 100644 --- a/lib/wal/sources/Wal.hpp +++ b/lib/wal/sources/Wal.hpp @@ -17,8 +17,8 @@ #ifdef PLATFORM_WEB #include -WAL::Wal *walPtr = nullptr; -void *callbackPtr = nullptr; +void *walPtr = nullptr; +void *statePtr = nullptr; #endif namespace WAL @@ -118,8 +118,8 @@ namespace WAL #ifdef PLATFORM_WEB walPtr = this; - callbackPtr = &callback; - return emscripten_set_main_loop_arg(runWASM, &state, 0, 1); + statePtr = &state; + return emscripten_set_main_loop_arg((em_arg_callback_func)&runIteration, (void *)&callback, 0, 1); #else return this->run(update, state); #endif @@ -152,9 +152,11 @@ namespace WAL #ifdef PLATFORM_WEB template - static void runIteration(T *state) + static void runIteration(void *callbackPtr) { - static std::function callback = callbackPtr; + static const Callback callback = *((Callback *)callbackPtr); + static Wal *wal = (Wal *)walPtr; + static T *state = (T *)statePtr; static auto lastTick = std::chrono::steady_clock::now(); static std::chrono::nanoseconds fBehind(0); @@ -164,10 +166,10 @@ namespace WAL lastTick = now; while (fBehind > Wal::timestep) { fBehind -= Wal::timestep; - this->_fixedUpdate(); + wal->_fixedUpdate(); } - walPtr->_update(dtime); - callback(wal, state); + wal->_update(dtime); + callback(*wal, *state); } #endif