@@ -20,12 +20,14 @@ import struct Basics.Triple
20
20
import enum PackageGraph. BuildTriple
21
21
import class PackageModel. Manifest
22
22
import struct PackageModel. TargetDescription
23
+ import enum PackageModel. ProductType
23
24
import func SPMTestSupport. loadPackageGraph
24
25
25
26
import func SPMTestSupport. embeddedCxxInteropPackageGraph
26
27
import func SPMTestSupport. macrosPackageGraph
27
28
import func SPMTestSupport. macrosTestsPackageGraph
28
29
import func SPMTestSupport. mockBuildParameters
30
+ import func SPMTestSupport. toolsExplicitLibrariesGraph
29
31
import func SPMTestSupport. trivialPackageGraph
30
32
31
33
import struct SPMTestSupport. BuildPlanResult
@@ -37,7 +39,7 @@ import XCTest
37
39
38
40
final class CrossCompilationBuildPlanTests : XCTestCase {
39
41
func testEmbeddedWasmTarget( ) throws {
40
- var ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath : " /Pkg " )
42
+ var ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
41
43
42
44
let triple = try Triple ( " wasm32-unknown-none-wasm " )
43
45
var parameters = mockBuildParameters ( triple: triple)
@@ -68,7 +70,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
68
70
]
69
71
)
70
72
71
- ( graph, fs, observabilityScope) = try embeddedCxxInteropPackageGraph ( pkgRootPath : " /Pkg " )
73
+ ( graph, fs, observabilityScope) = try embeddedCxxInteropPackageGraph ( )
72
74
73
75
result = try BuildPlanResult ( plan: BuildPlan (
74
76
buildParameters: parameters,
@@ -98,9 +100,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
98
100
}
99
101
100
102
func testWasmTargetRelease( ) throws {
101
- let pkgPath = AbsolutePath ( " /Pkg " )
102
-
103
- let ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath: pkgPath)
103
+ let ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
104
104
105
105
var parameters = mockBuildParameters (
106
106
config: . release, triple: . wasi, linkerDeadStrip: true
@@ -133,7 +133,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
133
133
func testWASITarget( ) throws {
134
134
let pkgPath = AbsolutePath ( " /Pkg " )
135
135
136
- let ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath : pkgPath )
136
+ let ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
137
137
138
138
var parameters = mockBuildParameters ( triple: . wasi)
139
139
parameters. linkingParameters. shouldLinkStaticSwiftStdlib = true
@@ -306,6 +306,47 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
306
306
]
307
307
)
308
308
}
309
+
310
+ func testToolsExplicitLibraries( ) throws {
311
+ let destinationTriple = Triple . arm64Linux
312
+ let toolsTriple = Triple . x86_64MacOS
313
+
314
+ for (linkage, productFileName) in [ ( ProductType . LibraryType. static, " libSwiftSyntax-tool.a " ) , ( . dynamic, " libSwiftSyntax-tool.dylib " ) ] {
315
+ let ( graph, fs, scope) = try toolsExplicitLibrariesGraph ( linkage: linkage)
316
+ let plan = try BuildPlan (
317
+ destinationBuildParameters: mockBuildParameters ( shouldLinkStaticSwiftStdlib: true , triple: destinationTriple) ,
318
+ toolsBuildParameters: mockBuildParameters ( triple: toolsTriple) ,
319
+ graph: graph,
320
+ fileSystem: fs,
321
+ observabilityScope: scope
322
+ )
323
+ let result = try BuildPlanResult ( plan: plan)
324
+ result. checkProductsCount ( 4 )
325
+ result. checkTargetsCount ( 6 )
326
+
327
+ XCTAssertTrue ( try result. allTargets ( named: " SwiftSyntax " )
328
+ . map { try $0. swiftTarget ( ) }
329
+ . contains { $0. target. buildTriple == . tools } )
330
+
331
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " swift-mmioPackageTests " )
332
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " swift-mmioPackageDiscoveredTests " )
333
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " MMIOMacros " )
334
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " MMIOMacrosTests " )
335
+
336
+ let macroProducts = result. allProducts ( named: " MMIOMacros " )
337
+ XCTAssertEqual ( macroProducts. count, 1 )
338
+ let macroProduct = try XCTUnwrap ( macroProducts. first)
339
+ XCTAssertEqual ( macroProduct. buildParameters. triple, toolsTriple)
340
+
341
+ let swiftSyntaxProducts = result. allProducts ( named: " SwiftSyntax " )
342
+ XCTAssertEqual ( swiftSyntaxProducts. count, 2 )
343
+ let swiftSyntaxToolsProduct = try XCTUnwrap ( swiftSyntaxProducts. first { $0. product. buildTriple == . tools } )
344
+ let archiveArguments = try swiftSyntaxToolsProduct. archiveArguments ( )
345
+
346
+ // Verify that produced library file has a correct name
347
+ XCTAssertMatch ( archiveArguments, [ . contains( productFileName) ] )
348
+ }
349
+ }
309
350
}
310
351
311
352
extension BuildPlanResult {
0 commit comments