@@ -20,12 +20,12 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS}")
2020# Arguments
2121set (TARGET_PLATFORM "macos" CACHE STRING "Target platform for the Objective-C bridge" )
2222set (TARGET_ENGINE "v8" CACHE STRING "Target JS engine for the NativeScript runtime" )
23- set (NS_FFI_BACKEND "auto" CACHE STRING "FFI backend: auto, napi, or direct " )
23+ set (NS_FFI_BACKEND "auto" CACHE STRING "FFI backend: auto, napi, v8, jsc, quickjs, or hermes " )
2424set (NS_GSD_BACKEND "auto" CACHE STRING "Generated signature dispatch backend: auto, v8, jsc, quickjs, hermes, napi, or none" )
2525set (METADATA_SIZE 0 CACHE STRING "Size of embedded metadata in bytes" )
2626set (BUILD_CLI_BINARY OFF CACHE BOOL "Build the NativeScript CLI binary" )
2727set (BUILD_MACOS_NODE_API OFF CACHE BOOL "Build the NativeScript macOS Node API dylib" )
28- set_property (CACHE NS_FFI_BACKEND PROPERTY STRINGS auto napi direct )
28+ set_property (CACHE NS_FFI_BACKEND PROPERTY STRINGS auto napi v8 jsc quickjs hermes )
2929set_property (CACHE NS_GSD_BACKEND PROPERTY STRINGS auto v8 jsc quickjs hermes napi none)
3030
3131if (BUILD_MACOS_NODE_API)
@@ -139,29 +139,46 @@ message(STATUS "GENERIC_NAPI = ${GENERIC_NAPI}")
139139if (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 OR TARGET_ENGINE_V8 OR TARGET_ENGINE_JSC OR TARGET_ENGINE_QUICKJS)
143- set (NS_EFFECTIVE_FFI_BACKEND "direct" )
142+ elseif (TARGET_ENGINE_HERMES)
143+ set (NS_EFFECTIVE_FFI_BACKEND "hermes" )
144+ elseif (TARGET_ENGINE_V8)
145+ set (NS_EFFECTIVE_FFI_BACKEND "v8" )
146+ elseif (TARGET_ENGINE_JSC)
147+ set (NS_EFFECTIVE_FFI_BACKEND "jsc" )
148+ elseif (TARGET_ENGINE_QUICKJS)
149+ set (NS_EFFECTIVE_FFI_BACKEND "quickjs" )
144150 else ()
145151 set (NS_EFFECTIVE_FFI_BACKEND "napi" )
146152 endif ()
147- elseif (NS_FFI_BACKEND STREQUAL "napi" OR NS_FFI_BACKEND STREQUAL "direct" )
153+ elseif (NS_FFI_BACKEND STREQUAL "napi" OR
154+ NS_FFI_BACKEND STREQUAL "v8" OR
155+ NS_FFI_BACKEND STREQUAL "jsc" OR
156+ NS_FFI_BACKEND STREQUAL "quickjs" OR
157+ NS_FFI_BACKEND STREQUAL "hermes" )
148158 set (NS_EFFECTIVE_FFI_BACKEND "${NS_FFI_BACKEND} " )
149159else ()
150160 message (FATAL_ERROR "Unknown NS_FFI_BACKEND: ${NS_FFI_BACKEND} " )
151161endif ()
152162
153- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " AND
163+ if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi " AND
154164 (GENERIC_NAPI OR TARGET_ENGINE_NONE OR BUILD_MACOS_NODE_API))
155- message (FATAL_ERROR "NS_FFI_BACKEND=direct requires an embedded JS runtime build" )
165+ message (FATAL_ERROR
166+ "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} requires an embedded JS runtime build" )
167+ endif ()
168+
169+ if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" AND
170+ NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "${TARGET_ENGINE} " )
171+ message (FATAL_ERROR
172+ "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} requires TARGET_ENGINE=${NS_EFFECTIVE_FFI_BACKEND} " )
156173endif ()
157174
158175message (STATUS "NS_FFI_BACKEND = ${NS_FFI_BACKEND} (${NS_EFFECTIVE_FFI_BACKEND} )" )
159176
160177if (NS_GSD_BACKEND STREQUAL "auto" )
161- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
162- set (NS_EFFECTIVE_GSD_BACKEND "none" )
163- else ()
178+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" )
164179 set (NS_EFFECTIVE_GSD_BACKEND "napi" )
180+ else ()
181+ set (NS_EFFECTIVE_GSD_BACKEND "${NS_EFFECTIVE_FFI_BACKEND} " )
165182 endif ()
166183elseif (NS_GSD_BACKEND STREQUAL "v8" OR
167184 NS_GSD_BACKEND STREQUAL "jsc" OR
@@ -193,10 +210,10 @@ if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" AND
193210 "NS_FFI_BACKEND=napi is the pure Node-API FFI backend and only supports "
194211 "NS_GSD_BACKEND=napi or none." )
195212endif ()
196- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " AND
213+ if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi " AND
197214 NS_EFFECTIVE_GSD_BACKEND STREQUAL "napi" )
198215 message (FATAL_ERROR
199- "NS_FFI_BACKEND=direct cannot use NS_GSD_BACKEND=napi. "
216+ "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} cannot use NS_GSD_BACKEND=napi. "
200217 "Use the matching engine backend or none." )
201218endif ()
202219
@@ -205,7 +222,6 @@ message(STATUS "NS_GSD_BACKEND = ${NS_GSD_BACKEND} (${NS_EFFECTIVE_GSD_BACKEND})
205222# Set up sources
206223include_directories (
207224 ./
208- ffi/shared
209225 ../metadata-generator/include
210226 napi/common
211227 libffi/${LIBFFI_BUILD}/include
@@ -238,33 +254,33 @@ set(FFI_NAPI_SOURCE_FILES
238254 ffi/napi/ClassBuilder.mm
239255)
240256
241- set (FFI_DIRECT_SHARED_SOURCE_FILES
242- ffi/direct/EmbeddedMetadata .mm
257+ set (FFI_ENGINE_SHARED_SOURCE_FILES
258+ ffi/shared/MetadataState .mm
243259)
244260
245- set (FFI_HERMES_DIRECT_SOURCE_FILES
246- ${FFI_DIRECT_SHARED_SOURCE_FILES }
261+ set (FFI_HERMES_ENGINE_SOURCE_FILES
262+ ${FFI_ENGINE_SHARED_SOURCE_FILES }
247263 ffi/hermes/NativeApiJsi.mm
248264)
249265
250- set (FFI_V8_DIRECT_SOURCE_FILES
251- ${FFI_DIRECT_SHARED_SOURCE_FILES }
266+ set (FFI_V8_ENGINE_SOURCE_FILES
267+ ${FFI_ENGINE_SHARED_SOURCE_FILES }
252268 ffi/v8/NativeApiV8.mm
253269 ffi/v8/NativeApiV8HostObjects.mm
254270 ffi/v8/NativeApiV8Runtime.mm
255271 ffi/v8/NativeApiV8Value.mm
256272)
257273
258- set (FFI_JSC_DIRECT_SOURCE_FILES
259- ${FFI_DIRECT_SHARED_SOURCE_FILES }
274+ set (FFI_JSC_ENGINE_SOURCE_FILES
275+ ${FFI_ENGINE_SHARED_SOURCE_FILES }
260276 ffi/jsc/NativeApiJSC.mm
261277 ffi/jsc/NativeApiJSCHostObjects.mm
262278 ffi/jsc/NativeApiJSCRuntime.mm
263279 ffi/jsc/NativeApiJSCValue.mm
264280)
265281
266- set (FFI_QUICKJS_DIRECT_SOURCE_FILES
267- ${FFI_DIRECT_SHARED_SOURCE_FILES }
282+ set (FFI_QUICKJS_ENGINE_SOURCE_FILES
283+ ${FFI_ENGINE_SHARED_SOURCE_FILES }
268284 ffi/quickjs/NativeApiQuickJSHostObjects.mm
269285 ffi/quickjs/NativeApiQuickJS.mm
270286 ffi/quickjs/NativeApiQuickJSRuntime.mm
@@ -327,10 +343,10 @@ if(ENABLE_JS_RUNTIME)
327343 napi/v8/SimpleAllocator.cpp
328344 )
329345
330- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
346+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "v8 " )
331347 set (SOURCE_FILES
332348 ${SOURCE_FILES}
333- ${FFI_V8_DIRECT_SOURCE_FILES }
349+ ${FFI_V8_ENGINE_SOURCE_FILES }
334350 )
335351 endif ()
336352
@@ -358,10 +374,10 @@ if(ENABLE_JS_RUNTIME)
358374 napi/hermes/jsr.cpp
359375 )
360376
361- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
377+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "hermes " )
362378 set (SOURCE_FILES
363379 ${SOURCE_FILES}
364- ${FFI_HERMES_DIRECT_SOURCE_FILES }
380+ ${FFI_HERMES_ENGINE_SOURCE_FILES }
365381 )
366382 endif ()
367383
@@ -397,10 +413,10 @@ if(ENABLE_JS_RUNTIME)
397413 napi/quickjs/jsr.cpp
398414 )
399415
400- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
416+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "quickjs " )
401417 set (SOURCE_FILES
402418 ${SOURCE_FILES}
403- ${FFI_QUICKJS_DIRECT_SOURCE_FILES }
419+ ${FFI_QUICKJS_ENGINE_SOURCE_FILES }
404420 )
405421 endif ()
406422
@@ -416,10 +432,10 @@ if(ENABLE_JS_RUNTIME)
416432 napi/jsc/jsr.cpp
417433 )
418434
419- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
435+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "jsc " )
420436 set (SOURCE_FILES
421437 ${SOURCE_FILES}
422- ${FFI_JSC_DIRECT_SOURCE_FILES }
438+ ${FFI_JSC_ENGINE_SOURCE_FILES }
423439 )
424440 endif ()
425441
@@ -510,58 +526,48 @@ elseif(TARGET_ENGINE_JSC)
510526 target_compile_definitions (${NAME} PRIVATE TARGET_ENGINE_JSC )
511527endif ()
512528
513- set (NS_GSD_BACKEND_V8_VALUE 0)
514- set (NS_GSD_BACKEND_JSC_VALUE 0)
515- set (NS_GSD_BACKEND_QUICKJS_VALUE 0)
516529set (NS_GSD_BACKEND_HERMES_VALUE 0)
517530set (NS_GSD_BACKEND_NAPI_VALUE 0)
518- set (NS_GSD_BACKEND_ENGINE_DIRECT_VALUE 0)
519- set (NS_GSD_BACKEND_DIRECT_PREPARED_VALUE 0)
520- set (NS_FFI_BACKEND_DIRECT_VALUE 0)
531+ set (NS_GSD_BACKEND_PREPARED_VALUE 0)
521532set (NS_FFI_BACKEND_NAPI_VALUE 0)
533+ set (NS_FFI_BACKEND_V8_VALUE 0)
534+ set (NS_FFI_BACKEND_JSC_VALUE 0)
535+ set (NS_FFI_BACKEND_QUICKJS_VALUE 0)
536+ set (NS_FFI_BACKEND_HERMES_VALUE 0)
522537
523538if (NS_EFFECTIVE_GSD_BACKEND STREQUAL "v8" )
524- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
525- set (NS_GSD_BACKEND_DIRECT_PREPARED_VALUE 1)
526- else ()
527- set (NS_GSD_BACKEND_V8_VALUE 1)
528- endif ()
539+ set (NS_GSD_BACKEND_PREPARED_VALUE 1)
529540elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "jsc" )
530- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
531- set (NS_GSD_BACKEND_DIRECT_PREPARED_VALUE 1)
532- else ()
533- set (NS_GSD_BACKEND_JSC_VALUE 1)
534- set (NS_GSD_BACKEND_ENGINE_DIRECT_VALUE 1)
535- endif ()
541+ set (NS_GSD_BACKEND_PREPARED_VALUE 1)
536542elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "quickjs" )
537- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
538- set (NS_GSD_BACKEND_DIRECT_PREPARED_VALUE 1)
539- else ()
540- set (NS_GSD_BACKEND_QUICKJS_VALUE 1)
541- set (NS_GSD_BACKEND_ENGINE_DIRECT_VALUE 1)
542- endif ()
543+ set (NS_GSD_BACKEND_PREPARED_VALUE 1)
543544elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "hermes" )
544545 set (NS_GSD_BACKEND_HERMES_VALUE 1)
545546elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "napi" )
546547 set (NS_GSD_BACKEND_NAPI_VALUE 1)
547548endif ()
548549
549- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
550- set (NS_FFI_BACKEND_DIRECT_VALUE 1)
551- elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" )
550+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" )
552551 set (NS_FFI_BACKEND_NAPI_VALUE 1)
552+ elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "v8" )
553+ set (NS_FFI_BACKEND_V8_VALUE 1)
554+ elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "jsc" )
555+ set (NS_FFI_BACKEND_JSC_VALUE 1)
556+ elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "quickjs" )
557+ set (NS_FFI_BACKEND_QUICKJS_VALUE 1)
558+ elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "hermes" )
559+ set (NS_FFI_BACKEND_HERMES_VALUE 1)
553560endif ()
554561
555562target_compile_definitions (${NAME} PRIVATE
556- NS_GSD_BACKEND_V8=${NS_GSD_BACKEND_V8_VALUE}
557- NS_GSD_BACKEND_JSC=${NS_GSD_BACKEND_JSC_VALUE}
558- NS_GSD_BACKEND_QUICKJS=${NS_GSD_BACKEND_QUICKJS_VALUE}
559563 NS_GSD_BACKEND_HERMES=${NS_GSD_BACKEND_HERMES_VALUE}
560564 NS_GSD_BACKEND_NAPI=${NS_GSD_BACKEND_NAPI_VALUE}
561- NS_GSD_BACKEND_ENGINE_DIRECT=${NS_GSD_BACKEND_ENGINE_DIRECT_VALUE}
562- NS_GSD_BACKEND_DIRECT_PREPARED=${NS_GSD_BACKEND_DIRECT_PREPARED_VALUE}
563- NS_FFI_BACKEND_DIRECT=${NS_FFI_BACKEND_DIRECT_VALUE}
565+ NS_GSD_BACKEND_PREPARED=${NS_GSD_BACKEND_PREPARED_VALUE}
564566 NS_FFI_BACKEND_NAPI=${NS_FFI_BACKEND_NAPI_VALUE}
567+ NS_FFI_BACKEND_V8=${NS_FFI_BACKEND_V8_VALUE}
568+ NS_FFI_BACKEND_JSC=${NS_FFI_BACKEND_JSC_VALUE}
569+ NS_FFI_BACKEND_QUICKJS=${NS_FFI_BACKEND_QUICKJS_VALUE}
570+ NS_FFI_BACKEND_HERMES=${NS_FFI_BACKEND_HERMES_VALUE}
565571)
566572
567573set (FRAMEWORK_VERSION_VALUE "${VERSION} " )
@@ -674,13 +680,13 @@ if(TARGET_ENGINE_V8)
674680 # Prefer universal sim slice if present
675681 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" )
676682 if (NOT EXISTS "${V8_SLICE_DIR} " )
677- set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" ) # fallback
683+ set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" )
678684 endif ()
679685 elseif (TARGET_PLATFORM STREQUAL "ios" )
680686 # Prefer universal sim slice if present
681687 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" )
682688 if (NOT EXISTS "${V8_SLICE_DIR} " )
683- set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" ) # fallback
689+ set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" )
684690 endif ()
685691 elseif (TARGET_PLATFORM STREQUAL "visionos-sim" )
686692 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /xrsimulator-arm64/libv8_monolith.framework" )
0 commit comments