diff --git a/src/js_native_api.h b/src/js_native_api.h index 2675da505c2368..00dedfbfc71c38 100644 --- a/src/js_native_api.h +++ b/src/js_native_api.h @@ -28,6 +28,9 @@ #ifndef NAPI_EXTERN #ifdef _WIN32 #define NAPI_EXTERN __declspec(dllexport) + #elif defined(__wasm32__) + #define NAPI_EXTERN __attribute__((visibility("default"))) \ + __attribute__((__import_module__("napi"))) #else #define NAPI_EXTERN __attribute__((visibility("default"))) #endif diff --git a/src/node_api.h b/src/node_api.h index a4d3cc60e9bb5c..7f48d8c8465520 100644 --- a/src/node_api.h +++ b/src/node_api.h @@ -5,6 +5,8 @@ #ifdef _WIN32 // Building native module against node #define NAPI_EXTERN __declspec(dllimport) + #elif defined(__wasm32__) + #define NAPI_EXTERN __attribute__((__import_module__("napi"))) #endif #endif #include "js_native_api.h" @@ -71,8 +73,18 @@ typedef struct { } \ EXTERN_C_END +#ifdef __wasm32__ +#define NAPI_MODULE(modname, regfunc) \ + EXTERN_C_START \ + NAPI_MODULE_EXPORT napi_value _napi_register(napi_env env, \ + napi_value exports) { \ + return regfunc(env, exports); \ + } \ + EXTERN_C_END +#else #define NAPI_MODULE(modname, regfunc) \ NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage) +#endif #define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v @@ -196,6 +208,7 @@ NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, #if NAPI_VERSION >= 4 +#ifndef __wasm32__ // Calling into JS from other threads NAPI_EXTERN napi_status napi_create_threadsafe_function(napi_env env, @@ -231,6 +244,7 @@ napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); NAPI_EXTERN napi_status napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); +#endif // __wasm32__ #endif // NAPI_VERSION >= 4