Skip to content

Commit 08829d2

Browse files
committed
feat: switch to embind instead of idl
Signed-off-by: Gordon Smith <[email protected]>
1 parent 39b68e0 commit 08829d2

File tree

19 files changed

+336
-371
lines changed

19 files changed

+336
-371
lines changed

packages/base91/src-cpp/CMakeLists.txt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,13 @@ set(EM_LINK_FLAGS
1010
"-sEXPORT_NAME='${CMAKE_PROJECT_NAME}'"
1111
"-sEXPORTED_FUNCTIONS=\"['_malloc']\""
1212
"-sEXPORTED_RUNTIME_METHODS=\"['UTF8ToString', 'HEAPU8']\""
13-
"--post-js ${CMAKE_CURRENT_BINARY_DIR}/main_glue.js"
13+
"-lembind"
1414
"--emit-tsd ${CMAKE_CURRENT_BINARY_DIR}/base91lib.d.ts"
1515
)
1616
string(REPLACE ";" " " LINK_FLAGS "${EM_LINK_FLAGS}")
1717

18-
# Generate Glue from IDL file ---
19-
add_custom_command(
20-
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/main.idl
21-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/main_glue.js ${CMAKE_CURRENT_BINARY_DIR}/main_glue.cpp
22-
COMMAND python3 ${CMAKE_BINARY_DIR}/../emsdk/upstream/emscripten/tools/webidl_binder.py ${CMAKE_CURRENT_SOURCE_DIR}/main.idl ${CMAKE_CURRENT_BINARY_DIR}/main_glue
23-
)
24-
set_property(SOURCE main.cpp APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/main_glue.cpp)
25-
# --- --- ---
26-
2718
include_directories(
2819
${VCPKG_INCLUDE_DIR}
29-
${CMAKE_CURRENT_BINARY_DIR}
3020
)
3121

3222
add_executable(base91lib

packages/base91/src-cpp/main.cpp

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#include <string>
2+
#include <cstdint>
23
#include <base91.hpp>
34

5+
#include <emscripten/bind.h>
6+
47
const char *const version = "0.6.0";
58

69
class CBasE91
@@ -14,17 +17,17 @@ class CBasE91
1417
reset();
1518
}
1619

17-
static void *malloc(size_t __size)
20+
uintptr_t malloc(size_t __size)
1821
{
19-
return ::malloc(__size);
22+
return reinterpret_cast<uintptr_t>(::malloc(__size));
2023
}
2124

22-
static void free(void *__ptr)
25+
void free(uintptr_t __ptr)
2326
{
24-
::free(__ptr);
27+
::free(reinterpret_cast<void *>(__ptr));
2528
}
2629

27-
const char *version()
30+
std::string version() const
2831
{
2932
return ::version;
3033
}
@@ -34,26 +37,37 @@ class CBasE91
3437
basE91_init(&m_basE91);
3538
}
3639

37-
size_t encode(const void *data, size_t dataLen, void *dataOut)
40+
size_t encode(uintptr_t data, size_t dataLen, uintptr_t dataOut)
3841
{
39-
return basE91_encode(&m_basE91, data, dataLen, dataOut);
42+
return basE91_encode(&m_basE91, reinterpret_cast<const void *>(data), dataLen, reinterpret_cast<void *>(dataOut));
4043
}
4144

42-
size_t encode_end(void *dataOut)
45+
size_t encode_end(uintptr_t dataOut)
4346
{
44-
return basE91_encode_end(&m_basE91, dataOut);
47+
return basE91_encode_end(&m_basE91, reinterpret_cast<void *>(dataOut));
4548
}
4649

47-
size_t decode(const void *data, size_t dataLen, void *dataOut)
50+
size_t decode(uintptr_t data, size_t dataLen, uintptr_t dataOut)
4851
{
49-
return basE91_decode(&m_basE91, data, dataLen, dataOut);
52+
return basE91_decode(&m_basE91, reinterpret_cast<const void *>(data), dataLen, reinterpret_cast<void *>(dataOut));
5053
}
5154

52-
size_t decode_end(void *dataOut)
55+
size_t decode_end(uintptr_t dataOut)
5356
{
54-
return basE91_decode_end(&m_basE91, dataOut);
57+
return basE91_decode_end(&m_basE91, reinterpret_cast<void *>(dataOut));
5558
}
5659
};
5760

58-
// Include JS Glue ---
59-
#include "main_glue.cpp"
61+
EMSCRIPTEN_BINDINGS(base91lib_bindings)
62+
{
63+
emscripten::class_<CBasE91>("CBasE91")
64+
.constructor<>()
65+
.function("malloc", &CBasE91::malloc)
66+
.function("free", &CBasE91::free)
67+
.function("version", &CBasE91::version)
68+
.function("reset", &CBasE91::reset)
69+
.function("encode", &CBasE91::encode)
70+
.function("encode_end", &CBasE91::encode_end)
71+
.function("decode", &CBasE91::decode)
72+
.function("decode_end", &CBasE91::decode_end);
73+
}

packages/base91/src-cpp/main.idl

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,31 @@
1-
add_subdirectory(expatlib)
1+
project(expatlib)
2+
3+
find_package(expat CONFIG REQUIRED)
4+
5+
# See: https://github.com/emscripten-core/emscripten/blob/main/src/settings.js
6+
string(REPLACE ";" " " CPP_FLAGS "${EM_CPP_FLAGS}")
7+
8+
set(EM_LINK_FLAGS
9+
${EM_LINK_FLAGS}
10+
"-sEXPORT_NAME='${CMAKE_PROJECT_NAME}'"
11+
"-sEXPORTED_FUNCTIONS=\"['_malloc']\""
12+
"-sEXPORTED_RUNTIME_METHODS=\"[UTF8ToString]\""
13+
"-lembind"
14+
"--emit-tsd ${CMAKE_CURRENT_BINARY_DIR}/expatlib.d.ts"
15+
)
16+
string(REPLACE ";" " " LINK_FLAGS "${EM_LINK_FLAGS}")
17+
18+
include_directories(
19+
${VCPKG_INCLUDE_DIR}
20+
)
21+
22+
add_executable(expatlib
23+
main.cpp
24+
)
25+
26+
set_target_properties(expatlib PROPERTIES COMPILE_FLAGS "${CPP_FLAGS}")
27+
set_target_properties(expatlib PROPERTIES LINK_FLAGS "${LINK_FLAGS}")
28+
29+
target_link_libraries(expatlib
30+
expat::expat
31+
)

packages/expat/src-cpp/expatlib/CMakeLists.txt

Lines changed: 0 additions & 41 deletions
This file was deleted.

packages/expat/src-cpp/expatlib/main.cpp

Lines changed: 0 additions & 106 deletions
This file was deleted.

packages/expat/src-cpp/expatlib/main.idl

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)