@@ -14,22 +14,36 @@ extension Trait where Self == ConditionTrait {
14
14
15
15
static func requireSwiftSDK( triple: String ) -> ConditionTrait {
16
16
. enabled(
17
- if: ProcessInfo . processInfo. environment [ " SWIFT_SDK_ID " ] != nil
18
- && ProcessInfo . processInfo. environment [ " SWIFT_PATH " ] != nil
19
- && ProcessInfo . processInfo. environment [ " SWIFT_SDK_ID " ] !. hasSuffix ( triple) ,
17
+ if: {
18
+ guard let swiftSDKID = ProcessInfo . processInfo. environment [ " SWIFT_SDK_ID " ] ,
19
+ ProcessInfo . processInfo. environment [ " SWIFT_PATH " ] != nil else {
20
+ return false
21
+ }
22
+ func sanityCheckCompatibility( triple: String ) -> Bool {
23
+ return swiftSDKID. hasSuffix ( triple)
24
+ }
25
+ // For compatibility with old SDKs, we check wasm32-unknown-wasi as well when
26
+ // wasm32-unknown-wasip1 is requested.
27
+ if triple == " wasm32-unknown-wasip1 " {
28
+ if sanityCheckCompatibility ( triple: " wasm32-unknown-wasi " ) {
29
+ return true
30
+ }
31
+ }
32
+ return sanityCheckCompatibility ( triple: triple)
33
+ } ( ) ,
20
34
" Requires SWIFT_SDK_ID and SWIFT_PATH environment variables "
21
35
)
22
36
}
23
37
24
- static var requireEmbeddedSwift : ConditionTrait {
38
+ static func requireEmbeddedSwift( triple : String ) -> ConditionTrait {
25
39
// Check if $SWIFT_PATH/../lib/swift/embedded/wasm32-unknown-none-wasm/ exists
26
40
return . enabled(
27
41
if: {
28
42
guard let swiftPath = ProcessInfo . processInfo. environment [ " SWIFT_PATH " ] else {
29
43
return false
30
44
}
31
45
let embeddedPath = URL ( fileURLWithPath: swiftPath) . deletingLastPathComponent ( )
32
- . appending ( path: " lib/swift/embedded/wasm32-unknown-none-wasm " )
46
+ . appending ( path: " lib/swift/embedded/ \( triple ) " )
33
47
return FileManager . default. fileExists ( atPath: embeddedPath. path)
34
48
} ( ) ,
35
49
" Requires embedded Swift SDK under $SWIFT_PATH/../lib/swift/embedded "
@@ -46,6 +60,28 @@ extension Trait where Self == ConditionTrait {
46
60
ProcessInfo . processInfo. environment [ " SWIFT_PATH " ]
47
61
}
48
62
63
+ /// Check if the Swift SDK with the given ID is available.
64
+ static func isSwiftSDKAvailable( _ id: String ) throws -> Bool {
65
+ let swiftExecutable = URL (
66
+ fileURLWithPath: " swift " ,
67
+ relativeTo: URL ( fileURLWithPath: try #require( Self . getSwiftPath ( ) ) )
68
+ )
69
+ let process = Process ( )
70
+ process. executableURL = swiftExecutable
71
+ let arguments = [ " sdk " , " configure " , " --show-configuration " , id]
72
+ process. arguments = arguments
73
+ process. standardOutput = FileHandle . nullDevice
74
+ process. standardError = FileHandle . nullDevice
75
+ do {
76
+ try process. run ( )
77
+ process. waitUntilExit ( )
78
+ return process. terminationStatus == 0
79
+ } catch {
80
+ try #require( Bool ( false ) , " Failed to run swift \( arguments. joined ( separator: " " ) ) with error: \( error) " )
81
+ return false
82
+ }
83
+ }
84
+
49
85
static let repoPath = URL ( fileURLWithPath: #filePath)
50
86
. deletingLastPathComponent ( )
51
87
. deletingLastPathComponent ( )
@@ -220,7 +256,7 @@ extension Trait where Self == ConditionTrait {
220
256
let swiftPath = try #require( Self . getSwiftPath ( ) )
221
257
try withPackage ( at: " Examples/Testing " ) { packageDir, runProcess, runSwift in
222
258
try runSwift (
223
- [ " package " , " --swift-sdk " , swiftSDKID, " js " , " test " , " --enable-code-coverage " ] ,
259
+ [ " package " , " --disable-sandbox " , " -- swift-sdk" , swiftSDKID, " js " , " test " , " --enable-code-coverage " ] ,
224
260
[
225
261
" LLVM_PROFDATA_PATH " : URL ( fileURLWithPath: swiftPath) . appending ( path: " llvm-profdata " ) . path
226
262
]
@@ -267,7 +303,8 @@ extension Trait where Self == ConditionTrait {
267
303
}
268
304
}
269
305
270
- @Test ( . requireEmbeddedSwift) func embedded( ) throws {
306
+ @Test ( . requireEmbeddedSwift( triple: " wasm32-unknown-none-wasm " ) )
307
+ func embeddedWasmUnknownNone( ) throws {
271
308
try withPackage ( at: " Examples/Embedded " ) { packageDir, _, runSwift in
272
309
try runSwift (
273
310
[ " package " , " --triple " , " wasm32-unknown-none-wasm " , " js " , " -c " , " release " ] ,
@@ -278,6 +315,21 @@ extension Trait where Self == ConditionTrait {
278
315
}
279
316
}
280
317
318
+ @Test ( . requireSwiftSDK( triple: " wasm32-unknown-wasip1 " ) )
319
+ func embeddedWasmUnknownWasi( ) throws {
320
+ let baseSwiftSDKID = try #require( Self . getSwiftSDKID ( ) )
321
+ let swiftSDKID = " \( baseSwiftSDKID) -embedded "
322
+ try #require( try Self . isSwiftSDKAvailable ( swiftSDKID) , " Embedded Swift SDK with ID \( swiftSDKID) is not available " )
323
+ try withPackage ( at: " Examples/Embedded " ) { packageDir, _, runSwift in
324
+ try runSwift (
325
+ [ " package " , " --swift-sdk " , swiftSDKID, " js " , " -c " , " release " ] ,
326
+ [
327
+ " JAVASCRIPTKIT_EXPERIMENTAL_EMBEDDED_WASM " : " true "
328
+ ]
329
+ )
330
+ }
331
+ }
332
+
281
333
@Test ( . requireSwiftSDK)
282
334
func continuationLeakInTest_XCTest( ) throws {
283
335
let swiftSDKID = try #require( Self . getSwiftSDKID ( ) )
0 commit comments