diff --git a/packages/canvas-svg/nativescript.config.ts b/packages/canvas-svg/nativescript.config.ts new file mode 100644 index 000000000..cfcb427b4 --- /dev/null +++ b/packages/canvas-svg/nativescript.config.ts @@ -0,0 +1,38 @@ +import { NativeScriptConfig } from '@nativescript/core'; + +export default { + ios: { + SPMPackages: [ + { + name: 'CanvasNative', + libs: ['NativeScriptV8'], + // Header-only SwiftPM shim (V8 headers + empty stub) shipped inside + // this npm package — same shim @nativescript/canvas ships, so the SVG + // sources compile without @nativescript/canvas installed. The CLI + // dedupes same-name packages across plugins, so installing both + // plugins adds it only once. Referenced by local path on purpose: a + // repositoryURL reference makes SwiftPM clone the canvas repo's + // entire multi-GB git history just to read Package.swift. + path: 'node_modules/@nativescript/canvas-svg/platforms/ios/NativeScriptV8', + }, + ], + }, + visionos: { + SPMPackages: [ + { + name: 'CanvasNative', + libs: ['NativeScriptV8'], + path: 'node_modules/@nativescript/canvas-svg/platforms/ios/NativeScriptV8', + }, + ], + }, + tvos: { + SPMPackages: [ + { + name: 'CanvasNative', + libs: ['NativeScriptV8'], + path: 'node_modules/@nativescript/canvas-svg/platforms/ios/NativeScriptV8', + }, + ], + }, +} as NativeScriptConfig; diff --git a/packages/canvas-svg/platforms/ios/build.xcconfig b/packages/canvas-svg/platforms/ios/build.xcconfig index 000998daa..ec1d4fbd9 100644 --- a/packages/canvas-svg/platforms/ios/build.xcconfig +++ b/packages/canvas-svg/platforms/ios/build.xcconfig @@ -3,4 +3,21 @@ OTHER_LDFLAGS[sdk=xros*] = $(inherited) -framework Foundation -framework CanvasS OTHER_LDFLAGS[sdk=xrsimulator*] = $(inherited) -framework Foundation -framework CanvasSVG OTHER_LDFLAGS[sdk=appletvos*] = $(inherited) -framework Foundation -framework CanvasSVG OTHER_LDFLAGS[sdk=appletvsimulator*] = $(inherited) -framework Foundation -framework CanvasSVG -OTHER_LDFLAGS[sdk=macosx*] = $(inherited) -framework Foundation -framework CanvasSVG \ No newline at end of file +OTHER_LDFLAGS[sdk=macosx*] = $(inherited) -framework Foundation -framework CanvasSVG + +// V8 14.9's headers use C++20 concepts/requires-clauses (e.g. v8-internal.h). +CLANG_CXX_LANGUAGE_STANDARD = c++20 + +// The NativeScriptV8 SwiftPM shim (nativescript.config.ts) puts its Headers dir on the +// search path, which resolves "include/v8.h". The V8 headers then include each other by +// bare name (cppgc/common.h -> "v8config.h"), which needs Headers/include itself on the +// path too - the same reason @nativescript/canvas's build.xcconfig adds it. Passed as -I +// flags rather than HEADER_SEARCH_PATHS, which the CLI's xcconfig merge would let drop +// the CocoaPods paths, and named apart from canvas's so both plugins' flags are kept. +// Two roots, as in canvas: an installed plugin, and this monorepo's demo apps (whose +// node_modules link packages/canvas-svg, where the shim isn't materialised). +CANVAS_SVG_V8_HEADERS_NPM = $(SRCROOT)/../../node_modules/@nativescript/canvas-svg/platforms/ios/NativeScriptV8/Headers/include +CANVAS_SVG_V8_HEADERS_MONOREPO = $(SRCROOT)/../../../../nativescript-v8/Headers/include +CANVAS_SVG_V8_HEADER_FLAGS = -I"$(CANVAS_SVG_V8_HEADERS_NPM)" -I"$(CANVAS_SVG_V8_HEADERS_MONOREPO)" +OTHER_CFLAGS = $(inherited) $(CANVAS_SVG_V8_HEADER_FLAGS) +OTHER_CPLUSPLUSFLAGS = $(inherited) $(CANVAS_SVG_V8_HEADER_FLAGS) diff --git a/packages/canvas-svg/project.json b/packages/canvas-svg/project.json index a7c85c77f..84ce5faeb 100644 --- a/packages/canvas-svg/project.json +++ b/packages/canvas-svg/project.json @@ -15,11 +15,28 @@ "assets": [ "packages/canvas-svg/*.md", "packages/canvas-svg/index.d.ts", + "packages/canvas-svg/nativescript.config.ts", "LICENSE", { "glob": "**/*", "input": "packages/canvas-svg/platforms/", "output": "./platforms/" + }, + { + "glob": "Package.swift", + "input": "nativescript-v8/", + "output": "./platforms/ios/NativeScriptV8/" + }, + { + "glob": "**/*", + "input": "nativescript-v8/Headers/", + "output": "./platforms/ios/NativeScriptV8/Headers/", + "ignore": ["**/.gitignore"] + }, + { + "glob": "**/*", + "input": "nativescript-v8/Sources/", + "output": "./platforms/ios/NativeScriptV8/Sources/" } ], "dependsOn": [