diff --git a/CMakeLists.txt b/CMakeLists.txt index 48210b0..a5f36b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ option(PXC_ENABLE_ASAN "phoenix-shared: Enable sanitizers in debug builds." ON) add_subdirectory(vendor/phoenix) -set(PXC_SOURCES +list(APPEND PXC_SOURCES src/Animation.cc src/BspTree.cc src/Buffer.cc @@ -37,7 +37,15 @@ set(PXC_SOURCES bs_select_cflags(${PXC_ENABLE_ASAN} PXC_COMPILE_FLAGS PXC_LINK_FLAGS) -add_library(phoenix-shared SHARED) +if (EMSCRIPTEN) + list(APPEND PXC_SOURCES src/Main.cc) + list(APPEND PXC_COMPILE_FLAGS -fexceptions) + list(APPEND PXC_LINK_FLAGS -sWASM=1 -sMODULARIZE -sEXPORTED_FUNCTIONS=_malloc,_free -sEXPORTED_RUNTIME_METHODS=ccall,cwrap,addFunction,AsciiToString,setValue,getValue -sSINGLE_FILE=1 -sALLOW_MEMORY_GROWTH=1 -sALLOW_TABLE_GROWTH=1 -fexceptions) + add_executable(phoenix-shared) +else () + add_library(phoenix-shared SHARED) +endif () + set_target_properties(phoenix-shared PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) target_sources(phoenix-shared PRIVATE ${PXC_SOURCES}) diff --git a/include/phoenix/cffi/Api.h b/include/phoenix/cffi/Api.h index ca8387d..69f51ff 100644 --- a/include/phoenix/cffi/Api.h +++ b/include/phoenix/cffi/Api.h @@ -3,8 +3,15 @@ #pragma once #include +#ifdef __EMSCRIPTEN__ + #include + #define PXC_PRELUDE EMSCRIPTEN_KEEPALIVE +#else + #define PXC_PRELUDE +#endif + #ifdef __cplusplus - #define PXC_EXTERN extern "C" + #define PXC_EXTERN extern "C" PXC_PRELUDE #else #define PXC_EXTERN #endif diff --git a/src/Buffer.cc b/src/Buffer.cc index 524d821..c7f9535 100644 --- a/src/Buffer.cc +++ b/src/Buffer.cc @@ -66,7 +66,7 @@ uint64_t pxBufferSize(PxBuffer* buffer) { } uint8_t* pxBufferArray(PxBuffer* buffer) { - auto* data = new std::uint8_t[buffer->limit()]; + auto* data = new std::uint8_t[(size_t) buffer->limit()]; buffer->get(data, buffer->limit()); return data; } diff --git a/src/Main.cc b/src/Main.cc new file mode 100644 index 0000000..9d1312e --- /dev/null +++ b/src/Main.cc @@ -0,0 +1,7 @@ +// Copyright © 2023. GothicKit Contributors +// SPDX-License-Identifier: MIT + +// Dummy main for Emscripten! +int main(int, char**) { + return 0; +}