Skip to content

Commit 256bea3

Browse files
committed
Converted to SwiftBuild.ProjectModel API
1 parent e18231f commit 256bea3

7 files changed

+684
-540
lines changed

Sources/SwiftBuildSupport/PIFBuilder.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1642,8 +1642,8 @@ private struct PIFBuildSettingAssignment {
16421642
}
16431643

16441644
extension PackageModel.BuildSettings.AssignmentTable {
1645-
fileprivate var pifAssignments: [BuildSettings.MultipleValueSetting: [PIFBuildSettingAssignment]] {
1646-
var pifAssignments: [BuildSettings.MultipleValueSetting: [PIFBuildSettingAssignment]] = [:]
1645+
fileprivate var pifAssignments: [PIF.BuildSettings.MultipleValueSetting: [PIFBuildSettingAssignment]] {
1646+
var pifAssignments: [PIF.BuildSettings.MultipleValueSetting: [PIFBuildSettingAssignment]] = [:]
16471647

16481648
for (declaration, assignments) in self.assignments {
16491649
for assignment in assignments {
@@ -1866,7 +1866,7 @@ extension PIF.BuildSettings {
18661866
.filter { isSupportedVersion($0) }.map(\.description)
18671867
}
18681868

1869-
func computeEffectiveTargetVersion(for assignment: BuildSettings.Assignment) throws -> String {
1869+
func computeEffectiveTargetVersion(for assignment: PackageModel.BuildSettings.Assignment) throws -> String {
18701870
let versions = assignment.values.compactMap { SwiftLanguageVersion(string: $0) }
18711871
if let effectiveVersion = computeEffectiveSwiftVersions(for: versions).last {
18721872
return effectiveVersion

Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift

Lines changed: 68 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ extension TargetGUIDSuffix? {
7676

7777
extension PackageModel.Module {
7878
func pifTargetGUID(suffix: TargetGUIDSuffix? = nil) -> GUID {
79-
PIFPackageBuilder.targetGUID(forModuleName: self.name, suffix: suffix)
79+
PackagePIFBuilder.targetGUID(forModuleName: self.name, suffix: suffix)
8080
}
8181
}
8282

@@ -88,7 +88,7 @@ extension PackageGraph.ResolvedModule {
8888

8989
extension PackageModel.Product {
9090
func pifTargetGUID(suffix: TargetGUIDSuffix? = nil) -> GUID {
91-
PIFPackageBuilder.targetGUID(forProductName: self.name, suffix: suffix)
91+
PackagePIFBuilder.targetGUID(forProductName: self.name, suffix: suffix)
9292
}
9393
}
9494

@@ -105,7 +105,7 @@ extension PackageGraph.ResolvedProduct {
105105
}
106106
}
107107

108-
extension PIFPackageBuilder {
108+
extension PackagePIFBuilder {
109109
/// Helper function to consistently generate a PIF target identifier string for a module in a package.
110110
///
111111
/// This format helps make sure that there is no collision with any other PIF targets,
@@ -140,13 +140,13 @@ extension PackageModel.Package {
140140
}
141141

142142
var packageBaseBuildSettings: ProjectModel.BuildSettings {
143-
var settings = SwiftBuild.ProjectModel.BuildSettings()
144-
settings.SDKROOT = "auto"
145-
settings.SDK_VARIANT = "auto"
143+
var settings = BuildSettings()
144+
settings[.SDKROOT] = "auto"
145+
settings[.SDK_VARIANT] = "auto"
146146

147147
if self.manifest.toolsVersion >= ToolsVersion.v6_0 {
148148
if let version = manifest.version, !version.isPrerelease && !version.hasBuildMetadata {
149-
settings.SWIFT_USER_MODULE_VERSION = version.stringRepresentation
149+
settings[.SWIFT_USER_MODULE_VERSION] = version.stringRepresentation
150150
}
151151
}
152152
return settings
@@ -203,22 +203,22 @@ extension PackageModel.Platform {
203203
}
204204

205205
extension Sequence<PackageModel.PackageCondition> {
206-
func toPlatformFilter(toolsVersion: ToolsVersion) -> Set<SwiftBuild.ProjectModel.PlatformFilter> {
207-
let pifPlatforms = self.flatMap { packageCondition -> [SwiftBuild.ProjectModel.BuildSettings.Platform] in
206+
func toPlatformFilter(toolsVersion: ToolsVersion) -> Set<ProjectModel.PlatformFilter> {
207+
let pifPlatforms = self.flatMap { packageCondition -> [ProjectModel.BuildSettings.Platform] in
208208
guard let platforms = packageCondition.platformsCondition?.platforms else {
209209
return []
210210
}
211211

212-
var pifPlatformsForCondition: [SwiftBuild.ProjectModel.BuildSettings.Platform] = platforms
213-
.map { SwiftBuild.ProjectModel.BuildSettings.Platform(from: $0) }
212+
var pifPlatformsForCondition: [ProjectModel.BuildSettings.Platform] = platforms
213+
.map { ProjectModel.BuildSettings.Platform(from: $0) }
214214

215215
// Treat catalyst like macOS for backwards compatibility with older tools versions.
216216
if pifPlatformsForCondition.contains(.macOS), toolsVersion < ToolsVersion.v5_5 {
217217
pifPlatformsForCondition.append(.macCatalyst)
218218
}
219219
return pifPlatformsForCondition
220220
}
221-
return pifPlatforms.toPlatformFilter()
221+
return Set(pifPlatforms.flatMap { $0.toPlatformFilter() })
222222
}
223223

224224
var splitIntoConcreteConditions: (
@@ -290,7 +290,7 @@ extension PackageGraph.ResolvedPackage {
290290
}
291291

292292
/// The options declared per platform.
293-
func sdkOptions(delegate: PIFPackageBuilder.BuildDelegate) -> [PackageModel.Platform: [String]] {
293+
func sdkOptions(delegate: PackagePIFBuilder.BuildDelegate) -> [PackageModel.Platform: [String]] {
294294
let platformDescriptionsByName: [String: PlatformDescription] = Dictionary(
295295
uniqueKeysWithValues: self.manifest.platforms.map { platformDescription in
296296
let key = platformDescription.platformName.lowercased()
@@ -313,7 +313,7 @@ extension PackageGraph.ResolvedPackage {
313313
}
314314

315315
extension PackageGraph.ResolvedPackage {
316-
public var packageBaseBuildSettings: SwiftBuild.ProjectModel.BuildSettings {
316+
public var packageBaseBuildSettings: ProjectModel.BuildSettings {
317317
self.underlying.packageBaseBuildSettings
318318
}
319319
}
@@ -337,7 +337,7 @@ extension PackageGraph.ResolvedModule {
337337
}
338338

339339
/// Minimum deployment targets for particular platforms, as declared in the manifest.
340-
func deploymentTargets(using delegate: PIFPackageBuilder.BuildDelegate) -> [PackageModel.Platform: String] {
340+
func deploymentTargets(using delegate: PackagePIFBuilder.BuildDelegate) -> [PackageModel.Platform: String] {
341341
let isUsingXCTest = (self.type == .test)
342342
let derivedSupportedPlatforms: [SupportedPlatform] = Platform.knownPlatforms.map {
343343
self.getSupportedPlatform(for: $0, usingXCTest: isUsingXCTest)
@@ -488,8 +488,7 @@ extension PackageGraph.ResolvedModule {
488488
func productRepresentingDependencyOfBuildPlugin(in mainModuleProducts: [ResolvedProduct]) -> ResolvedProduct? {
489489
mainModuleProducts.only { (mainModuleProduct: ResolvedProduct) -> Bool in
490490
// NOTE: We can't use the 'id' here as we need to explicitly ignore the build triple because our build
491-
// triple
492-
// will be '.tools' while the target we want to depend on will have a build triple of '.destination'.
491+
// triple will be '.tools' while the target we want to depend on will have a build triple of '.destination'.
493492
// See for more details:
494493
// https://github.com/swiftlang/swift-package-manager/commit/b22168ec41061ddfa3438f314a08ac7a776bef7a.
495494
return mainModuleProduct.mainModule!.packageIdentity == self.packageIdentity &&
@@ -499,7 +498,7 @@ extension PackageGraph.ResolvedModule {
499498
}
500499

501500
struct AllBuildSettings {
502-
typealias BuildSettingsByPlatform = [PackageModel.Platform?: [BuildSettings.Declaration: [String]]]
501+
typealias BuildSettingsByPlatform = [ProjectModel.BuildSettings.Platform?: [BuildSettings.Declaration: [String]]]
503502

504503
/// Target-specific build settings declared in the manifest and that apply to the target itself.
505504
var targetSettings: [BuildConfiguration: BuildSettingsByPlatform] = [:]
@@ -518,47 +517,51 @@ extension PackageGraph.ResolvedModule {
518517

519518
for (declaration, settingsAssigments) in self.underlying.buildSettings.assignments {
520519
for settingAssignment in settingsAssigments {
521-
// Create a build setting value; in some cases there isn't a direct mapping to Swift Build build
522-
// settings.
523-
let swbDeclaration: BuildSettings.Declaration
520+
// Create a build setting value; in some cases there
521+
// isn't a direct mapping to Swift Build build settings.
522+
let pifDeclaration: BuildSettings.Declaration
524523
let values: [String]
525524
switch declaration {
526525
case .LINK_FRAMEWORKS:
527-
swbDeclaration = .OTHER_LDFLAGS
526+
pifDeclaration = .OTHER_LDFLAGS
528527
values = settingAssignment.values.flatMap { ["-framework", $0] }
529528
case .LINK_LIBRARIES:
530-
swbDeclaration = .OTHER_LDFLAGS
529+
pifDeclaration = .OTHER_LDFLAGS
531530
values = settingAssignment.values.map { "-l\($0)" }
532531
case .HEADER_SEARCH_PATHS:
533-
swbDeclaration = .HEADER_SEARCH_PATHS
532+
pifDeclaration = .HEADER_SEARCH_PATHS
534533
values = settingAssignment.values.map { self.sourceDirAbsolutePath.pathString + "/" + $0 }
535534
default:
536-
swbDeclaration = declaration
535+
pifDeclaration = ProjectModel.BuildSettings.Declaration(from: declaration)
537536
values = settingAssignment.values
538537
}
539538

540539
// TODO: We are currently ignoring package traits (see rdar://138149810).
541540
let (platforms, configurations, _) = settingAssignment.conditions.splitIntoConcreteConditions
542541

543542
for platform in platforms {
544-
if swbDeclaration == .OTHER_LDFLAGS {
545-
var settingsByDeclaration: [BuildSettings.Declaration: [String]] = allSettings
546-
.impartedSettings[platform] ?? [:]
547-
settingsByDeclaration[swbDeclaration, default: []].append(contentsOf: values)
543+
let pifPlatform = platform.map { ProjectModel.BuildSettings.Platform(from: $0) }
544+
545+
if pifDeclaration == .OTHER_LDFLAGS {
546+
var settingsByDeclaration: [ProjectModel.BuildSettings.Declaration: [String]]
548547

549-
allSettings.impartedSettings[platform] = settingsByDeclaration
548+
settingsByDeclaration = allSettings.impartedSettings[pifPlatform] ?? [:]
549+
settingsByDeclaration[pifDeclaration, default: []].append(contentsOf: values)
550+
551+
allSettings.impartedSettings[pifPlatform] = settingsByDeclaration
550552
}
551553

552554
for configuration in configurations {
553-
var settingsByDeclaration: [BuildSettings.Declaration: [String]] = allSettings
554-
.targetSettings[configuration]?[platform] ?? [:]
555-
if swbDeclaration.allowsMultipleValues {
556-
settingsByDeclaration[swbDeclaration, default: []].append(contentsOf: values)
555+
var settingsByDeclaration: [ProjectModel.BuildSettings.Declaration: [String]]
556+
settingsByDeclaration = allSettings.targetSettings[configuration]?[pifPlatform] ?? [:]
557+
558+
if declaration.allowsMultipleValues {
559+
settingsByDeclaration[pifDeclaration, default: []].append(contentsOf: values)
557560
} else {
558-
settingsByDeclaration[swbDeclaration] = values.only.flatMap { [$0] } ?? []
561+
settingsByDeclaration[pifDeclaration] = values.only.flatMap { [$0] } ?? []
559562
}
560563

561-
allSettings.targetSettings[configuration, default: [:]][platform] = settingsByDeclaration
564+
allSettings.targetSettings[configuration, default: [:]][pifPlatform] = settingsByDeclaration
562565
}
563566
}
564567
}
@@ -799,34 +802,38 @@ extension ProjectModel.BuildSettings {
799802
}
800803
}
801804

802-
/// Helpers for building custom PIF targets by `PIFPackageBuilder` clients.
803-
extension SwiftBuild.ProjectModel.Project {
805+
/// Helpers for building custom PIF targets by `PackagePIFBuilder` clients.
806+
extension ProjectModel.Project {
804807
@discardableResult
805-
public func addTarget(
808+
public mutating func addTarget(
806809
packageProductName: String,
807-
productType: SwiftBuild.ProjectModel.Target.ProductType
808-
) throws -> SwiftBuild.ProjectModel.Target {
809-
let pifTarget = try self.addTargetThrowing(
810-
id: PIFPackageBuilder.targetGUID(forProductName: packageProductName),
811-
productType: productType,
812-
name: packageProductName,
813-
productName: packageProductName
814-
)
815-
return pifTarget
810+
productType: ProjectModel.Target.ProductType
811+
) throws -> WritableKeyPath<ProjectModel.Project, ProjectModel.Target> {
812+
let targetKeyPath = try self.addTarget { _ in
813+
ProjectModel.Target(
814+
id: PackagePIFBuilder.targetGUID(forProductName: packageProductName),
815+
productType: productType,
816+
name: packageProductName,
817+
productName: packageProductName
818+
)
819+
}
820+
return targetKeyPath
816821
}
817822

818823
@discardableResult
819-
public func addTarget(
824+
public mutating func addTarget(
820825
packageModuleName: String,
821-
productType: SwiftBuild.ProjectModel.Target.ProductType
822-
) throws -> SwiftBuild.ProjectModel.Target {
823-
let pifTarget = try self.addTargetThrowing(
824-
id: PIFPackageBuilder.targetGUID(forModuleName: packageModuleName),
825-
productType: productType,
826-
name: packageModuleName,
827-
productName: packageModuleName
828-
)
829-
return pifTarget
826+
productType: ProjectModel.Target.ProductType
827+
) throws -> WritableKeyPath<ProjectModel.Project, ProjectModel.Target> {
828+
let targetKeyPath = try self.addTarget { _ in
829+
ProjectModel.Target(
830+
id: PackagePIFBuilder.targetGUID(forModuleName: packageModuleName),
831+
productType: productType,
832+
name: packageModuleName,
833+
productName: packageModuleName
834+
)
835+
}
836+
return targetKeyPath
830837
}
831838
}
832839

@@ -929,7 +936,7 @@ extension ProjectModel.BuildSettings.Platform {
929936
}
930937
}
931938

932-
extension SwiftBuild.ProjectModel.BuildSettings {
939+
extension ProjectModel.BuildSettings {
933940
/// Configure necessary settings for a dynamic library/framework.
934941
mutating func configureDynamicSettings(
935942
productName: String,
@@ -939,7 +946,7 @@ extension SwiftBuild.ProjectModel.BuildSettings {
939946
packageName: String?,
940947
createDylibForDynamicProducts: Bool,
941948
installPath: String,
942-
delegate: PIFPackageBuilder.BuildDelegate
949+
delegate: PackagePIFBuilder.BuildDelegate
943950
) {
944951
self[.TARGET_NAME] = targetName
945952
self[.PRODUCT_NAME] = createDylibForDynamicProducts ? productName : executableName
@@ -973,7 +980,7 @@ extension SwiftBuild.ProjectModel.BuildSettings {
973980
}
974981
}
975982

976-
extension SwiftBuild.ProjectModel.BuildSettings.Declaration {
983+
extension ProjectModel.BuildSettings.Declaration {
977984
init(from declaration: PackageModel.BuildSettings.Declaration) {
978985
self = switch declaration {
979986
// Swift.

Sources/SwiftBuildSupport/PackagePIFBuilder+Plugins.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import struct Basics.SourceControlURL
1919

2020
import enum SwiftBuild.ProjectModel
2121

22-
extension PIFPackageBuilder {
22+
extension PackagePIFBuilder {
2323
/// Contains all of the information resulting from applying a build tool plugin to a package target thats affect how
2424
/// a target is built.
2525
///

0 commit comments

Comments
 (0)