Skip to content

Commit afa5e6d

Browse files
committed
Sever TSC/Driver dependencies if using SwiftBuild Framework
The SwiftBuild project has a dependency on Swift Driver, which has a dependency on Swift Tools Support Core (STSC). Swift Package Manager (SwiftPM) executable targets also have a dependency on STSC. Sever SwiftPM package dependency on STSC if the SWIFTPM_SWBUILD_FRAMEWORK environment variable is set so we can indirectly pull the STCS dependency on the dynamic library that will be pulled in via SwiftDriver.
1 parent 99b0b06 commit afa5e6d

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

Package.swift

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ if ProcessInfo.processInfo.environment["SWIFTCI_INSTALL_RPATH_OS"] == "android"
100100
*/
101101
let autoProducts = [swiftPMProduct, swiftPMDataModelProduct]
102102

103+
let shoudUseSwiftBuildFramework = (ProcessInfo.processInfo.environment["SWIFTPM_SWBUILD_FRAMEWORK"] != nil)
104+
105+
let swiftDriverDeps: [Target.Dependency]
106+
let swiftTSCBasicsDeps: [Target.Dependency]
107+
let swiftToolsCoreSupportAutoDeps: [Target.Dependency]
108+
109+
if shoudUseSwiftBuildFramework {
110+
swiftDriverDeps = []
111+
swiftTSCBasicsDeps = []
112+
swiftToolsCoreSupportAutoDeps = []
113+
} else {
114+
swiftDriverDeps = [
115+
.product(name: "SwiftDriver", package: "swift-driver")
116+
]
117+
swiftTSCBasicsDeps = [
118+
.product(name: "TSCBasic", package: "swift-tools-support-core"),
119+
]
120+
swiftToolsCoreSupportAutoDeps = [
121+
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core")
122+
]
123+
}
103124
let package = Package(
104125
name: "SwiftPM",
105126
platforms: [
@@ -244,9 +265,8 @@ let package = Package(
244265
.product(name: "SwiftToolchainCSQLite", package: "swift-toolchain-sqlite", condition: .when(platforms: [.windows, .android])),
245266
.product(name: "DequeModule", package: "swift-collections"),
246267
.product(name: "OrderedCollections", package: "swift-collections"),
247-
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
248268
.product(name: "SystemPackage", package: "swift-system"),
249-
],
269+
] + swiftToolsCoreSupportAutoDeps,
250270
exclude: ["CMakeLists.txt", "Vendor/README.md"],
251271
swiftSettings: swift6CompatibleExperimentalFeatures + [
252272
.enableExperimentalFeature("StrictConcurrency"),
@@ -309,8 +329,7 @@ let package = Package(
309329
name: "SwiftFixIt",
310330
dependencies: [
311331
"Basics",
312-
.product(name: "TSCBasic", package: "swift-tools-support-core"),
313-
] + swiftSyntaxDependencies(
332+
] + swiftTSCBasicsDeps + swiftSyntaxDependencies(
314333
["SwiftDiagnostics", "SwiftIDEUtils", "SwiftParser", "SwiftSyntax"]
315334
),
316335
exclude: ["CMakeLists.txt"],
@@ -474,10 +493,9 @@ let package = Package(
474493
"PackageGraph",
475494
"SPMBuildCore",
476495
"SPMLLBuild",
477-
.product(name: "SwiftDriver", package: "swift-driver"),
478496
.product(name: "OrderedCollections", package: "swift-collections"),
479497
"DriverSupport",
480-
],
498+
] + swiftDriverDeps,
481499
exclude: ["CMakeLists.txt"],
482500
swiftSettings: commonExperimentalFeatures + [
483501
.unsafeFlags(["-static"]),
@@ -488,8 +506,7 @@ let package = Package(
488506
dependencies: [
489507
"Basics",
490508
"PackageModel",
491-
.product(name: "SwiftDriver", package: "swift-driver"),
492-
],
509+
] + swiftDriverDeps,
493510
exclude: ["CMakeLists.txt"],
494511
swiftSettings: commonExperimentalFeatures + [
495512
.unsafeFlags(["-static"]),
@@ -1095,7 +1112,7 @@ if ProcessInfo.processInfo.environment["ENABLE_APPLE_PRODUCT_TYPES"] == "1" {
10951112
}
10961113
}
10971114

1098-
if ProcessInfo.processInfo.environment["SWIFTPM_SWBUILD_FRAMEWORK"] == nil {
1115+
if !shoudUseSwiftBuildFramework {
10991116

11001117
let swiftbuildsupport: Target = package.targets.first(where: { $0.name == "SwiftBuildSupport" } )!
11011118
swiftbuildsupport.dependencies += [

Tests/CommandsTests/TestCommandTests.swift

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -637,14 +637,6 @@ class TestCommandSwiftBuildTests: TestCommandTestCase {
637637
try await super.testUsage()
638638
}
639639

640-
override func testFatalErrorDisplayedCorrectNumberOfTimesWhenSingleXCTestHasFatalErrorInBuildCompilation() async throws {
641-
try await super.testFatalErrorDisplayedCorrectNumberOfTimesWhenSingleXCTestHasFatalErrorInBuildCompilation()
642-
}
643-
644-
override func testListWithSkipBuildAndNoBuildArtifacts() async throws {
645-
try await super.testListWithSkipBuildAndNoBuildArtifacts()
646-
}
647-
648640
override func testList() async throws {
649641
throw XCTSkip("SWBINTTODO: Test currently fails due to 'error: build failed'")
650642
}

Utilities/bootstrap

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ def add_build_args(parser):
130130
"--swift-build-path",
131131
help="path to the prebuilt SwiftPM `swift-build` binary",
132132
metavar="PATH")
133+
parser.add_argument(
134+
"--swift-build-repo-path",
135+
help="path to the SwiftBuild source code",
136+
metavar="PATH")
133137
parser.add_argument(
134138
"--swiftc-path",
135139
help="path to the swift compiler",
@@ -243,7 +247,7 @@ def parse_global_args(args):
243247
args.source_dirs["swift-certificates"] = os.path.join(args.project_root, "..", "swift-certificates")
244248
args.source_dirs["swift-asn1"] = os.path.join(args.project_root, "..", "swift-asn1")
245249
args.source_dirs["swift-syntax"] = os.path.join(args.project_root, "..", "swift-syntax")
246-
args.source_dirs["swift-build"] = os.path.join(args.project_root, "..", "swift-build")
250+
args.source_dirs["swift-build"] = args.swift_build_repo_path or os.path.join(args.project_root, "..", "swift-build")
247251
args.source_root = os.path.join(args.project_root, "Sources")
248252

249253
if platform.system() == 'Darwin':

0 commit comments

Comments
 (0)