Skip to content

Commit 8888721

Browse files
committed
Allow building against a single dynamic swift-syntax library
When `SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY` is specified, change swift-syntax dependencies to depend on a single `_SwiftSyntaxDynamic` product instead of separate products for each module. This allows us to build SourceKit-LSP on Windows using SwiftPM without exceeding the maximum symbol limit and thus run SourceKit-LSP tests on Windows. See swiftlang/sourcekit-lsp#1754 and swiftlang/swift-syntax#2879.
1 parent 80b1e17 commit 8888721

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

Package.swift

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,7 @@ let package = Package(
281281
"Basics",
282282
"PackageLoading",
283283
"PackageModel",
284-
.product(name: "SwiftBasicFormat", package: "swift-syntax"),
285-
.product(name: "SwiftDiagnostics", package: "swift-syntax"),
286-
.product(name: "SwiftIDEUtils", package: "swift-syntax"),
287-
.product(name: "SwiftParser", package: "swift-syntax"),
288-
.product(name: "SwiftSyntax", package: "swift-syntax"),
289-
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
290-
],
284+
] + swiftSyntaxDependencies(["SwiftBasicFormat", "SwiftDiagnostics", "SwiftIDEUtils", "SwiftParser", "SwiftSyntax", "SwiftSyntaxBuilder"]),
291285
exclude: ["CMakeLists.txt"],
292286
swiftSettings: [
293287
.unsafeFlags(["-static"]),
@@ -504,7 +498,6 @@ let package = Package(
504498
dependencies: [
505499
.product(name: "ArgumentParser", package: "swift-argument-parser"),
506500
.product(name: "OrderedCollections", package: "swift-collections"),
507-
.product(name: "SwiftIDEUtils", package: "swift-syntax"),
508501
"Basics",
509502
"Build",
510503
"CoreCommands",
@@ -513,7 +506,7 @@ let package = Package(
513506
"SourceControl",
514507
"Workspace",
515508
"XCBuildSupport",
516-
],
509+
] + swiftSyntaxDependencies(["SwiftIDEUtils"]),
517510
exclude: ["CMakeLists.txt", "README.md"],
518511
swiftSettings: [
519512
.unsafeFlags(["-static"]),
@@ -772,8 +765,7 @@ let package = Package(
772765
dependencies: [
773766
"PackageModelSyntax",
774767
"_InternalTestSupport",
775-
.product(name: "SwiftIDEUtils", package: "swift-syntax"),
776-
]
768+
] + swiftSyntaxDependencies(["SwiftIDEUtils"])
777769
),
778770
.testTarget(
779771
name: "PackageGraphTests",
@@ -902,6 +894,23 @@ if ProcessInfo.processInfo.environment["SWIFTCI_DISABLE_SDK_DEPENDENT_TESTS"] ==
902894
}
903895
#endif
904896

897+
/// Whether swift-syntax is being built as a single dynamic library instead of as a separate library per module.
898+
///
899+
/// This means that the swift-syntax symbols don't need to be statically linked, which allows us to stay below the
900+
/// maximum number of exported symbols on Windows, in turn allowing us to build sourcekit-lsp using SwiftPM on Windows
901+
/// and run its tests.
902+
var buildDynamicSwiftSyntaxLibrary: Bool {
903+
ProcessInfo.processInfo.environment["SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY"] != nil
904+
}
905+
906+
func swiftSyntaxDependencies(_ names: [String]) -> [Target.Dependency] {
907+
if buildDynamicSwiftSyntaxLibrary {
908+
return [.product(name: "_SwiftSyntaxDynamic", package: "swift-syntax")]
909+
} else {
910+
return names.map { .product(name: $0, package: "swift-syntax") }
911+
}
912+
}
913+
905914
// Add package dependency on llbuild when not bootstrapping.
906915
//
907916
// When bootstrapping SwiftPM, we can't use llbuild as a package dependency it

0 commit comments

Comments
 (0)