@@ -17,6 +17,7 @@ import PackageModel
17
17
@testable import PackageLoading
18
18
import SPMBuildCore
19
19
import Build
20
+ import SwiftDriver
20
21
21
22
let hostTriple = Resources . default. toolchain. triple
22
23
#if os(macOS)
@@ -25,7 +26,7 @@ let hostTriple = Resources.default.toolchain.triple
25
26
let defaultTargetTriple : String = hostTriple. tripleString
26
27
#endif
27
28
28
- private struct MockToolchain : Toolchain {
29
+ private struct MockToolchain : SPMBuildCore . Toolchain {
29
30
let swiftCompiler = AbsolutePath ( " /fake/path/to/swiftc " )
30
31
let extraCCFlags : [ String ] = [ ]
31
32
let extraSwiftCFlags : [ String ] = [ ]
@@ -58,10 +59,10 @@ final class BuildPlanTests: XCTestCase {
58
59
func mockBuildParameters(
59
60
buildPath: AbsolutePath = AbsolutePath ( " /path/to/build " ) ,
60
61
config: BuildConfiguration = . debug,
61
- toolchain: Toolchain = MockToolchain ( ) ,
62
+ toolchain: SPMBuildCore . Toolchain = MockToolchain ( ) ,
62
63
flags: BuildFlags = BuildFlags ( ) ,
63
64
shouldLinkStaticSwiftStdlib: Bool = false ,
64
- destinationTriple: Triple = hostTriple,
65
+ destinationTriple: SPMBuildCore . Triple = hostTriple,
65
66
indexStoreMode: BuildParameters . IndexStoreMode = . off,
66
67
useExplicitModuleBuild: Bool = false
67
68
) -> BuildParameters {
@@ -80,7 +81,7 @@ final class BuildPlanTests: XCTestCase {
80
81
}
81
82
82
83
func mockBuildParameters( environment: BuildEnvironment ) -> BuildParameters {
83
- let triple : Triple
84
+ let triple : SPMBuildCore . Triple
84
85
switch environment. platform {
85
86
case . macOS:
86
87
triple = Triple . macOS
@@ -221,31 +222,40 @@ final class BuildPlanTests: XCTestCase {
221
222
]
222
223
)
223
224
XCTAssertNoDiagnostics ( diagnostics)
224
- let plan = try BuildPlan (
225
- buildParameters: mockBuildParameters (
226
- buildPath: buildDirPath,
227
- config: . release,
228
- toolchain: Resources . default. toolchain,
229
- destinationTriple: Resources . default. toolchain. triple,
230
- useExplicitModuleBuild: true
231
- ) ,
232
- graph: graph,
233
- diagnostics: diagnostics,
234
- fileSystem: fs
235
- )
225
+ do {
226
+ let plan = try BuildPlan (
227
+ buildParameters: mockBuildParameters (
228
+ buildPath: buildDirPath,
229
+ config: . release,
230
+ toolchain: Resources . default. toolchain,
231
+ destinationTriple: Resources . default. toolchain. triple,
232
+ useExplicitModuleBuild: true
233
+ ) ,
234
+ graph: graph,
235
+ diagnostics: diagnostics,
236
+ fileSystem: fs
237
+ )
236
238
237
- let yaml = buildDirPath. appending ( component: " release.yaml " )
238
- let llbuild = LLBuildManifestBuilder ( plan)
239
- try llbuild. generateManifest ( at: yaml)
240
- let contents = try localFileSystem. readFileContents ( yaml) . description
241
239
242
- // A few basic checks
243
- XCTAssertMatch ( contents, . contains( " -disable-implicit-swift-modules " ) )
244
- XCTAssertMatch ( contents, . contains( " -fno-implicit-modules " ) )
245
- XCTAssertMatch ( contents, . contains( " -explicit-swift-module-map-file " ) )
246
- XCTAssertMatch ( contents, . contains( " A-dependencies.json " ) )
247
- XCTAssertMatch ( contents, . contains( " B-dependencies.json " ) )
248
- XCTAssertMatch ( contents, . contains( " C-dependencies.json " ) )
240
+ let yaml = buildDirPath. appending ( component: " release.yaml " )
241
+ let llbuild = LLBuildManifestBuilder ( plan)
242
+ try llbuild. generateManifest ( at: yaml)
243
+ let contents = try localFileSystem. readFileContents ( yaml) . description
244
+
245
+ // A few basic checks
246
+ XCTAssertMatch ( contents, . contains( " -disable-implicit-swift-modules " ) )
247
+ XCTAssertMatch ( contents, . contains( " -fno-implicit-modules " ) )
248
+ XCTAssertMatch ( contents, . contains( " -explicit-swift-module-map-file " ) )
249
+ XCTAssertMatch ( contents, . contains( " A-dependencies.json " ) )
250
+ XCTAssertMatch ( contents, . contains( " B-dependencies.json " ) )
251
+ XCTAssertMatch ( contents, . contains( " C-dependencies.json " ) )
252
+ } catch Driver . Error . unableToDecodeFrontendTargetInfo {
253
+ // If the toolchain being used is sufficiently old, the integrated driver
254
+ // will not be able to parse the `-print-target-info` output. In which case,
255
+ // we cannot yet rely on the integrated swift driver.
256
+ // This effectively guards the test from running on unupported, older toolchains.
257
+ return
258
+ }
249
259
}
250
260
}
251
261
@@ -1858,7 +1868,7 @@ final class BuildPlanTests: XCTestCase {
1858
1868
)
1859
1869
XCTAssertNoDiagnostics ( diagnostics)
1860
1870
1861
- func createResult( for dest: Triple ) throws -> BuildPlanResult {
1871
+ func createResult( for dest: SPMBuildCore . Triple ) throws -> BuildPlanResult {
1862
1872
return BuildPlanResult ( plan: try BuildPlan (
1863
1873
buildParameters: mockBuildParameters ( destinationTriple: dest) ,
1864
1874
graph: graph, diagnostics: diagnostics,
@@ -2302,7 +2312,8 @@ final class BuildPlanTests: XCTestCase {
2302
2312
] )
2303
2313
}
2304
2314
2305
- func testBinaryTargets( platform: String , arch: String , destinationTriple: Triple ) throws {
2315
+ func testBinaryTargets( platform: String , arch: String , destinationTriple: SPMBuildCore . Triple )
2316
+ throws {
2306
2317
let fs = InMemoryFileSystem ( emptyFiles:
2307
2318
" /Pkg/Sources/exe/main.swift " ,
2308
2319
" /Pkg/Sources/Library/Library.swift " ,
@@ -2446,9 +2457,9 @@ final class BuildPlanTests: XCTestCase {
2446
2457
2447
2458
func testBinaryTargets( ) throws {
2448
2459
try testBinaryTargets ( platform: " macos " , arch: " x86_64 " , destinationTriple: . macOS)
2449
- let arm64Triple = try Triple ( " arm64-apple-macosx " )
2460
+ let arm64Triple = try SPMBuildCore . Triple ( " arm64-apple-macosx " )
2450
2461
try testBinaryTargets ( platform: " macos " , arch: " arm64 " , destinationTriple: arm64Triple)
2451
- let arm64eTriple = try Triple ( " arm64e-apple-macosx " )
2462
+ let arm64eTriple = try SPMBuildCore . Triple ( " arm64e-apple-macosx " )
2452
2463
try testBinaryTargets ( platform: " macos " , arch: " arm64e " , destinationTriple: arm64eTriple)
2453
2464
}
2454
2465
@@ -2468,7 +2479,7 @@ final class BuildPlanTests: XCTestCase {
2468
2479
try sanitizerTest ( . scudo, expectedName: " scudo " )
2469
2480
}
2470
2481
2471
- private func sanitizerTest( _ sanitizer: Sanitizer , expectedName: String ) throws {
2482
+ private func sanitizerTest( _ sanitizer: SPMBuildCore . Sanitizer , expectedName: String ) throws {
2472
2483
let fs = InMemoryFileSystem ( emptyFiles:
2473
2484
" /Pkg/Sources/exe/main.swift " ,
2474
2485
" /Pkg/Sources/lib/lib.swift " ,
@@ -2582,7 +2593,7 @@ fileprivate extension TargetBuildDescription {
2582
2593
}
2583
2594
}
2584
2595
2585
- fileprivate extension Triple {
2596
+ fileprivate extension SPMBuildCore . Triple {
2586
2597
static let x86_64Linux = try ! Triple ( " x86_64-unknown-linux-gnu " )
2587
2598
static let arm64Linux = try ! Triple ( " aarch64-unknown-linux-gnu " )
2588
2599
static let arm64Android = try ! Triple ( " aarch64-unknown-linux-android " )
0 commit comments