Skip to content

Commit 86085f3

Browse files
Add Swift 6.2 manifest with tracing trait
1 parent 957cd73 commit 86085f3

File tree

1 file changed

+217
-0
lines changed

1 file changed

+217
-0
lines changed

Package@swift-6.2.swift

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
// swift-tools-version:6.2
2+
3+
import CompilerPluginSupport
4+
import PackageDescription
5+
6+
// NOTE: needed for embedded customizations, ideally this will not be necessary at all in the future, or can be replaced with traits
7+
let shouldBuildForEmbedded = Context.environment["JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM"].flatMap(Bool.init) ?? false
8+
let useLegacyResourceBundling =
9+
Context.environment["JAVASCRIPTKIT_USE_LEGACY_RESOURCE_BUNDLING"].flatMap(Bool.init) ?? false
10+
let enableTracingByEnv = Context.environment["JAVASCRIPTKIT_ENABLE_TRACING"].flatMap(Bool.init) ?? false
11+
12+
let tracingTrait = Trait(
13+
name: "Tracing",
14+
description: "Enable opt-in Swift <-> JavaScript bridge tracing hooks.",
15+
enabledTraits: []
16+
)
17+
18+
let testingLinkerFlags: [LinkerSetting] = [
19+
.unsafeFlags([
20+
"-Xlinker", "--stack-first",
21+
"-Xlinker", "--global-base=524288",
22+
"-Xlinker", "-z",
23+
"-Xlinker", "stack-size=524288",
24+
])
25+
]
26+
27+
let package = Package(
28+
name: "JavaScriptKit",
29+
platforms: [
30+
.macOS(.v13),
31+
.iOS(.v13),
32+
.tvOS(.v13),
33+
.watchOS(.v6),
34+
.macCatalyst(.v13),
35+
],
36+
products: [
37+
.library(name: "JavaScriptKit", targets: ["JavaScriptKit"]),
38+
.library(name: "JavaScriptEventLoop", targets: ["JavaScriptEventLoop"]),
39+
.library(name: "JavaScriptBigIntSupport", targets: ["JavaScriptBigIntSupport"]),
40+
.library(name: "JavaScriptFoundationCompat", targets: ["JavaScriptFoundationCompat"]),
41+
.library(name: "JavaScriptEventLoopTestSupport", targets: ["JavaScriptEventLoopTestSupport"]),
42+
.plugin(name: "PackageToJS", targets: ["PackageToJS"]),
43+
.plugin(name: "BridgeJS", targets: ["BridgeJS"]),
44+
.plugin(name: "BridgeJSCommandPlugin", targets: ["BridgeJSCommandPlugin"]),
45+
],
46+
traits: [tracingTrait],
47+
dependencies: [
48+
.package(url: "https://github.com/swiftlang/swift-syntax", "600.0.0"..<"603.0.0")
49+
],
50+
targets: [
51+
.target(
52+
name: "JavaScriptKit",
53+
dependencies: ["_CJavaScriptKit", "BridgeJSMacros"],
54+
exclude: useLegacyResourceBundling ? [] : ["Runtime"],
55+
resources: useLegacyResourceBundling ? [.copy("Runtime")] : [],
56+
cSettings: shouldBuildForEmbedded
57+
? [
58+
.unsafeFlags(["-fdeclspec"])
59+
] : nil,
60+
swiftSettings: [
61+
.enableExperimentalFeature("Extern"),
62+
.define("Tracing", .when(traits: ["Tracing"])),
63+
]
64+
+ (enableTracingByEnv ? [.define("Tracing")] : [])
65+
+ (shouldBuildForEmbedded
66+
? [
67+
.enableExperimentalFeature("Embedded"),
68+
.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]),
69+
] : [])
70+
),
71+
.target(name: "_CJavaScriptKit"),
72+
.macro(
73+
name: "BridgeJSMacros",
74+
dependencies: [
75+
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
76+
.product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
77+
]
78+
),
79+
80+
.testTarget(
81+
name: "JavaScriptKitTests",
82+
dependencies: ["JavaScriptKit"],
83+
swiftSettings: [
84+
.enableExperimentalFeature("Extern"),
85+
.define("Tracing", .when(traits: ["Tracing"])),
86+
] + (enableTracingByEnv ? [.define("Tracing")] : []),
87+
linkerSettings: testingLinkerFlags
88+
),
89+
90+
.target(
91+
name: "JavaScriptBigIntSupport",
92+
dependencies: ["_CJavaScriptBigIntSupport", "JavaScriptKit"],
93+
swiftSettings: shouldBuildForEmbedded
94+
? [
95+
.enableExperimentalFeature("Embedded"),
96+
.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]),
97+
] : []
98+
),
99+
.target(name: "_CJavaScriptBigIntSupport", dependencies: ["_CJavaScriptKit"]),
100+
.testTarget(
101+
name: "JavaScriptBigIntSupportTests",
102+
dependencies: ["JavaScriptBigIntSupport", "JavaScriptKit"],
103+
linkerSettings: testingLinkerFlags
104+
),
105+
106+
.target(
107+
name: "JavaScriptEventLoop",
108+
dependencies: ["JavaScriptKit", "_CJavaScriptEventLoop"],
109+
swiftSettings: shouldBuildForEmbedded
110+
? [
111+
.enableExperimentalFeature("Embedded"),
112+
.unsafeFlags(["-Xfrontend", "-emit-empty-object-file"]),
113+
] : []
114+
),
115+
.target(name: "_CJavaScriptEventLoop"),
116+
.testTarget(
117+
name: "JavaScriptEventLoopTests",
118+
dependencies: [
119+
"JavaScriptEventLoop",
120+
"JavaScriptKit",
121+
"JavaScriptEventLoopTestSupport",
122+
],
123+
swiftSettings: [
124+
.enableExperimentalFeature("Extern")
125+
],
126+
linkerSettings: testingLinkerFlags
127+
),
128+
.target(
129+
name: "JavaScriptEventLoopTestSupport",
130+
dependencies: [
131+
"_CJavaScriptEventLoopTestSupport",
132+
"JavaScriptEventLoop",
133+
]
134+
),
135+
.target(name: "_CJavaScriptEventLoopTestSupport"),
136+
.testTarget(
137+
name: "JavaScriptEventLoopTestSupportTests",
138+
dependencies: [
139+
"JavaScriptKit",
140+
"JavaScriptEventLoopTestSupport",
141+
],
142+
linkerSettings: testingLinkerFlags
143+
),
144+
.target(
145+
name: "JavaScriptFoundationCompat",
146+
dependencies: [
147+
"JavaScriptKit"
148+
]
149+
),
150+
.testTarget(
151+
name: "JavaScriptFoundationCompatTests",
152+
dependencies: [
153+
"JavaScriptFoundationCompat"
154+
],
155+
linkerSettings: testingLinkerFlags
156+
),
157+
.plugin(
158+
name: "PackageToJS",
159+
capability: .command(
160+
intent: .custom(verb: "js", description: "Convert a Swift package to a JavaScript package")
161+
),
162+
path: "Plugins/PackageToJS/Sources"
163+
),
164+
.plugin(
165+
name: "BridgeJS",
166+
capability: .buildTool(),
167+
dependencies: ["BridgeJSTool"],
168+
path: "Plugins/BridgeJS/Sources/BridgeJSBuildPlugin"
169+
),
170+
.plugin(
171+
name: "BridgeJSCommandPlugin",
172+
capability: .command(
173+
intent: .custom(verb: "bridge-js", description: "Generate bridging code"),
174+
permissions: [.writeToPackageDirectory(reason: "Generate bridging code")]
175+
),
176+
dependencies: ["BridgeJSTool"],
177+
path: "Plugins/BridgeJS/Sources/BridgeJSCommandPlugin"
178+
),
179+
.executableTarget(
180+
name: "BridgeJSTool",
181+
dependencies: [
182+
.product(name: "SwiftParser", package: "swift-syntax"),
183+
.product(name: "SwiftSyntax", package: "swift-syntax"),
184+
.product(name: "SwiftBasicFormat", package: "swift-syntax"),
185+
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
186+
],
187+
exclude: ["TS2Swift/JavaScript", "README.md"]
188+
),
189+
.testTarget(
190+
name: "BridgeJSRuntimeTests",
191+
dependencies: ["JavaScriptKit", "JavaScriptEventLoop"],
192+
exclude: [
193+
"bridge-js.config.json",
194+
"bridge-js.d.ts",
195+
"bridge-js.global.d.ts",
196+
"Generated/JavaScript",
197+
],
198+
swiftSettings: [
199+
.enableExperimentalFeature("Extern")
200+
],
201+
linkerSettings: testingLinkerFlags
202+
),
203+
.testTarget(
204+
name: "BridgeJSGlobalTests",
205+
dependencies: ["JavaScriptKit", "JavaScriptEventLoop"],
206+
exclude: [
207+
"bridge-js.config.json",
208+
"bridge-js.d.ts",
209+
"Generated/JavaScript",
210+
],
211+
swiftSettings: [
212+
.enableExperimentalFeature("Extern")
213+
],
214+
linkerSettings: testingLinkerFlags
215+
),
216+
]
217+
)

0 commit comments

Comments
 (0)