Skip to content

Commit de05a4c

Browse files
committed
perf(ffi): add direct engine backend entrypoints
1 parent 9a4df3d commit de05a4c

17 files changed

Lines changed: 4444 additions & 60 deletions

NativeScript/CMakeLists.txt

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ message(STATUS "GENERIC_NAPI = ${GENERIC_NAPI}")
139139
if(NS_FFI_BACKEND STREQUAL "auto")
140140
if(GENERIC_NAPI OR TARGET_ENGINE_NONE)
141141
set(NS_EFFECTIVE_FFI_BACKEND "napi")
142-
elseif(TARGET_ENGINE_HERMES)
142+
elseif(TARGET_ENGINE_HERMES OR TARGET_ENGINE_V8 OR TARGET_ENGINE_JSC OR TARGET_ENGINE_QUICKJS)
143143
set(NS_EFFECTIVE_FFI_BACKEND "direct")
144144
else()
145145
set(NS_EFFECTIVE_FFI_BACKEND "napi")
@@ -155,13 +155,6 @@ if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" AND
155155
message(FATAL_ERROR "NS_FFI_BACKEND=direct requires an embedded JS runtime build")
156156
endif()
157157

158-
if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" AND NOT TARGET_ENGINE_HERMES)
159-
message(FATAL_ERROR
160-
"NS_FFI_BACKEND=direct is currently implemented for TARGET_ENGINE=hermes. "
161-
"Use NS_FFI_BACKEND=napi for the pure Node-API FFI path until the direct "
162-
"entrypoint for this engine lands.")
163-
endif()
164-
165158
message(STATUS "NS_FFI_BACKEND = ${NS_FFI_BACKEND} (${NS_EFFECTIVE_FFI_BACKEND})")
166159

167160
if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" AND
@@ -250,6 +243,18 @@ set(FFI_HERMES_DIRECT_SOURCE_FILES
250243
ffi/hermes/jsi/NativeApiJsi.mm
251244
)
252245

246+
set(FFI_V8_DIRECT_SOURCE_FILES
247+
ffi/v8/NativeApiV8.mm
248+
)
249+
250+
set(FFI_JSC_DIRECT_SOURCE_FILES
251+
ffi/jsc/NativeApiJSC.mm
252+
)
253+
254+
set(FFI_QUICKJS_DIRECT_SOURCE_FILES
255+
ffi/quickjs/NativeApiQuickJS.mm
256+
)
257+
253258
set(SOURCE_FILES
254259
${FFI_SHARED_SOURCE_FILES}
255260
runtime/NativeScriptException.mm
@@ -306,6 +311,13 @@ if(ENABLE_JS_RUNTIME)
306311
napi/v8/SimpleAllocator.cpp
307312
)
308313

314+
if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct")
315+
set(SOURCE_FILES
316+
${SOURCE_FILES}
317+
${FFI_V8_DIRECT_SOURCE_FILES}
318+
)
319+
endif()
320+
309321
elseif(TARGET_ENGINE_HERMES)
310322
set(HERMES_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Frameworks/hermes-headers")
311323

@@ -369,6 +381,13 @@ if(ENABLE_JS_RUNTIME)
369381
napi/quickjs/jsr.cpp
370382
)
371383

384+
if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct")
385+
set(SOURCE_FILES
386+
${SOURCE_FILES}
387+
${FFI_QUICKJS_DIRECT_SOURCE_FILES}
388+
)
389+
endif()
390+
372391
elseif(TARGET_ENGINE_JSC)
373392
include_directories(
374393
napi/jsc
@@ -381,6 +400,13 @@ if(ENABLE_JS_RUNTIME)
381400
napi/jsc/jsr.cpp
382401
)
383402

403+
if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct")
404+
set(SOURCE_FILES
405+
${SOURCE_FILES}
406+
${FFI_JSC_DIRECT_SOURCE_FILES}
407+
)
408+
endif()
409+
384410
endif()
385411
else()
386412
include_directories(

0 commit comments

Comments
 (0)