@@ -20,6 +20,7 @@ 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
@_spi ( SwiftPMInternal)
@@ -29,8 +30,7 @@ import func SPMTestSupport.embeddedCxxInteropPackageGraph
29
30
import func SPMTestSupport. macrosPackageGraph
30
31
import func SPMTestSupport. macrosTestsPackageGraph
31
32
import func SPMTestSupport. mockBuildParameters
32
-
33
- @_spi ( SwiftPMInternal)
33
+ import func SPMTestSupport. toolsExplicitLibrariesGraph
34
34
import func SPMTestSupport. trivialPackageGraph
35
35
36
36
import struct SPMTestSupport. BuildPlanResult
@@ -42,7 +42,7 @@ import XCTest
42
42
43
43
final class CrossCompilationBuildPlanTests : XCTestCase {
44
44
func testEmbeddedWasmTarget( ) throws {
45
- var ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath : " /Pkg " )
45
+ var ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
46
46
47
47
let triple = try Triple ( " wasm32-unknown-none-wasm " )
48
48
var parameters = mockBuildParameters ( triple: triple)
@@ -73,7 +73,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
73
73
]
74
74
)
75
75
76
- ( graph, fs, observabilityScope) = try embeddedCxxInteropPackageGraph ( pkgRootPath : " /Pkg " )
76
+ ( graph, fs, observabilityScope) = try embeddedCxxInteropPackageGraph ( )
77
77
78
78
result = try BuildPlanResult ( plan: BuildPlan (
79
79
buildParameters: parameters,
@@ -103,9 +103,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
103
103
}
104
104
105
105
func testWasmTargetRelease( ) throws {
106
- let pkgPath = AbsolutePath ( " /Pkg " )
107
-
108
- let ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath: pkgPath)
106
+ let ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
109
107
110
108
var parameters = mockBuildParameters (
111
109
config: . release, triple: . wasi, linkerDeadStrip: true
@@ -138,7 +136,7 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
138
136
func testWASITarget( ) throws {
139
137
let pkgPath = AbsolutePath ( " /Pkg " )
140
138
141
- let ( graph, fs, observabilityScope) = try trivialPackageGraph ( pkgRootPath : pkgPath )
139
+ let ( graph, fs, observabilityScope) = try trivialPackageGraph ( )
142
140
143
141
var parameters = mockBuildParameters ( triple: . wasi)
144
142
parameters. linkingParameters. shouldLinkStaticSwiftStdlib = true
@@ -311,6 +309,47 @@ final class CrossCompilationBuildPlanTests: XCTestCase {
311
309
]
312
310
)
313
311
}
312
+
313
+ func testToolsExplicitLibraries( ) throws {
314
+ let destinationTriple = Triple . arm64Linux
315
+ let toolsTriple = Triple . x86_64MacOS
316
+
317
+ for (linkage, productFileName) in [ ( ProductType . LibraryType. static, " libSwiftSyntax-tool.a " ) , ( . dynamic, " libSwiftSyntax-tool.dylib " ) ] {
318
+ let ( graph, fs, scope) = try toolsExplicitLibrariesGraph ( linkage: linkage)
319
+ let plan = try BuildPlan (
320
+ destinationBuildParameters: mockBuildParameters ( shouldLinkStaticSwiftStdlib: true , triple: destinationTriple) ,
321
+ toolsBuildParameters: mockBuildParameters ( triple: toolsTriple) ,
322
+ graph: graph,
323
+ fileSystem: fs,
324
+ observabilityScope: scope
325
+ )
326
+ let result = try BuildPlanResult ( plan: plan)
327
+ result. checkProductsCount ( 4 )
328
+ result. checkTargetsCount ( 6 )
329
+
330
+ XCTAssertTrue ( try result. allTargets ( named: " SwiftSyntax " )
331
+ . map { try $0. swiftTarget ( ) }
332
+ . contains { $0. target. buildTriple == . tools } )
333
+
334
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " swift-mmioPackageTests " )
335
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " swift-mmioPackageDiscoveredTests " )
336
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " MMIOMacros " )
337
+ try result. check ( buildTriple: . tools, triple: toolsTriple, for: " MMIOMacrosTests " )
338
+
339
+ let macroProducts = result. allProducts ( named: " MMIOMacros " )
340
+ XCTAssertEqual ( macroProducts. count, 1 )
341
+ let macroProduct = try XCTUnwrap ( macroProducts. first)
342
+ XCTAssertEqual ( macroProduct. buildParameters. triple, toolsTriple)
343
+
344
+ let swiftSyntaxProducts = result. allProducts ( named: " SwiftSyntax " )
345
+ XCTAssertEqual ( swiftSyntaxProducts. count, 2 )
346
+ let swiftSyntaxToolsProduct = try XCTUnwrap ( swiftSyntaxProducts. first { $0. product. buildTriple == . tools } )
347
+ let archiveArguments = try swiftSyntaxToolsProduct. archiveArguments ( )
348
+
349
+ // Verify that produced library file has a correct name
350
+ XCTAssertMatch ( archiveArguments, [ . contains( productFileName) ] )
351
+ }
352
+ }
314
353
}
315
354
316
355
extension BuildPlanResult {
0 commit comments