Skip to content

Commit

Permalink
Packaging: Support using Tools Support Core dylib
Browse files Browse the repository at this point in the history
When Swift Package Manager used the SwiftBuild framework, it eventually
caused duplicate Swift Tools Support Core (TSC) duplicate symbols which
come from Swift Driver and Swift PM.

Swift PM depends on SwiftBuild, which depends on SwiftDriver, which
statically links TSC. Swift PM also has a statically linked dependency
on TSC.

The proper solution is to have SwiftDriver and SwiftPM both depend on
the TSC dynamic library when SwiftPM depends on the SwiftBuild framework,
which is determined by setting the SWIFTPM_SWBUILD_FRAMEWORK environment
variable.

rdar://144547608
  • Loading branch information
bkhouri committed Feb 14, 2025
1 parent 1890792 commit 3d5878a
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@ if let deploymentTarget = ProcessInfo.processInfo.environment["SWIFTPM_MACOS_DEP
macOSPlatform = .macOS(.v12)
}

let swiftToolsSupportCoreDep: [Target.Dependency]
if ProcessInfo.processInfo.environment["SWIFTPM_SWBUILD_FRAMEWORK"] == nil {
swiftToolsSupportCoreDep = [
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core")
]
} else {
swiftToolsSupportCoreDep = []
}

let package = Package(
name: "swift-driver",
platforms: [
Expand Down Expand Up @@ -51,18 +60,16 @@ let package = Package(
name: "SwiftDriver",
dependencies: [
"SwiftOptions",
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
"CSwiftScan",
],
] + swiftToolsSupportCoreDep,
exclude: ["CMakeLists.txt"]),

/// The execution library.
.target(
name: "SwiftDriverExecution",
dependencies: [
"SwiftDriver",
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core")
],
] + swiftToolsSupportCoreDep,
exclude: ["CMakeLists.txt"]),

/// Driver tests.
Expand All @@ -76,8 +83,8 @@ let package = Package(
dependencies: [
"IncrementalTestFramework",
"TestUtilities",
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
]),
] + swiftToolsSupportCoreDep
),

.target(
name: "IncrementalTestFramework",
Expand All @@ -100,9 +107,7 @@ let package = Package(
/// The options library.
.target(
name: "SwiftOptions",
dependencies: [
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
],
dependencies: swiftToolsSupportCoreDep,
exclude: ["CMakeLists.txt"]),
.testTarget(
name: "SwiftOptionsTests",
Expand All @@ -120,8 +125,7 @@ let package = Package(
dependencies: [
"SwiftOptions",
.product(name: "ArgumentParser", package: "swift-argument-parser"),
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
],
] + swiftToolsSupportCoreDep,
exclude: ["CMakeLists.txt"]),

/// Build SDK Interfaces tool executable.
Expand Down

0 comments on commit 3d5878a

Please sign in to comment.