@@ -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, v8, jsc, quickjs, or hermes " )
23+ set (NS_FFI_BACKEND "auto" CACHE STRING "FFI backend: auto, napi, or direct " )
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 v8 jsc quickjs hermes )
28+ set_property (CACHE NS_FFI_BACKEND PROPERTY STRINGS auto napi direct )
2929set_property (CACHE NS_GSD_BACKEND PROPERTY STRINGS auto v8 jsc quickjs hermes napi none)
3030
3131if (BUILD_MACOS_NODE_API)
@@ -139,46 +139,36 @@ 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)
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" )
142+ elseif (TARGET_ENGINE_HERMES OR TARGET_ENGINE_V8 OR TARGET_ENGINE_JSC OR TARGET_ENGINE_QUICKJS)
143+ set (NS_EFFECTIVE_FFI_BACKEND "direct" )
150144 else ()
151145 set (NS_EFFECTIVE_FFI_BACKEND "napi" )
152146 endif ()
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" )
147+ elseif (NS_FFI_BACKEND STREQUAL "napi" OR NS_FFI_BACKEND STREQUAL "direct" )
158148 set (NS_EFFECTIVE_FFI_BACKEND "${NS_FFI_BACKEND} " )
159149else ()
160150 message (FATAL_ERROR "Unknown NS_FFI_BACKEND: ${NS_FFI_BACKEND} " )
161151endif ()
162152
163- if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi " AND
153+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " AND
164154 (GENERIC_NAPI OR TARGET_ENGINE_NONE OR BUILD_MACOS_NODE_API))
165- message (FATAL_ERROR
166- "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} requires an embedded JS runtime build" )
155+ message (FATAL_ERROR "NS_FFI_BACKEND=direct requires an embedded JS runtime build" )
167156endif ()
168157
169- if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" AND
170- NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "${TARGET_ENGINE} " )
158+ message (STATUS "NS_FFI_BACKEND = ${NS_FFI_BACKEND} (${NS_EFFECTIVE_FFI_BACKEND} )" )
159+
160+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" AND
161+ NOT (NS_GSD_BACKEND STREQUAL "auto" OR NS_GSD_BACKEND STREQUAL "none" ))
171162 message (FATAL_ERROR
172- "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} requires TARGET_ENGINE=${NS_EFFECTIVE_FFI_BACKEND} " )
163+ "NS_GSD_BACKEND is only used by the Node-API FFI backend. "
164+ "Use NS_GSD_BACKEND=auto or none with NS_FFI_BACKEND=direct." )
173165endif ()
174166
175- message (STATUS "NS_FFI_BACKEND = ${NS_FFI_BACKEND} (${NS_EFFECTIVE_FFI_BACKEND} )" )
176-
177167if (NS_GSD_BACKEND STREQUAL "auto" )
178- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi " )
179- set (NS_EFFECTIVE_GSD_BACKEND "napi " )
168+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
169+ set (NS_EFFECTIVE_GSD_BACKEND "none " )
180170 else ()
181- set (NS_EFFECTIVE_GSD_BACKEND "${NS_EFFECTIVE_FFI_BACKEND} " )
171+ set (NS_EFFECTIVE_GSD_BACKEND "napi " )
182172 endif ()
183173elseif (NS_GSD_BACKEND STREQUAL "v8" OR
184174 NS_GSD_BACKEND STREQUAL "jsc" OR
@@ -210,18 +200,13 @@ if(NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" AND
210200 "NS_FFI_BACKEND=napi is the pure Node-API FFI backend and only supports "
211201 "NS_GSD_BACKEND=napi or none." )
212202endif ()
213- if (NOT NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" AND
214- NS_EFFECTIVE_GSD_BACKEND STREQUAL "napi" )
215- message (FATAL_ERROR
216- "NS_FFI_BACKEND=${NS_EFFECTIVE_FFI_BACKEND} cannot use NS_GSD_BACKEND=napi. "
217- "Use the matching engine backend or none." )
218- endif ()
219203
220204message (STATUS "NS_GSD_BACKEND = ${NS_GSD_BACKEND} (${NS_EFFECTIVE_GSD_BACKEND} )" )
221205
222206# Set up sources
223207include_directories (
224208 ./
209+ ffi/shared
225210 ../metadata-generator/include
226211 napi/common
227212 libffi/${LIBFFI_BUILD}/include
@@ -254,33 +239,33 @@ set(FFI_NAPI_SOURCE_FILES
254239 ffi/napi/ClassBuilder.mm
255240)
256241
257- set (FFI_ENGINE_SHARED_SOURCE_FILES
258- ffi/shared/MetadataState .mm
242+ set (FFI_DIRECT_SHARED_SOURCE_FILES
243+ ffi/shared/direct/EmbeddedMetadata .mm
259244)
260245
261- set (FFI_HERMES_ENGINE_SOURCE_FILES
262- ${FFI_ENGINE_SHARED_SOURCE_FILES }
263- ffi/hermes/NativeApiJsi.mm
246+ set (FFI_HERMES_DIRECT_SOURCE_FILES
247+ ${FFI_DIRECT_SHARED_SOURCE_FILES }
248+ ffi/hermes/jsi/ NativeApiJsi.mm
264249)
265250
266- set (FFI_V8_ENGINE_SOURCE_FILES
267- ${FFI_ENGINE_SHARED_SOURCE_FILES }
251+ set (FFI_V8_DIRECT_SOURCE_FILES
252+ ${FFI_DIRECT_SHARED_SOURCE_FILES }
268253 ffi/v8/NativeApiV8.mm
269254 ffi/v8/NativeApiV8HostObjects.mm
270255 ffi/v8/NativeApiV8Runtime.mm
271256 ffi/v8/NativeApiV8Value.mm
272257)
273258
274- set (FFI_JSC_ENGINE_SOURCE_FILES
275- ${FFI_ENGINE_SHARED_SOURCE_FILES }
259+ set (FFI_JSC_DIRECT_SOURCE_FILES
260+ ${FFI_DIRECT_SHARED_SOURCE_FILES }
276261 ffi/jsc/NativeApiJSC.mm
277262 ffi/jsc/NativeApiJSCHostObjects.mm
278263 ffi/jsc/NativeApiJSCRuntime.mm
279264 ffi/jsc/NativeApiJSCValue.mm
280265)
281266
282- set (FFI_QUICKJS_ENGINE_SOURCE_FILES
283- ${FFI_ENGINE_SHARED_SOURCE_FILES }
267+ set (FFI_QUICKJS_DIRECT_SOURCE_FILES
268+ ${FFI_DIRECT_SHARED_SOURCE_FILES }
284269 ffi/quickjs/NativeApiQuickJSHostObjects.mm
285270 ffi/quickjs/NativeApiQuickJS.mm
286271 ffi/quickjs/NativeApiQuickJSRuntime.mm
@@ -343,10 +328,10 @@ if(ENABLE_JS_RUNTIME)
343328 napi/v8/SimpleAllocator.cpp
344329 )
345330
346- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "v8 " )
331+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
347332 set (SOURCE_FILES
348333 ${SOURCE_FILES}
349- ${FFI_V8_ENGINE_SOURCE_FILES }
334+ ${FFI_V8_DIRECT_SOURCE_FILES }
350335 )
351336 endif ()
352337
@@ -374,10 +359,10 @@ if(ENABLE_JS_RUNTIME)
374359 napi/hermes/jsr.cpp
375360 )
376361
377- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "hermes " )
362+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
378363 set (SOURCE_FILES
379364 ${SOURCE_FILES}
380- ${FFI_HERMES_ENGINE_SOURCE_FILES }
365+ ${FFI_HERMES_DIRECT_SOURCE_FILES }
381366 )
382367 endif ()
383368
@@ -413,10 +398,10 @@ if(ENABLE_JS_RUNTIME)
413398 napi/quickjs/jsr.cpp
414399 )
415400
416- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "quickjs " )
401+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
417402 set (SOURCE_FILES
418403 ${SOURCE_FILES}
419- ${FFI_QUICKJS_ENGINE_SOURCE_FILES }
404+ ${FFI_QUICKJS_DIRECT_SOURCE_FILES }
420405 )
421406 endif ()
422407
@@ -432,10 +417,10 @@ if(ENABLE_JS_RUNTIME)
432417 napi/jsc/jsr.cpp
433418 )
434419
435- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "jsc " )
420+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct " )
436421 set (SOURCE_FILES
437422 ${SOURCE_FILES}
438- ${FFI_JSC_ENGINE_SOURCE_FILES }
423+ ${FFI_JSC_DIRECT_SOURCE_FILES }
439424 )
440425 endif ()
441426
@@ -526,48 +511,40 @@ elseif(TARGET_ENGINE_JSC)
526511 target_compile_definitions (${NAME} PRIVATE TARGET_ENGINE_JSC )
527512endif ()
528513
514+ set (NS_GSD_BACKEND_V8_VALUE 0)
515+ set (NS_GSD_BACKEND_JSC_VALUE 0)
516+ set (NS_GSD_BACKEND_QUICKJS_VALUE 0)
529517set (NS_GSD_BACKEND_HERMES_VALUE 0)
530518set (NS_GSD_BACKEND_NAPI_VALUE 0)
531- set (NS_GSD_BACKEND_PREPARED_VALUE 0)
519+ set (NS_FFI_BACKEND_DIRECT_VALUE 0)
532520set (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)
537521
538522if (NS_EFFECTIVE_GSD_BACKEND STREQUAL "v8" )
539- set (NS_GSD_BACKEND_PREPARED_VALUE 1)
523+ set (NS_GSD_BACKEND_V8_VALUE 1)
540524elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "jsc" )
541- set (NS_GSD_BACKEND_PREPARED_VALUE 1)
525+ set (NS_GSD_BACKEND_JSC_VALUE 1)
542526elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "quickjs" )
543- set (NS_GSD_BACKEND_PREPARED_VALUE 1)
527+ set (NS_GSD_BACKEND_QUICKJS_VALUE 1)
544528elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "hermes" )
545529 set (NS_GSD_BACKEND_HERMES_VALUE 1)
546530elseif (NS_EFFECTIVE_GSD_BACKEND STREQUAL "napi" )
547531 set (NS_GSD_BACKEND_NAPI_VALUE 1)
548532endif ()
549533
550- if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" )
534+ if (NS_EFFECTIVE_FFI_BACKEND STREQUAL "direct" )
535+ set (NS_FFI_BACKEND_DIRECT_VALUE 1)
536+ elseif (NS_EFFECTIVE_FFI_BACKEND STREQUAL "napi" )
551537 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)
560538endif ()
561539
562540target_compile_definitions (${NAME} PRIVATE
541+ NS_GSD_BACKEND_V8=${NS_GSD_BACKEND_V8_VALUE}
542+ NS_GSD_BACKEND_JSC=${NS_GSD_BACKEND_JSC_VALUE}
543+ NS_GSD_BACKEND_QUICKJS=${NS_GSD_BACKEND_QUICKJS_VALUE}
563544 NS_GSD_BACKEND_HERMES=${NS_GSD_BACKEND_HERMES_VALUE}
564545 NS_GSD_BACKEND_NAPI=${NS_GSD_BACKEND_NAPI_VALUE}
565- NS_GSD_BACKEND_PREPARED =${NS_GSD_BACKEND_PREPARED_VALUE }
546+ NS_FFI_BACKEND_DIRECT =${NS_FFI_BACKEND_DIRECT_VALUE }
566547 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}
571548)
572549
573550set (FRAMEWORK_VERSION_VALUE "${VERSION} " )
@@ -680,13 +657,13 @@ if(TARGET_ENGINE_V8)
680657 # Prefer universal sim slice if present
681658 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" )
682659 if (NOT EXISTS "${V8_SLICE_DIR} " )
683- set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" )
660+ set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64-simulator/libv8_monolith.framework" ) # fallback
684661 endif ()
685662 elseif (TARGET_PLATFORM STREQUAL "ios" )
686663 # Prefer universal sim slice if present
687664 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" )
688665 if (NOT EXISTS "${V8_SLICE_DIR} " )
689- set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" )
666+ set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /ios-arm64/libv8_monolith.framework" ) # fallback
690667 endif ()
691668 elseif (TARGET_PLATFORM STREQUAL "visionos-sim" )
692669 set (V8_SLICE_DIR "${V8_XCFRAMEWORK} /xrsimulator-arm64/libv8_monolith.framework" )
0 commit comments