emnapi 0.43.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +9 -1
- package/README.md +8 -0
- package/dist/library_napi.js +80 -9
- package/include/emnapi.h +8 -4
- package/include/emnapi_common.h +10 -4
- package/include/js_native_api.h +7 -7
- package/include/node_api.h +15 -21
- package/index.js +0 -1
- package/lib/wasm32/libemnapi-basic-mt.a +0 -0
- package/lib/wasm32/libemnapi-basic.a +0 -0
- package/lib/wasm32/libemnapi.a +0 -0
- package/lib/wasm32-emscripten/libemnapi-basic.a +0 -0
- package/lib/wasm32-emscripten/libemnapi-mt.a +0 -0
- package/lib/wasm32-emscripten/libemnapi.a +0 -0
- package/lib/wasm32-wasi/libemnapi-basic-mt.a +0 -0
- package/lib/wasm32-wasi/libemnapi-basic.a +0 -0
- package/lib/wasm32-wasi/libemnapi.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-basic-mt.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-basic.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi-mt.a +0 -0
- package/lib/wasm32-wasi-threads/libemnapi.a +0 -0
- package/package.json +3 -2
- package/src/js_native_api.c +0 -34
- package/src/thread/async_worker_create.c +1 -0
- package/src/emnapi.c +0 -21
package/CMakeLists.txt
CHANGED
|
@@ -29,7 +29,6 @@ set(UV_SRC
|
|
|
29
29
|
set(ENAPI_BASIC_SRC
|
|
30
30
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/js_native_api.c"
|
|
31
31
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/node_api.c"
|
|
32
|
-
"${CMAKE_CURRENT_SOURCE_DIR}/src/emnapi.c"
|
|
33
32
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/async_cleanup_hook.c"
|
|
34
33
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/async_context.c"
|
|
35
34
|
)
|
|
@@ -40,11 +39,16 @@ set(EMNAPI_THREADS_SRC
|
|
|
40
39
|
set(EMNAPI_SRC ${ENAPI_BASIC_SRC} ${EMNAPI_THREADS_SRC})
|
|
41
40
|
|
|
42
41
|
set(EMNAPI_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
|
42
|
+
set(EMNAPI_DEFINES "BUILDING_NODE_EXTENSION")
|
|
43
43
|
|
|
44
44
|
set(EMNAPI_JS_LIB "${CMAKE_CURRENT_SOURCE_DIR}/dist/library_napi.js")
|
|
45
45
|
|
|
46
46
|
if(IS_EMSCRIPTEN)
|
|
47
47
|
set(EMNAPI_MT_CFLAGS "-pthread" "-sWASM_WORKERS=1")
|
|
48
|
+
|
|
49
|
+
# https://github.com/emscripten-core/emscripten/issues/20035
|
|
50
|
+
# https://github.com/emscripten-core/emscripten/pull/20130
|
|
51
|
+
list(APPEND EMNAPI_DEFINES "NAPI_EXTERN=__attribute__((__import_module__(\"env\")))")
|
|
48
52
|
else()
|
|
49
53
|
set(EMNAPI_MT_CFLAGS "-pthread")
|
|
50
54
|
endif()
|
|
@@ -115,12 +119,14 @@ endif()
|
|
|
115
119
|
|
|
116
120
|
add_library(${EMNAPI_TARGET_NAME} STATIC ${EMNAPI_SRC} ${UV_SRC})
|
|
117
121
|
target_include_directories(${EMNAPI_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
122
|
+
target_compile_definitions(${EMNAPI_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
|
|
118
123
|
if(IS_EMSCRIPTEN)
|
|
119
124
|
target_link_options(${EMNAPI_TARGET_NAME} INTERFACE "--js-library=${EMNAPI_JS_LIB}")
|
|
120
125
|
endif()
|
|
121
126
|
|
|
122
127
|
add_library(${EMNAPI_BASIC_TARGET_NAME} STATIC ${ENAPI_BASIC_SRC})
|
|
123
128
|
target_include_directories(${EMNAPI_BASIC_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
129
|
+
target_compile_definitions(${EMNAPI_BASIC_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
|
|
124
130
|
if(IS_EMSCRIPTEN)
|
|
125
131
|
target_link_options(${EMNAPI_BASIC_TARGET_NAME} INTERFACE "--js-library=${EMNAPI_JS_LIB}")
|
|
126
132
|
endif()
|
|
@@ -139,6 +145,7 @@ if(EMNAPI_BUILD_BASIC_MT)
|
|
|
139
145
|
)
|
|
140
146
|
target_compile_options(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC "-matomics" "-mbulk-memory")
|
|
141
147
|
target_include_directories(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
148
|
+
target_compile_definitions(${EMNAPI_BASIC_MT_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
|
|
142
149
|
endif()
|
|
143
150
|
|
|
144
151
|
if(IS_EMSCRIPTEN OR (CMAKE_C_COMPILER_TARGET STREQUAL "wasm32-wasi-threads"))
|
|
@@ -151,6 +158,7 @@ if(EMNAPI_BUILD_MT)
|
|
|
151
158
|
add_library(${EMNAPI_MT_TARGET_NAME} STATIC ${EMNAPI_SRC} ${UV_SRC})
|
|
152
159
|
target_compile_options(${EMNAPI_MT_TARGET_NAME} PRIVATE ${EMNAPI_MT_CFLAGS})
|
|
153
160
|
target_include_directories(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})
|
|
161
|
+
target_compile_definitions(${EMNAPI_MT_TARGET_NAME} PUBLIC ${EMNAPI_DEFINES})
|
|
154
162
|
if(IS_EMSCRIPTEN)
|
|
155
163
|
target_link_options(${EMNAPI_MT_TARGET_NAME} INTERFACE "--js-library=${EMNAPI_JS_LIB}")
|
|
156
164
|
endif()
|
package/README.md
CHANGED
|
@@ -165,6 +165,8 @@ module.exports = (function (exports) {
|
|
|
165
165
|
|
|
166
166
|
```bash
|
|
167
167
|
emcc -O3 \
|
|
168
|
+
-DBUILDING_NODE_EXTENSION \
|
|
169
|
+
"-DNAPI_EXTERN=__attribute__((__import_module__(\"env\")))" \
|
|
168
170
|
-I./node_modules/emnapi/include \
|
|
169
171
|
-L./node_modules/emnapi/lib/wasm32-emscripten \
|
|
170
172
|
--js-library=./node_modules/emnapi/dist/library_napi.js \
|
|
@@ -181,6 +183,7 @@ emcc -O3 \
|
|
|
181
183
|
|
|
182
184
|
```bash
|
|
183
185
|
clang -O3 \
|
|
186
|
+
-DBUILDING_NODE_EXTENSION \
|
|
184
187
|
-I./node_modules/emnapi/include \
|
|
185
188
|
-L./node_modules/emnapi/lib/wasm32-wasi \
|
|
186
189
|
--target=wasm32-wasi \
|
|
@@ -208,6 +211,7 @@ Choose `libdlmalloc.a` or `libemmalloc.a` for `malloc` and `free`.
|
|
|
208
211
|
|
|
209
212
|
```bash
|
|
210
213
|
clang -O3 \
|
|
214
|
+
-DBUILDING_NODE_EXTENSION \
|
|
211
215
|
-I./node_modules/emnapi/include \
|
|
212
216
|
-L./node_modules/emnapi/lib/wasm32 \
|
|
213
217
|
--target=wasm32 \
|
|
@@ -448,6 +452,8 @@ Compile `hello.cpp` using `em++`. C++ exception is disabled by Emscripten defaul
|
|
|
448
452
|
|
|
449
453
|
```bash
|
|
450
454
|
em++ -O3 \
|
|
455
|
+
-DBUILDING_NODE_EXTENSION \
|
|
456
|
+
"-DNAPI_EXTERN=__attribute__((__import_module__(\"env\")))" \
|
|
451
457
|
-DNAPI_DISABLE_CPP_EXCEPTIONS \
|
|
452
458
|
-DNODE_ADDON_API_ENABLE_MAYBE \
|
|
453
459
|
-I./node_modules/emnapi/include \
|
|
@@ -467,6 +473,7 @@ em++ -O3 \
|
|
|
467
473
|
|
|
468
474
|
```bash
|
|
469
475
|
clang++ -O3 \
|
|
476
|
+
-DBUILDING_NODE_EXTENSION \
|
|
470
477
|
-DNAPI_DISABLE_CPP_EXCEPTIONS \
|
|
471
478
|
-DNODE_ADDON_API_ENABLE_MAYBE \
|
|
472
479
|
-I./node_modules/emnapi/include \
|
|
@@ -500,6 +507,7 @@ You can still use `wasm32-unknown-unknown` target if you use Node-API C API only
|
|
|
500
507
|
|
|
501
508
|
```bash
|
|
502
509
|
clang++ -O3 \
|
|
510
|
+
-DBUILDING_NODE_EXTENSION \
|
|
503
511
|
-I./node_modules/emnapi/include \
|
|
504
512
|
-L./node_modules/emnapi/lib/wasm32 \
|
|
505
513
|
--target=wasm32 \
|
package/dist/library_napi.js
CHANGED
|
@@ -407,6 +407,28 @@ function emnapi_get_memory_address(env, arraybuffer_or_view, address, ownership,
|
|
|
407
407
|
return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
|
|
408
408
|
}
|
|
409
409
|
}
|
|
410
|
+
function emnapi_get_runtime_version(env, version) {
|
|
411
|
+
if (!env)
|
|
412
|
+
return 1 /* napi_status.napi_invalid_arg */;
|
|
413
|
+
var envObject = emnapiCtx.envStore.get(env);
|
|
414
|
+
if (!version)
|
|
415
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
416
|
+
var runtimeVersion;
|
|
417
|
+
try {
|
|
418
|
+
runtimeVersion = emnapiCtx.getRuntimeVersions().version;
|
|
419
|
+
}
|
|
420
|
+
catch (_) {
|
|
421
|
+
return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
|
|
422
|
+
}
|
|
423
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
424
|
+
var versions = runtimeVersion.split('.')
|
|
425
|
+
.map(function (n) { return Number(n); });
|
|
426
|
+
{{{ from64('version') }}};
|
|
427
|
+
{{{ makeSetValue('version', 0, 'versions[0]', 'u32') }}};
|
|
428
|
+
{{{ makeSetValue('version', 4, 'versions[1]', 'u32') }}};
|
|
429
|
+
{{{ makeSetValue('version', 8, 'versions[2]', 'u32') }}};
|
|
430
|
+
return envObject.clearLastError();
|
|
431
|
+
}
|
|
410
432
|
emnapiImplementHelper('$emnapiSyncMemory', undefined, emnapiSyncMemory, ['$emnapiExternalMemory'], 'syncMemory');
|
|
411
433
|
emnapiImplementHelper('$emnapiGetMemoryAddress', undefined, emnapiGetMemoryAddress, ['$emnapiExternalMemory'], 'getMemoryAddress');
|
|
412
434
|
emnapiImplement2('emnapi_is_support_weakref', 'i', emnapi_is_support_weakref);
|
|
@@ -415,6 +437,7 @@ emnapiImplement2('emnapi_is_node_binding_available', 'i', emnapi_is_node_binding
|
|
|
415
437
|
emnapiImplement2('emnapi_create_memory_view', 'ipippppp', _emnapi_create_memory_view, ['napi_add_finalizer', '$emnapiExternalMemory']);
|
|
416
438
|
emnapiImplement2('emnapi_sync_memory', 'ipippp', emnapi_sync_memory, ['$emnapiSyncMemory']);
|
|
417
439
|
emnapiImplement2('emnapi_get_memory_address', 'ipppp', emnapi_get_memory_address, ['$emnapiGetMemoryAddress']);
|
|
440
|
+
emnapiImplement2('emnapi_get_runtime_version', 'ipp', emnapi_get_runtime_version);
|
|
418
441
|
function napi_set_instance_data(env, data, finalize_cb, finalize_hint) {
|
|
419
442
|
if (!env)
|
|
420
443
|
return 1 /* napi_status.napi_invalid_arg */;
|
|
@@ -4977,6 +5000,16 @@ function napi_get_value_int32(env, value, result) {
|
|
|
4977
5000
|
{{{ makeSetValue('result', 0, 'handle.value', 'i32') }}};
|
|
4978
5001
|
return envObject.clearLastError();
|
|
4979
5002
|
}
|
|
5003
|
+
function emnapiSetValueI64(result, numberValue) {
|
|
5004
|
+
var tempDouble;
|
|
5005
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5006
|
+
var tempI64 = [
|
|
5007
|
+
numberValue >>> 0,
|
|
5008
|
+
(tempDouble = numberValue, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)
|
|
5009
|
+
];
|
|
5010
|
+
{{{ makeSetValue('result', 0, 'tempI64[0]', 'i32') }}};
|
|
5011
|
+
{{{ makeSetValue('result', 4, 'tempI64[1]', 'i32') }}};
|
|
5012
|
+
}
|
|
4980
5013
|
function napi_get_value_int64(env, value, result) {
|
|
4981
5014
|
if (!env)
|
|
4982
5015
|
return 1 /* napi_status.napi_invalid_arg */;
|
|
@@ -4992,7 +5025,6 @@ function napi_get_value_int64(env, value, result) {
|
|
|
4992
5025
|
}
|
|
4993
5026
|
var numberValue = handle.value;
|
|
4994
5027
|
{{{ from64('result') }}};
|
|
4995
|
-
var tempI64;
|
|
4996
5028
|
if (numberValue === Number.POSITIVE_INFINITY || numberValue === Number.NEGATIVE_INFINITY || isNaN(numberValue)) {
|
|
4997
5029
|
{{{ makeSetValue('result', 0, '0', 'i32') }}};
|
|
4998
5030
|
{{{ makeSetValue('result', 4, '0', 'i32') }}};
|
|
@@ -5006,13 +5038,7 @@ function napi_get_value_int64(env, value, result) {
|
|
|
5006
5038
|
{{{ makeSetValue('result', 4, '0x7fffffff', 'u32') }}};
|
|
5007
5039
|
}
|
|
5008
5040
|
else {
|
|
5009
|
-
|
|
5010
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5011
|
-
= void 0;
|
|
5012
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5013
|
-
tempI64 = [numberValue >>> 0, (tempDouble = numberValue, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)];
|
|
5014
|
-
{{{ makeSetValue('result', 0, 'tempI64[0]', 'i32') }}};
|
|
5015
|
-
{{{ makeSetValue('result', 4, 'tempI64[1]', 'i32') }}};
|
|
5041
|
+
emnapiSetValueI64(result, numberValue);
|
|
5016
5042
|
}
|
|
5017
5043
|
return envObject.clearLastError();
|
|
5018
5044
|
}
|
|
@@ -5139,6 +5165,7 @@ function napi_get_value_uint32(env, value, result) {
|
|
|
5139
5165
|
{{{ makeSetValue('result', 0, 'handle.value', 'u32') }}};
|
|
5140
5166
|
return envObject.clearLastError();
|
|
5141
5167
|
}
|
|
5168
|
+
emnapiImplementHelper('$emnapiSetValueI64', undefined, emnapiSetValueI64, undefined);
|
|
5142
5169
|
emnapiImplement('napi_get_array_length', 'ippp', napi_get_array_length);
|
|
5143
5170
|
emnapiImplement('napi_get_arraybuffer_info', 'ipppp', napi_get_arraybuffer_info, ['$emnapiExternalMemory']);
|
|
5144
5171
|
emnapiImplement('napi_get_prototype', 'ippp', napi_get_prototype);
|
|
@@ -5153,7 +5180,7 @@ emnapiImplement('napi_get_value_bigint_uint64', 'ipppp', napi_get_value_bigint_u
|
|
|
5153
5180
|
emnapiImplement('napi_get_value_bigint_words', 'ippppp', napi_get_value_bigint_words);
|
|
5154
5181
|
emnapiImplement('napi_get_value_external', 'ippp', napi_get_value_external);
|
|
5155
5182
|
emnapiImplement('napi_get_value_int32', 'ippp', napi_get_value_int32);
|
|
5156
|
-
emnapiImplement('napi_get_value_int64', 'ippp', napi_get_value_int64);
|
|
5183
|
+
emnapiImplement('napi_get_value_int64', 'ippp', napi_get_value_int64, ['$emnapiSetValueI64']);
|
|
5157
5184
|
emnapiImplement('napi_get_value_string_latin1', 'ippppp', napi_get_value_string_latin1);
|
|
5158
5185
|
emnapiImplement('napi_get_value_string_utf8', 'ippppp', napi_get_value_string_utf8, ['$emnapiString']);
|
|
5159
5186
|
emnapiImplement('napi_get_value_string_utf16', 'ippppp', napi_get_value_string_utf16, ['$emnapiString']);
|
|
@@ -6224,6 +6251,50 @@ function __emnapi_async_work_pool_size() {
|
|
|
6224
6251
|
return Math.abs(emnapiAsyncWorkPoolSize);
|
|
6225
6252
|
}
|
|
6226
6253
|
emnapiImplementInternal('_emnapi_async_work_pool_size', 'i', __emnapi_async_work_pool_size, ['$emnapiAsyncWorkPoolSize']);
|
|
6254
|
+
function _napi_adjust_external_memory(env, low, high, adjusted_value) {
|
|
6255
|
+
if (!env)
|
|
6256
|
+
return 1 /* napi_status.napi_invalid_arg */;
|
|
6257
|
+
var envObject = emnapiCtx.envStore.get(env);
|
|
6258
|
+
var change_in_bytes;
|
|
6259
|
+
#if WASM_BIGINT
|
|
6260
|
+
if (!high)
|
|
6261
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
6262
|
+
change_in_bytes = Number(low);
|
|
6263
|
+
#else
|
|
6264
|
+
if (!adjusted_value)
|
|
6265
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
6266
|
+
change_in_bytes = (low >>> 0) + (high * Math.pow(2, 32));
|
|
6267
|
+
#endif
|
|
6268
|
+
if (change_in_bytes < 0) {
|
|
6269
|
+
return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
|
|
6270
|
+
}
|
|
6271
|
+
if (change_in_bytes > 0) {
|
|
6272
|
+
var old_size = wasmMemory.buffer.byteLength;
|
|
6273
|
+
var new_size = old_size + change_in_bytes;
|
|
6274
|
+
if (!_emscripten_resize_heap(new_size)) {
|
|
6275
|
+
return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
|
|
6276
|
+
}
|
|
6277
|
+
}
|
|
6278
|
+
#if WASM_BIGINT
|
|
6279
|
+
{{{ from64('high') }}};
|
|
6280
|
+
if (emnapiCtx.feature.supportBigInt) {
|
|
6281
|
+
{{{ makeSetValue('high', 0, 'wasmMemory.buffer.byteLength', 'i64') }}};
|
|
6282
|
+
}
|
|
6283
|
+
else {
|
|
6284
|
+
emnapiSetValueI64(high, wasmMemory.buffer.byteLength);
|
|
6285
|
+
}
|
|
6286
|
+
#else
|
|
6287
|
+
{{{ from64('adjusted_value') }}};
|
|
6288
|
+
{{{ makeSetValue('adjusted_value', 0, 'wasmMemory.buffer.byteLength', 'i64') }}};
|
|
6289
|
+
#endif
|
|
6290
|
+
return envObject.clearLastError();
|
|
6291
|
+
}
|
|
6292
|
+
emnapiImplement('napi_adjust_external_memory', 'ipjp', _napi_adjust_external_memory, [
|
|
6293
|
+
#if WASM_BIGINT
|
|
6294
|
+
'$emnapiSetValueI64',
|
|
6295
|
+
#endif
|
|
6296
|
+
'emscripten_resize_heap'
|
|
6297
|
+
]);
|
|
6227
6298
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
6228
6299
|
function emnapiImplement(name, sig, compilerTimeFunction, deps) {
|
|
6229
6300
|
var _a;
|
package/include/emnapi.h
CHANGED
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
#include "js_native_api_types.h"
|
|
6
6
|
#include "emnapi_common.h"
|
|
7
7
|
|
|
8
|
+
#define EMNAPI_MAJOR_VERSION 0
|
|
9
|
+
#define EMNAPI_MINOR_VERSION 44
|
|
10
|
+
#define EMNAPI_PATCH_VERSION 0
|
|
11
|
+
|
|
8
12
|
typedef enum {
|
|
9
13
|
emnapi_runtime,
|
|
10
14
|
emnapi_userland,
|
|
@@ -41,17 +45,17 @@ EMNAPI_EXTERN
|
|
|
41
45
|
napi_status emnapi_get_module_property(napi_env env,
|
|
42
46
|
const char* utf8name,
|
|
43
47
|
napi_value* result);
|
|
48
|
+
#endif
|
|
44
49
|
|
|
45
50
|
typedef struct {
|
|
46
51
|
uint32_t major;
|
|
47
52
|
uint32_t minor;
|
|
48
53
|
uint32_t patch;
|
|
49
|
-
}
|
|
54
|
+
} emnapi_runtime_version;
|
|
50
55
|
|
|
51
56
|
EMNAPI_EXTERN
|
|
52
|
-
napi_status
|
|
53
|
-
|
|
54
|
-
#endif
|
|
57
|
+
napi_status emnapi_get_runtime_version(napi_env env,
|
|
58
|
+
emnapi_runtime_version* version);
|
|
55
59
|
|
|
56
60
|
EMNAPI_EXTERN
|
|
57
61
|
napi_status emnapi_create_memory_view(napi_env env,
|
package/include/emnapi_common.h
CHANGED
|
@@ -2,23 +2,29 @@
|
|
|
2
2
|
#define EMNAPI_INCLUDE_COMMON_H_
|
|
3
3
|
|
|
4
4
|
#ifdef __EMSCRIPTEN__
|
|
5
|
-
#define NAPI_EXTERN __attribute__((__import_module__("env")))
|
|
6
|
-
|
|
7
5
|
#define EMNAPI_EXTERN __attribute__((__import_module__("env")))
|
|
8
6
|
#else
|
|
9
|
-
#define NAPI_EXTERN __attribute__((__import_module__("napi")))
|
|
10
|
-
|
|
11
7
|
#define EMNAPI_EXTERN __attribute__((__import_module__("emnapi")))
|
|
12
8
|
#endif
|
|
13
9
|
|
|
14
10
|
#define EMNAPI_INTERNAL_EXTERN __attribute__((__import_module__("env")))
|
|
15
11
|
|
|
16
12
|
#ifdef __cplusplus
|
|
13
|
+
#ifndef EXTERN_C_START
|
|
17
14
|
#define EXTERN_C_START extern "C" {
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
#ifndef EXTERN_C_END
|
|
18
18
|
#define EXTERN_C_END }
|
|
19
|
+
#endif
|
|
19
20
|
#else
|
|
21
|
+
#ifndef EXTERN_C_START
|
|
20
22
|
#define EXTERN_C_START
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#ifndef EXTERN_C_END
|
|
21
26
|
#define EXTERN_C_END
|
|
22
27
|
#endif
|
|
28
|
+
#endif
|
|
23
29
|
|
|
24
30
|
#endif
|
package/include/js_native_api.h
CHANGED
|
@@ -21,15 +21,20 @@
|
|
|
21
21
|
#endif
|
|
22
22
|
#endif
|
|
23
23
|
|
|
24
|
+
#ifndef EMNAPI_UNMODIFIED_UPSTREAM
|
|
25
|
+
#if !defined(NAPI_EXTERN) && defined(__EMSCRIPTEN__)
|
|
26
|
+
#define NAPI_EXTERN __attribute__((__import_module__("env")))
|
|
27
|
+
#endif
|
|
28
|
+
#endif
|
|
29
|
+
|
|
24
30
|
#include "js_native_api_types.h"
|
|
25
31
|
|
|
26
|
-
#ifdef EMNAPI_UNMODIFIED_UPSTREAM
|
|
27
32
|
// If you need __declspec(dllimport), either include <node_api.h> instead, or
|
|
28
33
|
// define NAPI_EXTERN as __declspec(dllimport) on the compiler's command line.
|
|
29
34
|
#ifndef NAPI_EXTERN
|
|
30
35
|
#ifdef _WIN32
|
|
31
36
|
#define NAPI_EXTERN __declspec(dllexport)
|
|
32
|
-
#elif defined(
|
|
37
|
+
#elif defined(__wasm__)
|
|
33
38
|
#define NAPI_EXTERN \
|
|
34
39
|
__attribute__((visibility("default"))) \
|
|
35
40
|
__attribute__((__import_module__("napi")))
|
|
@@ -37,13 +42,9 @@
|
|
|
37
42
|
#define NAPI_EXTERN __attribute__((visibility("default")))
|
|
38
43
|
#endif
|
|
39
44
|
#endif
|
|
40
|
-
#else
|
|
41
|
-
#include "emnapi_common.h"
|
|
42
|
-
#endif
|
|
43
45
|
|
|
44
46
|
#define NAPI_AUTO_LENGTH SIZE_MAX
|
|
45
47
|
|
|
46
|
-
#ifdef EMNAPI_UNMODIFIED_UPSTREAM
|
|
47
48
|
#ifdef __cplusplus
|
|
48
49
|
#define EXTERN_C_START extern "C" {
|
|
49
50
|
#define EXTERN_C_END }
|
|
@@ -51,7 +52,6 @@
|
|
|
51
52
|
#define EXTERN_C_START
|
|
52
53
|
#define EXTERN_C_END
|
|
53
54
|
#endif
|
|
54
|
-
#endif
|
|
55
55
|
|
|
56
56
|
EXTERN_C_START
|
|
57
57
|
|
package/include/node_api.h
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
#ifndef SRC_NODE_API_H_
|
|
2
2
|
#define SRC_NODE_API_H_
|
|
3
3
|
|
|
4
|
-
#
|
|
5
|
-
#
|
|
4
|
+
#ifndef EMNAPI_UNMODIFIED_UPSTREAM
|
|
5
|
+
#ifndef BUILDING_NODE_EXTENSION
|
|
6
|
+
#define BUILDING_NODE_EXTENSION
|
|
7
|
+
#endif
|
|
8
|
+
|
|
9
|
+
#if !defined(NAPI_EXTERN) && defined(__EMSCRIPTEN__)
|
|
10
|
+
#define NAPI_EXTERN __attribute__((__import_module__("env")))
|
|
11
|
+
#endif
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
#if defined(BUILDING_NODE_EXTENSION) && !defined(NAPI_EXTERN)
|
|
6
15
|
#ifdef _WIN32
|
|
7
16
|
// Building native addon against node
|
|
8
17
|
#define NAPI_EXTERN __declspec(dllimport)
|
|
9
|
-
#elif defined(
|
|
18
|
+
#elif defined(__wasm__)
|
|
10
19
|
#define NAPI_EXTERN __attribute__((__import_module__("napi")))
|
|
11
20
|
#endif
|
|
12
21
|
#endif
|
|
13
|
-
#endif
|
|
14
22
|
#include "js_native_api.h"
|
|
15
23
|
#include "node_api_types.h"
|
|
16
24
|
|
|
@@ -19,16 +27,13 @@ struct uv_loop_s; // Forward declaration.
|
|
|
19
27
|
#ifdef _WIN32
|
|
20
28
|
#define NAPI_MODULE_EXPORT __declspec(dllexport)
|
|
21
29
|
#else
|
|
22
|
-
#ifdef EMNAPI_UNMODIFIED_UPSTREAM
|
|
23
|
-
#define NAPI_MODULE_EXPORT __attribute__((visibility("default")))
|
|
24
|
-
#else
|
|
25
30
|
#ifdef __EMSCRIPTEN__
|
|
26
|
-
#define NAPI_MODULE_EXPORT
|
|
31
|
+
#define NAPI_MODULE_EXPORT \
|
|
32
|
+
__attribute__((visibility("default"))) __attribute__((used))
|
|
27
33
|
#else
|
|
28
34
|
#define NAPI_MODULE_EXPORT __attribute__((visibility("default")))
|
|
29
35
|
#endif
|
|
30
36
|
#endif
|
|
31
|
-
#endif
|
|
32
37
|
|
|
33
38
|
#if defined(__GNUC__)
|
|
34
39
|
#define NAPI_NO_RETURN __attribute__((noreturn))
|
|
@@ -59,19 +64,11 @@ typedef struct napi_module {
|
|
|
59
64
|
NAPI_MODULE_INITIALIZER_X_HELPER(base, version)
|
|
60
65
|
#define NAPI_MODULE_INITIALIZER_X_HELPER(base, version) base##version
|
|
61
66
|
|
|
62
|
-
#ifdef EMNAPI_UNMODIFIED_UPSTREAM
|
|
63
|
-
#ifdef __wasm32__
|
|
64
|
-
#define NAPI_MODULE_INITIALIZER_BASE napi_register_wasm_v
|
|
65
|
-
#else
|
|
66
|
-
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
|
|
67
|
-
#endif
|
|
68
|
-
#else
|
|
69
67
|
#ifdef __wasm__
|
|
70
68
|
#define NAPI_MODULE_INITIALIZER_BASE napi_register_wasm_v
|
|
71
69
|
#else
|
|
72
70
|
#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v
|
|
73
71
|
#endif
|
|
74
|
-
#endif
|
|
75
72
|
|
|
76
73
|
#define NODE_API_MODULE_GET_API_VERSION_BASE node_api_module_get_api_version_v
|
|
77
74
|
|
|
@@ -160,7 +157,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_get_buffer_info(napi_env env,
|
|
|
160
157
|
napi_value value,
|
|
161
158
|
void** data,
|
|
162
159
|
size_t* length);
|
|
163
|
-
|
|
160
|
+
|
|
164
161
|
// Methods to manage simple async operations
|
|
165
162
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
166
163
|
napi_create_async_work(napi_env env,
|
|
@@ -176,7 +173,6 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(napi_env env,
|
|
|
176
173
|
napi_async_work work);
|
|
177
174
|
NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(napi_env env,
|
|
178
175
|
napi_async_work work);
|
|
179
|
-
#endif // __wasm32__
|
|
180
176
|
|
|
181
177
|
// version management
|
|
182
178
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
@@ -214,7 +210,6 @@ napi_close_callback_scope(napi_env env, napi_callback_scope scope);
|
|
|
214
210
|
|
|
215
211
|
#if NAPI_VERSION >= 4
|
|
216
212
|
|
|
217
|
-
#if !defined(EMNAPI_UNMODIFIED_UPSTREAM) || (defined(EMNAPI_UNMODIFIED_UPSTREAM) && !defined(__wasm32__))
|
|
218
213
|
// Calling into JS from other threads
|
|
219
214
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
220
215
|
napi_create_threadsafe_function(napi_env env,
|
|
@@ -248,7 +243,6 @@ napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
|
|
|
248
243
|
|
|
249
244
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
250
245
|
napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
|
|
251
|
-
#endif // __wasm32__
|
|
252
246
|
|
|
253
247
|
#endif // NAPI_VERSION >= 4
|
|
254
248
|
|
package/index.js
CHANGED
|
@@ -9,7 +9,6 @@ const jsLibrary = path.join(__dirname, './dist/library_napi.js')
|
|
|
9
9
|
const sources = [
|
|
10
10
|
path.join(__dirname, './src/js_native_api.c'),
|
|
11
11
|
path.join(__dirname, './src/node_api.c'),
|
|
12
|
-
path.join(__dirname, './src/emnapi.c'),
|
|
13
12
|
path.join(__dirname, './src/async_cleanup_hook.c'),
|
|
14
13
|
path.join(__dirname, './src/async_context.c'),
|
|
15
14
|
path.join(__dirname, './src/async_work.c'),
|
|
Binary file
|
|
Binary file
|
package/lib/wasm32/libemnapi.a
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "emnapi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Node-API implementation for Emscripten",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
|
-
"build": "node ./script/build.js"
|
|
15
|
+
"build": "node ./script/build.js",
|
|
16
|
+
"version": "node ./script/version.js"
|
|
16
17
|
},
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
package/src/js_native_api.c
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
#include "emnapi_internal.h"
|
|
2
2
|
|
|
3
|
-
#ifdef __EMSCRIPTEN__
|
|
4
|
-
#include <emscripten/heap.h>
|
|
5
|
-
#endif
|
|
6
|
-
|
|
7
3
|
EXTERN_C_START
|
|
8
4
|
|
|
9
5
|
static const char* emnapi_error_messages[] = {
|
|
@@ -67,34 +63,4 @@ napi_status napi_get_last_error_info(
|
|
|
67
63
|
return napi_ok;
|
|
68
64
|
}
|
|
69
65
|
|
|
70
|
-
#define PAGESIZE 65536
|
|
71
|
-
|
|
72
|
-
napi_status napi_adjust_external_memory(napi_env env,
|
|
73
|
-
int64_t change_in_bytes,
|
|
74
|
-
int64_t* adjusted_value) {
|
|
75
|
-
CHECK_ENV(env);
|
|
76
|
-
CHECK_ARG(env, adjusted_value);
|
|
77
|
-
|
|
78
|
-
if (change_in_bytes < 0) {
|
|
79
|
-
return napi_set_last_error(env, napi_invalid_arg, 0, NULL);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
size_t old_size = __builtin_wasm_memory_size(0) << 16;
|
|
83
|
-
size_t new_size = old_size + (size_t) change_in_bytes;
|
|
84
|
-
#ifdef __EMSCRIPTEN__
|
|
85
|
-
if (!emscripten_resize_heap(new_size)) {
|
|
86
|
-
return napi_set_last_error(env, napi_generic_failure, 0, NULL);
|
|
87
|
-
}
|
|
88
|
-
#else
|
|
89
|
-
new_size = new_size + (PAGESIZE - new_size % PAGESIZE) % PAGESIZE;
|
|
90
|
-
if (-1 == __builtin_wasm_memory_grow(0, (new_size - old_size + 65535) >> 16)) {
|
|
91
|
-
return napi_set_last_error(env, napi_generic_failure, 0, NULL);
|
|
92
|
-
}
|
|
93
|
-
#endif
|
|
94
|
-
|
|
95
|
-
*adjusted_value = (int64_t) (__builtin_wasm_memory_size(0) << 16);
|
|
96
|
-
|
|
97
|
-
return napi_clear_last_error(env);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
66
|
EXTERN_C_END
|
package/src/emnapi.c
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#include "emnapi_internal.h"
|
|
2
|
-
|
|
3
|
-
EXTERN_C_START
|
|
4
|
-
|
|
5
|
-
#ifdef __EMSCRIPTEN__
|
|
6
|
-
napi_status
|
|
7
|
-
emnapi_get_emscripten_version(napi_env env,
|
|
8
|
-
const emnapi_emscripten_version** version) {
|
|
9
|
-
CHECK_ENV(env);
|
|
10
|
-
CHECK_ARG(env, version);
|
|
11
|
-
static emnapi_emscripten_version emscripten_version = {
|
|
12
|
-
__EMSCRIPTEN_major__,
|
|
13
|
-
__EMSCRIPTEN_minor__,
|
|
14
|
-
__EMSCRIPTEN_tiny__
|
|
15
|
-
};
|
|
16
|
-
*version = &emscripten_version;
|
|
17
|
-
return napi_clear_last_error(env);
|
|
18
|
-
}
|
|
19
|
-
#endif
|
|
20
|
-
|
|
21
|
-
EXTERN_C_END
|