Skip to content

remove platforms from ResolvedPackage #4206

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/Build/BuildPlan.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1358,7 +1358,7 @@ public final class ProductBuildDescription {
// When deploying to macOS prior to macOS 12, add an rpath to the
// back-deployed concurrency libraries.
if useStdlibRpath, buildParameters.triple.isDarwin(),
let macOSSupportedPlatform = self.package.platforms.getDerived(for: .macOS),
let macOSSupportedPlatform = self.product.platforms.getDerived(for: .macOS),
macOSSupportedPlatform.version.major < 12 {
let backDeployedStdlib = buildParameters.toolchain.macosSwiftStdlib
.parentDirectory
Expand Down
8 changes: 2 additions & 6 deletions Sources/PackageGraph/PackageGraph+Loading.swift
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ private func createResolvedPackages(

packageBuilder.defaultLocalization = package.manifest.defaultLocalization

packageBuilder.platforms = computePlatforms(
let platforms = computePlatforms(
package: package,
usingXCTest: false,
platformRegistry: platformRegistry,
Expand Down Expand Up @@ -398,7 +398,7 @@ private func createResolvedPackages(
}
}
targetBuilder.defaultLocalization = packageBuilder.defaultLocalization
targetBuilder.platforms = targetBuilder.target.type == .test ? testPlatforms : packageBuilder.platforms
targetBuilder.platforms = targetBuilder.target.type == .test ? testPlatforms : platforms
}

// Create product builders for each product in the package. A product can only contain a target present in the same package.
Expand Down Expand Up @@ -945,9 +945,6 @@ private final class ResolvedPackageBuilder: ResolvedBuilder<ResolvedPackage> {
/// The defaultLocalization for this package.
var defaultLocalization: String? = nil

/// The platforms supported by this package.
var platforms: SupportedPlatforms = .init(declared: [], derived: [])

init(_ package: Package, productFilter: ProductFilter, isAllowedToVendUnsafeProducts: Bool, allowedToOverride: Bool) {
self.package = package
self.productFilter = productFilter
Expand All @@ -959,7 +956,6 @@ private final class ResolvedPackageBuilder: ResolvedBuilder<ResolvedPackage> {
return ResolvedPackage(
package: self.package,
defaultLocalization: self.defaultLocalization,
platforms: self.platforms,
dependencies: try self.dependencies.map{ try $0.construct() },
targets: try self.targets.map{ try $0.construct() },
products: try self.products.map{ try $0.construct() }
Expand Down
5 changes: 0 additions & 5 deletions Sources/PackageGraph/ResolvedPackage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,20 +45,15 @@ public final class ResolvedPackage {
/// The default localization for resources.
public let defaultLocalization: String?

/// The list of platforms that are supported by this target.
public let platforms: SupportedPlatforms

public init(
package: Package,
defaultLocalization: String?,
platforms: SupportedPlatforms,
dependencies: [ResolvedPackage],
targets: [ResolvedTarget],
products: [ResolvedProduct]
) {
self.underlyingPackage = package
self.defaultLocalization = defaultLocalization
self.platforms = platforms
self.dependencies = dependencies
self.targets = targets
self.products = products
Expand Down
54 changes: 33 additions & 21 deletions Sources/XCBuildSupport/PIFBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -261,12 +261,6 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
settings[.SDKROOT] = "auto"
settings[.SDK_VARIANT] = "auto"
settings[.SKIP_INSTALL] = "YES"
settings[.MACOSX_DEPLOYMENT_TARGET] = package.platforms.deploymentTarget(for: .macOS)
settings[.IPHONEOS_DEPLOYMENT_TARGET] = package.platforms.deploymentTarget(for: .iOS)
settings[.IPHONEOS_DEPLOYMENT_TARGET, for: .macCatalyst] = package.platforms.deploymentTarget(for: .macCatalyst)
settings[.TVOS_DEPLOYMENT_TARGET] = package.platforms.deploymentTarget(for: .tvOS)
settings[.WATCHOS_DEPLOYMENT_TARGET] = package.platforms.deploymentTarget(for: .watchOS)
settings[.DRIVERKIT_DEPLOYMENT_TARGET] = package.platforms.deploymentTarget(for: .driverKit)
settings[.DYLIB_INSTALL_NAME_BASE] = "@rpath"
settings[.USE_HEADERMAP] = "NO"
settings[.SWIFT_ACTIVE_COMPILATION_CONDITIONS] = ["$(inherited)", "SWIFT_PACKAGE"]
Expand All @@ -288,14 +282,6 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
.append("$(PLATFORM_DIR)/Developer/Library/Frameworks")
}

PlatformRegistry.default.knownPlatforms.forEach {
guard let platform = PIF.BuildSettings.Platform.from(platform: $0) else { return }
guard let supportedPlatform = package.platforms.getDerived(for: $0) else { return }
if !supportedPlatform.options.isEmpty {
settings[.SPECIALIZATION_SDK_OPTIONS, for: platform] = supportedPlatform.options
}
}

// Disable signing for all the things since there is no way to configure
// signing information in packages right now.
settings[.ENTITLEMENTS_REQUIRED] = "NO"
Expand Down Expand Up @@ -414,13 +400,8 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
settings[.LIBRARY_SEARCH_PATHS] = ["$(inherited)", "\(parameters.toolchainLibDir.pathString)/swift/macosx"]
}

// Tests can have a custom deployment target based on the minimum supported by XCTest.
if mainTarget.underlyingTarget.type == .test {
settings[.MACOSX_DEPLOYMENT_TARGET] = mainTarget.platforms.deploymentTarget(for: .macOS)
settings[.IPHONEOS_DEPLOYMENT_TARGET] = mainTarget.platforms.deploymentTarget(for: .iOS)
settings[.TVOS_DEPLOYMENT_TARGET] = mainTarget.platforms.deploymentTarget(for: .tvOS)
settings[.WATCHOS_DEPLOYMENT_TARGET] = mainTarget.platforms.deploymentTarget(for: .watchOS)
}
// platform min deployment targets
setDeploymentTargetBuildSettings(target: mainTarget, settings: &settings)

if product.type == .executable {
// Command-line tools are only supported for the macOS platforms.
Expand Down Expand Up @@ -554,6 +535,9 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
settings[.CURRENT_PROJECT_VERSION] = "1" // Build
}

// platform min deployment targets
setDeploymentTargetBuildSettings(product: product, settings: &settings)

pifTarget.addSourcesBuildPhase()
}

Expand Down Expand Up @@ -587,6 +571,9 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
settings[.SWIFT_MODULE_ALIASES] = aliases.map{ $0.key + "=" + $0.value }
}

// platform min deployment targets
setDeploymentTargetBuildSettings(target: target, settings: &settings)

// Create a set of build settings that will be imparted to any target that depends on this one.
var impartedSettings = PIF.BuildSettings()

Expand Down Expand Up @@ -715,6 +702,31 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
pifTarget.impartedBuildSettings = impartedSettings
}

private func setDeploymentTargetBuildSettings(target: ResolvedTarget, settings: inout PIF.BuildSettings) {
self.setDeploymentTargetBuildSettings(supportedPlatforms: target.platforms, settings: &settings)
}

private func setDeploymentTargetBuildSettings(product: ResolvedProduct, settings: inout PIF.BuildSettings) {
self.setDeploymentTargetBuildSettings(supportedPlatforms: product.platforms, settings: &settings)
}

private func setDeploymentTargetBuildSettings(supportedPlatforms platforms: SupportedPlatforms, settings: inout PIF.BuildSettings) {
settings[.MACOSX_DEPLOYMENT_TARGET] = platforms.deploymentTarget(for: .macOS)
settings[.IPHONEOS_DEPLOYMENT_TARGET] = platforms.deploymentTarget(for: .iOS)
settings[.IPHONEOS_DEPLOYMENT_TARGET, for: .macCatalyst] = platforms.deploymentTarget(for: .macCatalyst)
settings[.TVOS_DEPLOYMENT_TARGET] = platforms.deploymentTarget(for: .tvOS)
settings[.WATCHOS_DEPLOYMENT_TARGET] = platforms.deploymentTarget(for: .watchOS)
settings[.DRIVERKIT_DEPLOYMENT_TARGET] = platforms.deploymentTarget(for: .driverKit)

PlatformRegistry.default.knownPlatforms.forEach {
guard let platform = PIF.BuildSettings.Platform.from(platform: $0) else { return }
guard let supportedPlatform = platforms.getDerived(for: $0) else { return }
if !supportedPlatform.options.isEmpty {
settings[.SPECIALIZATION_SDK_OPTIONS, for: platform] = supportedPlatform.options
}
}
}

private func addSources(_ sources: Sources, to pifTarget: PIFTargetBuilder) {
// Create a group for the target's source files. For now we use an absolute path for it, but we should really
// make it be container-relative, since it's always inside the package directory.
Expand Down
Loading