@@ -378,9 +378,9 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
378
378
379
379
let subsetDescriptor : String ?
380
380
switch subset {
381
- case . product( let productName) :
381
+ case . product( let productName, _ ) :
382
382
subsetDescriptor = " product ' \( productName) ' "
383
- case . target( let targetName) :
383
+ case . target( let targetName, _ ) :
384
384
subsetDescriptor = " target: ' \( targetName) ' "
385
385
case . allExcludingTests, . allIncludingTests:
386
386
subsetDescriptor = nil
@@ -433,10 +433,10 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
433
433
case . allExcludingTests, . allIncludingTests:
434
434
pluginsToCompile = allPlugins
435
435
continueBuilding = true
436
- case . product( let productName) :
436
+ case . product( let productName, _ ) :
437
437
pluginsToCompile = allPlugins. filter { $0. productNames. contains ( productName) }
438
438
continueBuilding = pluginsToCompile. isEmpty
439
- case . target( let targetName) :
439
+ case . target( let targetName, _ ) :
440
440
pluginsToCompile = allPlugins. filter { $0. targetName == targetName }
441
441
continueBuilding = pluginsToCompile. isEmpty
442
442
}
@@ -522,12 +522,14 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
522
522
return LLBuildManifestBuilder . TargetKind. main. targetName
523
523
case . allIncludingTests:
524
524
return LLBuildManifestBuilder . TargetKind. test. targetName
525
- default :
525
+ case . product ( _ , let destination ) , . target ( _ , let destination ) :
526
526
// FIXME: This is super unfortunate that we might need to load the package graph.
527
527
let graph = try getPackageGraph ( )
528
528
if let result = subset. llbuildTargetName (
529
529
for: graph,
530
- buildParameters: self . productsBuildParameters,
530
+ using: destination == . host
531
+ ? self . toolsBuildParameters
532
+ : self . productsBuildParameters,
531
533
observabilityScope: self . observabilityScope
532
534
) {
533
535
return result
@@ -550,15 +552,15 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
550
552
// done, which makes it hard to realign them all at once.
551
553
var pluginsBuildParameters = self . toolsBuildParameters
552
554
pluginsBuildParameters. dataPath = pluginsBuildParameters. dataPath. parentDirectory. appending ( components: [ " plugins " , " tools " ] )
553
- var buildToolsGraph = graph
554
- try buildToolsGraph. updateBuildTripleRecursively ( . tools)
555
+
556
+ var targetBuildParameters = pluginsBuildParameters
557
+ targetBuildParameters. destination = . target
555
558
556
559
let buildOperationForPluginDependencies = BuildOperation (
557
- // FIXME: this doesn't maintain the products/tools split cleanly
558
- productsBuildParameters: pluginsBuildParameters,
560
+ productsBuildParameters: targetBuildParameters,
559
561
toolsBuildParameters: pluginsBuildParameters,
560
562
cacheBuildManifest: false ,
561
- packageGraphLoader: { buildToolsGraph } ,
563
+ packageGraphLoader: { graph } ,
562
564
scratchDirectory: pluginsBuildParameters. dataPath,
563
565
additionalFileRules: self . additionalFileRules,
564
566
pkgConfigDirectories: self . pkgConfigDirectories,
@@ -569,7 +571,8 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
569
571
fileSystem: self . fileSystem,
570
572
observabilityScope: self . observabilityScope
571
573
)
572
- buildToolPluginInvocationResults = try buildToolsGraph. invokeBuildToolPlugins (
574
+
575
+ buildToolPluginInvocationResults = try graph. invokeBuildToolPlugins (
573
576
outputDir: pluginConfiguration. workDirectory. appending ( " outputs " ) ,
574
577
buildParameters: pluginsBuildParameters,
575
578
additionalFileRules: self . additionalFileRules,
@@ -579,8 +582,10 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
579
582
observabilityScope: self . observabilityScope,
580
583
fileSystem: self . fileSystem
581
584
) { name, path in
582
- try buildOperationForPluginDependencies. build ( subset: . product( name) )
583
- if let builtTool = try buildOperationForPluginDependencies. buildPlan. buildProducts. first ( where: { $0. product. name == name} ) {
585
+ try buildOperationForPluginDependencies. build ( subset: . product( name, for: . host) )
586
+ if let builtTool = try buildOperationForPluginDependencies. buildPlan. buildProducts. first ( where: {
587
+ $0. product. name == name && $0. product. buildTriple == . tools
588
+ } ) {
584
589
return try builtTool. binaryPath
585
590
} else {
586
591
return nil
@@ -893,13 +898,13 @@ extension BuildSubset {
893
898
return Array ( graph. reachableTargets)
894
899
case . allExcludingTests:
895
900
return graph. reachableTargets. filter { $0. type != . test }
896
- case . product( let productName) :
901
+ case . product( let productName, _ ) :
897
902
guard let product = graph. product ( for: productName) else {
898
903
observabilityScope. emit ( error: " no product named ' \( productName) ' " )
899
904
return nil
900
905
}
901
906
return try product. recursiveTargetDependencies ( )
902
- case . target( let targetName) :
907
+ case . target( let targetName, _ ) :
903
908
guard let target = graph. target ( for: targetName) else {
904
909
observabilityScope. emit ( error: " no target named ' \( targetName) ' " )
905
910
return nil
@@ -911,15 +916,17 @@ extension BuildSubset {
911
916
/// Returns the name of the llbuild target that corresponds to the build subset.
912
917
func llbuildTargetName(
913
918
for graph: ModulesGraph ,
914
- buildParameters: BuildParameters ,
919
+ using buildParameters: BuildParameters ,
915
920
observabilityScope: ObservabilityScope
916
921
) -> String ? {
917
922
switch self {
918
923
case . allExcludingTests:
919
924
return LLBuildManifestBuilder . TargetKind. main. targetName
920
925
case . allIncludingTests:
921
926
return LLBuildManifestBuilder . TargetKind. test. targetName
922
- case . product( let productName) :
927
+ case . product( let productName, let destination) :
928
+ precondition ( buildParameters. destination == destination)
929
+
923
930
guard let product = graph. product ( for: productName) else {
924
931
observabilityScope. emit ( error: " no product named ' \( productName) ' " )
925
932
return nil
@@ -936,7 +943,9 @@ extension BuildSubset {
936
943
return observabilityScope. trap {
937
944
try product. getLLBuildTargetName ( buildParameters: buildParameters)
938
945
}
939
- case . target( let targetName) :
946
+ case . target( let targetName, let destination) :
947
+ precondition ( buildParameters. destination == destination)
948
+
940
949
guard let target = graph. target ( for: targetName) else {
941
950
observabilityScope. emit ( error: " no target named ' \( targetName) ' " )
942
951
return nil
0 commit comments