Skip to content

Commit 92964e3

Browse files
committed
move Node-API version detection (#182)
1 parent 11f4936 commit 92964e3

6 files changed

Lines changed: 55 additions & 34 deletions

File tree

packages/emnapi/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ endif()
134134
if(NAPI_VERSION)
135135
add_compile_definitions("NAPI_VERSION=${NAPI_VERSION}")
136136
endif()
137+
if(NAPI_EXPERIMENTAL)
138+
add_compile_definitions("NAPI_EXPERIMENTAL=${NAPI_EXPERIMENTAL}")
139+
endif()
140+
if(NODE_API_EXPERIMENTAL_NO_WARNING)
141+
add_compile_definitions("NODE_API_EXPERIMENTAL_NO_WARNING=${NODE_API_EXPERIMENTAL_NO_WARNING}")
142+
endif()
143+
if(NODE_WANT_INTERNALS)
144+
add_compile_definitions("NODE_WANT_INTERNALS=${NODE_WANT_INTERNALS}")
145+
endif()
137146

138147
add_library(${EMNAPI_TARGET_NAME} STATIC ${EMNAPI_SRC} ${UV_SRC})
139148
target_include_directories(${EMNAPI_TARGET_NAME} PUBLIC ${EMNAPI_INCLUDE})

packages/emnapi/include/node/js_native_api.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,6 @@
55
#include <stdbool.h> // NOLINT(modernize-deprecated-headers)
66
#include <stddef.h> // NOLINT(modernize-deprecated-headers)
77

8-
// Use INT_MAX, this should only be consumed by the pre-processor anyway.
9-
#define NAPI_VERSION_EXPERIMENTAL 2147483647
10-
#ifndef NAPI_VERSION
11-
#ifdef NAPI_EXPERIMENTAL
12-
#define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL
13-
#else
14-
// The baseline version for N-API.
15-
// The NAPI_VERSION controls which version will be used by default when
16-
// compilling a native addon. If the addon developer specifically wants to use
17-
// functions available in a new version of N-API that is not yet ported in all
18-
// LTS versions, they can set NAPI_VERSION knowing that they have specifically
19-
// depended on that version.
20-
#define NAPI_VERSION 8
21-
#endif
22-
#endif
23-
248
#ifndef EMNAPI_UNMODIFIED_UPSTREAM
259
#if !defined(NAPI_EXTERN) && defined(__EMSCRIPTEN__)
2610
#define NAPI_EXTERN __attribute__((__import_module__("env")))

packages/emnapi/include/node/js_native_api_types.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
#ifndef SRC_JS_NATIVE_API_TYPES_H_
22
#define SRC_JS_NATIVE_API_TYPES_H_
33

4+
// Use INT_MAX, this should only be consumed by the pre-processor anyway.
5+
#define NAPI_VERSION_EXPERIMENTAL 2147483647
6+
#ifndef NAPI_VERSION
7+
#ifdef NAPI_EXPERIMENTAL
8+
#define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL
9+
#else
10+
// The baseline version for N-API.
11+
// The NAPI_VERSION controls which version will be used by default when
12+
// compilling a native addon. If the addon developer specifically wants to use
13+
// functions available in a new version of N-API that is not yet ported in all
14+
// LTS versions, they can set NAPI_VERSION knowing that they have specifically
15+
// depended on that version.
16+
#define NAPI_VERSION 8
17+
#endif
18+
#endif
19+
20+
#if defined(NAPI_EXPERIMENTAL) && \
21+
!defined(NODE_API_EXPERIMENTAL_NO_WARNING) && \
22+
!defined(NODE_WANT_INTERNALS)
23+
#ifdef _MSC_VER
24+
#pragma message("NAPI_EXPERIMENTAL is enabled. " \
25+
"Experimental features may be unstable.")
26+
#else
27+
#warning "NAPI_EXPERIMENTAL is enabled. " \
28+
"Experimental features may be unstable."
29+
#endif
30+
#endif
31+
432
// This file needs to be compatible with C compilers.
533
// This is a public include file, and these includes have essentially
634
// became part of it's API.

packages/emnapi/include/node/node_api.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ struct uv_loop_s; // Forward declaration.
4343
#define NAPI_NO_RETURN
4444
#endif
4545

46-
typedef napi_value(NAPI_CDECL* napi_addon_register_func)(napi_env env,
47-
napi_value exports);
48-
typedef int32_t(NAPI_CDECL* node_api_addon_get_api_version_func)(void);
49-
5046
// Used by deprecated registration method napi_module_register.
5147
typedef struct napi_module {
5248
int nm_version;

packages/emnapi/include/node/node_api_types.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#include "js_native_api_types.h"
55

6+
typedef napi_value(NAPI_CDECL* napi_addon_register_func)(napi_env env,
7+
napi_value exports);
8+
typedef int32_t(NAPI_CDECL* node_api_addon_get_api_version_func)(void);
9+
610
typedef struct napi_callback_scope__* napi_callback_scope;
711
typedef struct napi_async_context__* napi_async_context;
812
typedef struct napi_async_work__* napi_async_work;

script/release.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,14 @@ async function main () {
3939
? ['-G', 'Ninja']
4040
: (process.platform === 'win32' ? ['-G', 'MinGW Makefiles', '-DCMAKE_MAKE_PROGRAM=make'] : [])
4141

42-
let runtimeNapiVersion
43-
try {
44-
runtimeNapiVersion = require('@emnapi/runtime').NAPI_VERSION_EXPERIMENTAL
45-
} catch (_) {
46-
runtimeNapiVersion = 0x7fffffff
47-
}
48-
4942
await spawn('cmake', [
5043
...generatorOptions,
5144
'-DCMAKE_TOOLCHAIN_FILE=./cmake/wasm32.cmake',
5245
`-DLLVM_PREFIX=${LLVM_PATH}`,
5346
'-DCMAKE_BUILD_TYPE=Release',
5447
'-DCMAKE_VERBOSE_MAKEFILE=1',
55-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
48+
'-DNAPI_EXPERIMENTAL=1',
49+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
5650
'-H.',
5751
'-Bbuild/wasm32'
5852
], cwd)
@@ -77,7 +71,8 @@ async function main () {
7771
`-DWASI_SDK_PREFIX=${WASI_SDK_PATH}`,
7872
'-DCMAKE_BUILD_TYPE=Release',
7973
'-DCMAKE_VERBOSE_MAKEFILE=1',
80-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
74+
'-DNAPI_EXPERIMENTAL=1',
75+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
8176
'-H.',
8277
'-Bbuild/wasm32-wasi'
8378
], cwd)
@@ -107,7 +102,8 @@ async function main () {
107102
`-DWASI_SDK_PREFIX=${WASI_SDK_PATH}`,
108103
'-DCMAKE_BUILD_TYPE=Release',
109104
'-DCMAKE_VERBOSE_MAKEFILE=1',
110-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
105+
'-DNAPI_EXPERIMENTAL=1',
106+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
111107
'-H.',
112108
'-Bbuild/wasm32-wasip1'
113109
], cwd)
@@ -138,7 +134,8 @@ async function main () {
138134
`-DWASI_SDK_PREFIX=${WASI_SDK_PATH}`,
139135
'-DCMAKE_BUILD_TYPE=Release',
140136
'-DCMAKE_VERBOSE_MAKEFILE=1',
141-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
137+
'-DNAPI_EXPERIMENTAL=1',
138+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
142139
'-H.',
143140
'-Bbuild/wasm32-wasi-threads'
144141
], cwd)
@@ -168,7 +165,8 @@ async function main () {
168165
`-DWASI_SDK_PREFIX=${WASI_SDK_PATH}`,
169166
'-DCMAKE_BUILD_TYPE=Release',
170167
'-DCMAKE_VERBOSE_MAKEFILE=1',
171-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
168+
'-DNAPI_EXPERIMENTAL=1',
169+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
172170
'-H.',
173171
'-Bbuild/wasm32-wasip1-threads'
174172
], cwd)
@@ -192,7 +190,8 @@ async function main () {
192190
'-DCMAKE_BUILD_TYPE=Release',
193191
'-DCMAKE_VERBOSE_MAKEFILE=1',
194192
'-DEMNAPI_INSTALL_SRC=1',
195-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
193+
'-DNAPI_EXPERIMENTAL=1',
194+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
196195
'-H.',
197196
'-Bbuild/wasm32-emscripten'
198197
], cwd)
@@ -215,7 +214,8 @@ async function main () {
215214
'-DCMAKE_BUILD_TYPE=Release',
216215
'-DCMAKE_VERBOSE_MAKEFILE=1',
217216
'-DEMNAPI_INSTALL_SRC=1',
218-
`-DNAPI_VERSION=${runtimeNapiVersion}`,
217+
'-DNAPI_EXPERIMENTAL=1',
218+
'-DNODE_API_EXPERIMENTAL_NO_WARNING=1',
219219
'-DCMAKE_C_FLAGS=-sMEMORY64=1',
220220
'-H.',
221221
'-Bbuild/wasm64-emscripten'

0 commit comments

Comments
 (0)