From 08d77d6e93539dcb2149f283cfb92c022faedac3 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Mon, 27 Jan 2025 00:52:38 +0100 Subject: [PATCH 1/7] Use bundled Boost with Emscripten --- 3rdparty/CMakeLists.txt | 9 +++++++++ libs/math/CMakeLists.txt | 4 +++- libs/pcg/CMakeLists.txt | 4 +++- libs/random/CMakeLists.txt | 4 +++- libs/util/CMakeLists.txt | 4 +++- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index cf8a7a4d..9251b82d 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -1,3 +1,12 @@ +if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) + set(BOOST_INCLUDE_LIBRARIES random stacktrace math) + set(BOOST_ENABLE_COMPATIBILITY_TARGETS 1) + add_subdirectory(boost EXCLUDE_FROM_ALL) + + # TODO: make this available via find_package so we wouldn't have to + # special-case it in every library +endif() + file(GLOB_RECURSE RAPIDJSON_SOURCES "${CMAKE_CURRENT_LIST_DIR}/rapidjson/include/*") add_library(rapidjson INTERFACE EXCLUDE_FROM_ALL "${RAPIDJSON_SOURCES}") target_include_directories(rapidjson INTERFACE "${CMAKE_CURRENT_LIST_DIR}/rapidjson/include") diff --git a/libs/math/CMakeLists.txt b/libs/math/CMakeLists.txt index 94cb4bcd..719f67de 100644 --- a/libs/math/CMakeLists.txt +++ b/libs/math/CMakeLists.txt @@ -1,6 +1,8 @@ option(PSEMEK_ROBUST_PREDICATES "Use robust geometric predicates" OFF) -find_package(Boost REQUIRED) +if(NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten)) + find_package(Boost REQUIRED) +endif() if(PSEMEK_ROBUST_PREDICATES) find_package(GMP REQUIRED) endif() diff --git a/libs/pcg/CMakeLists.txt b/libs/pcg/CMakeLists.txt index 6d062da9..3ac02fc8 100644 --- a/libs/pcg/CMakeLists.txt +++ b/libs/pcg/CMakeLists.txt @@ -1,4 +1,6 @@ -find_package(Boost COMPONENTS random REQUIRED) +if(NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten)) + find_package(Boost COMPONENTS random REQUIRED) +endif() file(GLOB_RECURSE PSEMEK_PCG_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") file(GLOB_RECURSE PSEMEK_PCG_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") diff --git a/libs/random/CMakeLists.txt b/libs/random/CMakeLists.txt index bd004d25..1b359c45 100644 --- a/libs/random/CMakeLists.txt +++ b/libs/random/CMakeLists.txt @@ -1,4 +1,6 @@ -find_package(Boost COMPONENTS random REQUIRED) +if(NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten)) + find_package(Boost COMPONENTS random REQUIRED) +endif() file(GLOB_RECURSE PSEMEK_RANDOM_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") file(GLOB_RECURSE PSEMEK_RANDOM_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") diff --git a/libs/util/CMakeLists.txt b/libs/util/CMakeLists.txt index 71235109..0106432d 100644 --- a/libs/util/CMakeLists.txt +++ b/libs/util/CMakeLists.txt @@ -1,4 +1,6 @@ -find_package(Boost REQUIRED) +if(NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten)) + find_package(Boost REQUIRED) +endif() file(GLOB_RECURSE PSEMEK_UTIL_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") file(GLOB_RECURSE PSEMEK_UTIL_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") From 42040223909e16a4bdce27b710b8bc3375646c48 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Fri, 31 Jan 2025 22:15:38 +0100 Subject: [PATCH 2/7] Support basic build with Emscripten The result doesn't necessarily work yet, but at least the build is not failing. --- 3rdparty/CMakeLists.txt | 1 + CMakeLists.txt | 12 ++++++++++++ libs/gfx/api/gles32/source/gl.cpp | 4 ++-- libs/log/source/log.cpp | 2 ++ package/CMakeLists.txt | 10 ++++++++-- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 9251b82d..51900e92 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -1,6 +1,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) set(BOOST_INCLUDE_LIBRARIES random stacktrace math) set(BOOST_ENABLE_COMPATIBILITY_TARGETS 1) + add_compile_options(-fdeclspec) # math doesn't build otherwise add_subdirectory(boost EXCLUDE_FROM_ALL) # TODO: make this available via find_package so we wouldn't have to diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d921795..6f3ac262 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,18 @@ if(PSEMEK_BACKEND STREQUAL "ANDROID") set(PSEMEK_GL_LIBRARIES GLESv3 EGL) set(PSEMEK_PACKAGE_AS_LIBRARY ON CACHE INTERNAL "Build applications as shared libraries") list(APPEND PSEMEK_CXX_FLAGS -fPIC) +elseif(CMAKE_SYSTEM_NAME STREQUAL Emscripten) + set(PSEMEK_GL_API gles32) + set(PSEMEK_GL_LIBRARIES EGL) + set(PSEMEK_PACKAGE_AS_LIBRARY OFF CACHE INTERNAL "Build applications as shared libraries") + list(APPEND PSEMEK_DEFINITIONS "-DPSEMEK_GLES=1") + list(APPEND PSEMEK_CXX_FLAGS -sUSE_SDL=2) + # by default emcc doesn't produce catch clauses, but psemek is designed around exceptions + list(APPEND PSEMEK_CXX_FLAGS -sDISABLE_EXCEPTION_CATCHING=0) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + list(APPEND PSEMEK_CXX_FLAGS -g) + endif() + set(CMAKE_EXECUTABLE_SUFFIX ".html" PARENT_SCOPE) # we want to build html, not js else() find_package(Threads REQUIRED) set(OpenGL_GL_PREFERENCE LEGACY) diff --git a/libs/gfx/api/gles32/source/gl.cpp b/libs/gfx/api/gles32/source/gl.cpp index b2561305..8d5f7cea 100644 --- a/libs/gfx/api/gles32/source/gl.cpp +++ b/libs/gfx/api/gles32/source/gl.cpp @@ -11,7 +11,7 @@ #include #elif defined(_WIN32) #include -#elif defined(__ANDROID__) +#elif defined(__ANDROID__) || defined(__EMSCRIPTEN__) #include #else #include @@ -80,7 +80,7 @@ namespace gl return reinterpret_cast(GetProcAddress(image, reinterpret_cast(name))); } - #elif defined(__ANDROID__) + #elif defined(__ANDROID__) || defined(__EMSCRIPTEN__) static void * get_proc_address(const char *func) { diff --git a/libs/log/source/log.cpp b/libs/log/source/log.cpp index a452eca2..448d1ea3 100644 --- a/libs/log/source/log.cpp +++ b/libs/log/source/log.cpp @@ -149,9 +149,11 @@ namespace psemek::log #if __APPLE__ ::pthread_setname_np(name.data()); #else +#if !(defined __EMSCRIPTEN__) || (defined __EMSCRIPTEN_PTHREADS__) ::pthread_setname_np(::pthread_self(), name.data()); #endif #endif +#endif #endif auto id = std::this_thread::get_id(); diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index 79c0a35d..24105ba7 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -17,7 +17,13 @@ if(PSEMEK_PACKAGE_MODE) set(PSEMEK_PACKAGE_SUFFIX ${PSEMEK_PACKAGE_SUFFIX_RAW} CACHE INTERNAL "Packaging suffix" FORCE) set(PSEMEK_PACKAGE_LINK_FLAGS_RAW) - if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) + + if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) + list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-sMIN_WEBGL_VERSION=2" "-sNO_DISABLE_EXCEPTION_CATCHING") + if(CMAKE_BUILD_TYPE STREQUAL Debug) + list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-g") + endif() + elseif((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-static-libgcc" "-static-libstdc++") endif() set(PSEMEK_PACKAGE_LINK_FLAGS ${PSEMEK_PACKAGE_LINK_FLAGS_RAW} CACHE INTERNAL "Packaging CXX flags" FORCE) @@ -67,7 +73,7 @@ function(psemek_add_executable_impl target is_application) ) endif() - if(UNIX AND (NOT APPLE) AND (NOT ANDROID)) + if(UNIX AND (NOT APPLE) AND (NOT ANDROID) AND (NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten))) add_custom_command(TARGET ${target} POST_BUILD COMMAND chrpath -r . $ ) From 805826c160cb3099bfda84d6a24255f50496a206 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Sat, 1 Feb 2025 05:35:59 +0100 Subject: [PATCH 3/7] Set up packaging for web build --- libs/sdl2/CMakeLists.txt | 3 +++ package/CMakeLists.txt | 20 ++++++++++++++++++-- package/bin/psemek-package | 2 ++ package/web/Dockerfile | 16 ++++++++++++++++ package/web/build.sh | 7 +++++++ package/web/env-helper.sh | 6 ++++++ package/web/package.sh | 25 +++++++++++++++++++++++++ package/web/toolchain-host.cmake | 26 ++++++++++++++++++++++++++ 8 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 package/web/Dockerfile create mode 100755 package/web/build.sh create mode 100755 package/web/env-helper.sh create mode 100755 package/web/package.sh create mode 100644 package/web/toolchain-host.cmake diff --git a/libs/sdl2/CMakeLists.txt b/libs/sdl2/CMakeLists.txt index 730860ff..a5a1fef5 100644 --- a/libs/sdl2/CMakeLists.txt +++ b/libs/sdl2/CMakeLists.txt @@ -1,4 +1,7 @@ +# On web SDL is provided by emsdk itself +if(NOT CMAKE_SYSTEM_NAME STREQUAL Emscripten) find_package(SDL2 REQUIRED) +endif() file(GLOB_RECURSE PSEMEK_SDL2_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") file(GLOB_RECURSE PSEMEK_SDL2_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "source/*.cpp") diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index 24105ba7..2b46dd88 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -10,7 +10,11 @@ if(PSEMEK_PACKAGE_MODE) elseif(ANDROID) set(PSEMEK_PACKAGE_SUFFIX_RAW android) elseif(UNIX) - set(PSEMEK_PACKAGE_SUFFIX_RAW linux) + if (CMAKE_SYSTEM_NAME STREQUAL Emscripten) + set(PSEMEK_PACKAGE_SUFFIX_RAW web) + else() + set(PSEMEK_PACKAGE_SUFFIX_RAW linux) + endif() else() message(FATAL "Uknown system for packaging") endif() @@ -84,7 +88,19 @@ function(psemek_add_executable_impl target is_application) if(NOT ANDROID) get_filename_component(_OUTPUT_DIRECTORY "${_OUTPUT_PATH}" DIRECTORY) - set(_COPY_FILES $ ${PSEMEK_PACKAGE_COPY_FILES}) + set(_TARGET_FILE $) + + set(_TARGET_RUNTIME) + if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) + set(_TARGET_PARENT $) + set(_TARGET_STEM $) + set(_TARGET_NOEXT "${_TARGET_PARENT}/${_TARGET_STEM}") + + list(APPEND _TARGET_RUNTIME ${_TARGET_NOEXT}.js) + list(APPEND _TARGET_RUNTIME ${_TARGET_NOEXT}.wasm) + endif() + + set(_COPY_FILES ${_TARGET_FILE} ${_TARGET_RUNTIME} ${PSEMEK_PACKAGE_COPY_FILES}) if(PSEMEK_GRAPHICS_API STREQUAL WEBGPU) list(APPEND _COPY_FILES ${PSEMEK_PACKAGE_COPY_FILES_WEBGPU}) diff --git a/package/bin/psemek-package b/package/bin/psemek-package index 296993a9..e5956654 100755 --- a/package/bin/psemek-package +++ b/package/bin/psemek-package @@ -8,6 +8,7 @@ if [ "$#" -ne 2 ]; then echo " linux" echo " windows" echo " android" + echo " web" exit 0 fi @@ -15,6 +16,7 @@ case ${1} in linux) ;; windows) ;; android) ;; + web) ;; *) echo "Unknown platform: ${1}" exit -1 diff --git a/package/web/Dockerfile b/package/web/Dockerfile new file mode 100644 index 00000000..2a941924 --- /dev/null +++ b/package/web/Dockerfile @@ -0,0 +1,16 @@ +FROM lisyarus/psemek:package-linux + +# Install emsdk - the version the build was tested at +WORKDIR /home +RUN git clone --branch 3.1.46 https://github.com/emscripten-core/emsdk.git +WORKDIR /home/emsdk +RUN ./emsdk install 3.1.46 +RUN ./emsdk activate 3.1.46 +WORKDIR /home +COPY env-helper.sh . +# Source emsdk env variables when running the container +ENTRYPOINT ["/home/env-helper.sh"] + +# Install toolchain file & main packaging script +COPY toolchain-host.cmake . +COPY package.sh . diff --git a/package/web/build.sh b/package/web/build.sh new file mode 100755 index 00000000..2bb8a43d --- /dev/null +++ b/package/web/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -e + +cd "$(dirname "$0")" + +docker build -t lisyarus/psemek:package-web . diff --git a/package/web/env-helper.sh b/package/web/env-helper.sh new file mode 100755 index 00000000..d99df790 --- /dev/null +++ b/package/web/env-helper.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# emsdk provides some environment variables that need to be sourced from a file +source /home/emsdk/emsdk_env.sh + +exec "$@" diff --git a/package/web/package.sh b/package/web/package.sh new file mode 100755 index 00000000..ce5a5a85 --- /dev/null +++ b/package/web/package.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -e + +mkdir -p /home/build-host +cd /home/build-host +cmake ../source -DCMAKE_TOOLCHAIN_FILE=/home/toolchain-host.cmake -DCMAKE_INSTALL_PREFIX=/home/tools +cmake --build . -t install -j + +mkdir -p /home/build-target +cd /home/build-target +rm -rf ./* +# Use emsdk wrapper for cmake - it sets some env variables to select the +# right toolchain. +emcmake cmake \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DPSEMEK_PACKAGE_MODE=ON \ + -DPSEMEK_PACKAGE_HOST=OFF \ + -DPSEMEK_PACKAGE_TARGET=ON \ + -DPSEMEK_STACKTRACE=OFF \ + -DPSEMEK_PACKAGE_TOOLS_PATH=/home/tools \ + -DPSEMEK_PACKAGE_COPY_FILES= \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \ + ../source +cmake --build . -j diff --git a/package/web/toolchain-host.cmake b/package/web/toolchain-host.cmake new file mode 100644 index 00000000..b7ffd05c --- /dev/null +++ b/package/web/toolchain-host.cmake @@ -0,0 +1,26 @@ +set(CMAKE_C_COMPILER gcc) +set(CMAKE_CXX_COMPILER g++) +set(CMAKE_BUILD_TYPE Release) + +set(PSEMEK_PACKAGE_MODE ON) +set(PSEMEK_PACKAGE_ROOT "${CMAKE_CURRENT_LIST_DIR}") +set(PSEMEK_PACKAGE_HOST ON) +set(PSEMEK_PACKAGE_TARGET OFF) +set(PSEMEK_PACKAGE_TOOLS_PATH "${PSEMEK_PACKAGE_ROOT}/tools") +set(PSEMEK_STACKTRACE OFF) + +set(PSEMEK_PACKAGE_COPY_FILES + ${PSEMEK_PACKAGE_ROOT}/sdl2/install/lib/libSDL2-2.0.so.0 +) + +set(PSEMEK_PACKAGE_COPY_FILES_FREETYPE + ${PSEMEK_PACKAGE_ROOT}/libfreetype.so.6 +) + +list(APPEND CMAKE_PREFIX_PATH + "${PSEMEK_PACKAGE_ROOT}/sdl2/install" +) + +set(WGPU_NATIVE_ROOT + "${PSEMEK_PACKAGE_ROOT}/wgpu-native/install" +) From 8f32d814c8e1bb6ee4cecea0a7aa9a431153baf1 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Sun, 2 Feb 2025 22:51:23 +0100 Subject: [PATCH 4/7] Introduce BOOST_SOURCE_ROOT for out-of-tree Boost sources --- 3rdparty/CMakeLists.txt | 9 ++++++++- package/web/package.sh | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 51900e92..39b8217c 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -2,7 +2,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) set(BOOST_INCLUDE_LIBRARIES random stacktrace math) set(BOOST_ENABLE_COMPATIBILITY_TARGETS 1) add_compile_options(-fdeclspec) # math doesn't build otherwise - add_subdirectory(boost EXCLUDE_FROM_ALL) + + # Use out-of-tree sources for boost, since we can't use pre-built + # libraries for the web build + if(BOOST_SOURCE_ROOT) + add_subdirectory(${BOOST_SOURCE_ROOT} boost EXCLUDE_FROM_ALL) + else() + message(FATAL_ERROR "For web builds BOOST_SOURCE_ROOT must be provided") + endif() # TODO: make this available via find_package so we wouldn't have to # special-case it in every library diff --git a/package/web/package.sh b/package/web/package.sh index ce5a5a85..3cdb20db 100755 --- a/package/web/package.sh +++ b/package/web/package.sh @@ -13,6 +13,7 @@ rm -rf ./* # Use emsdk wrapper for cmake - it sets some env variables to select the # right toolchain. emcmake cmake \ + -DBOOST_SOURCE_ROOT=$(realpath ../source)/psemek/3rdparty/boost \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DPSEMEK_PACKAGE_MODE=ON \ -DPSEMEK_PACKAGE_HOST=OFF \ From 57fbda02b07fc5bbccbdccefbf2fb640cc0c03d4 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Sun, 2 Feb 2025 23:34:45 +0100 Subject: [PATCH 5/7] Provide boost sources from the docker image --- package/web/Dockerfile | 4 ++++ package/web/package.sh | 1 + 2 files changed, 5 insertions(+) diff --git a/package/web/Dockerfile b/package/web/Dockerfile index 2a941924..57307126 100644 --- a/package/web/Dockerfile +++ b/package/web/Dockerfile @@ -11,6 +11,10 @@ COPY env-helper.sh . # Source emsdk env variables when running the container ENTRYPOINT ["/home/env-helper.sh"] +# Install Boost sources +WORKDIR /home +RUN git clone --recurse-submodules --branch boost-1.87.0 https://github.com/boostorg/boost.git + # Install toolchain file & main packaging script COPY toolchain-host.cmake . COPY package.sh . diff --git a/package/web/package.sh b/package/web/package.sh index 3cdb20db..695fe547 100755 --- a/package/web/package.sh +++ b/package/web/package.sh @@ -19,6 +19,7 @@ emcmake cmake \ -DPSEMEK_PACKAGE_HOST=OFF \ -DPSEMEK_PACKAGE_TARGET=ON \ -DPSEMEK_STACKTRACE=OFF \ + -DBOOST_SOURCE_ROOT=/home/boost \ -DPSEMEK_PACKAGE_TOOLS_PATH=/home/tools \ -DPSEMEK_PACKAGE_COPY_FILES= \ -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \ From d290df3f29ef6933ef3dadb0b4024a60c9434579 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 3 Jul 2026 11:37:38 +0300 Subject: [PATCH 6/7] Fix unfortunate merge --- libs/util/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/util/CMakeLists.txt b/libs/util/CMakeLists.txt index 5d74b0ba..dc7e33a4 100644 --- a/libs/util/CMakeLists.txt +++ b/libs/util/CMakeLists.txt @@ -1,7 +1,7 @@ if(NOT (CMAKE_SYSTEM_NAME STREQUAL Emscripten)) # Boost.Math is header-only # Required for statistics.hpp - find_package(Boost COMPONENTS math REQUIRED CONFIG) + find_package(Boost REQUIRED CONFIG) endif() file(GLOB_RECURSE PSEMEK_UTIL_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "include/*.hpp") From a45d9b27793c6fb61402b06c7a62aa73f2698a8e Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 3 Jul 2026 11:38:03 +0300 Subject: [PATCH 7/7] More Emscripten build fixes --- CMakeLists.txt | 2 +- libs/journal/source/event.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 745e4492..906298fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Emscripten) set(PSEMEK_GL_LIBRARIES EGL) set(PSEMEK_PACKAGE_AS_LIBRARY OFF CACHE INTERNAL "Build applications as shared libraries") list(APPEND PSEMEK_DEFINITIONS "-DPSEMEK_GLES=1") - list(APPEND PSEMEK_CXX_FLAGS -sUSE_SDL=2) + list(APPEND PSEMEK_CXX_FLAGS -sUSE_SDL=2 -fexperimental-library) # by default emcc doesn't produce catch clauses, but psemek is designed around exceptions list(APPEND PSEMEK_CXX_FLAGS -sDISABLE_EXCEPTION_CATCHING=0) if(CMAKE_BUILD_TYPE STREQUAL Debug) diff --git a/libs/journal/source/event.cpp b/libs/journal/source/event.cpp index 62d43b17..538578dd 100644 --- a/libs/journal/source/event.cpp +++ b/libs/journal/source/event.cpp @@ -8,8 +8,12 @@ namespace psemek::journal std::string current_time() { +#ifndef __EMSCRIPTEN__ const auto now = std::chrono::system_clock::now(); return std::format("{:%FT%TZ}", now); +#else + return ""; +#endif } }