Skip to content

Commit

Permalink
Merge pull request #852 from ahoppen/sourcekit-lsp-windows-build
Browse files Browse the repository at this point in the history
Allow building against a single dynamic swift-syntax library 🚥#851
  • Loading branch information
ahoppen authored Oct 14, 2024
2 parents fa5530c + 79cef55 commit b267bee
Showing 1 changed file with 28 additions and 11 deletions.
39 changes: 28 additions & 11 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,21 @@ var targets: [Target] = [
.target(
name: "SwiftFormat",
dependencies: [
.product(name: "Markdown", package: "swift-markdown"),
.product(name: "SwiftSyntax", package: "swift-syntax"),
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
.product(name: "SwiftOperators", package: "swift-syntax"),
.product(name: "SwiftParser", package: "swift-syntax"),
.product(name: "SwiftParserDiagnostics", package: "swift-syntax"),
],
.product(name: "Markdown", package: "swift-markdown")
]
+ swiftSyntaxDependencies([
"SwiftOperators", "SwiftParser", "SwiftParserDiagnostics", "SwiftSyntax", "SwiftSyntaxBuilder",
]),
exclude: ["CMakeLists.txt"]
),
.target(
name: "_SwiftFormatTestSupport",
dependencies: [
"SwiftFormat",
.product(name: "SwiftOperators", package: "swift-syntax"),
"SwiftFormat"
]
+ swiftSyntaxDependencies([
"SwiftOperators", "SwiftParser", "SwiftParserDiagnostics", "SwiftSyntax", "SwiftSyntaxBuilder",
])
),
.plugin(
name: "Format Source Code",
Expand Down Expand Up @@ -98,7 +98,7 @@ var targets: [Target] = [
.product(name: "ArgumentParser", package: "swift-argument-parser"),
.product(name: "SwiftSyntax", package: "swift-syntax"),
.product(name: "SwiftParser", package: "swift-syntax"),
],
] + swiftSyntaxDependencies(["SwiftParser", "SwiftSyntax"]),
exclude: ["CMakeLists.txt"],
linkerSettings: swiftformatLinkSettings
),
Expand All @@ -110,7 +110,7 @@ var targets: [Target] = [
"_SwiftFormatTestSupport",
.product(name: "SwiftSyntax", package: "swift-syntax"),
.product(name: "SwiftParser", package: "swift-syntax"),
]
] + swiftSyntaxDependencies(["SwiftParser", "SwiftSyntax"])
),
.testTarget(
name: "SwiftFormatTests",
Expand Down Expand Up @@ -153,6 +153,14 @@ let package = Package(
targets: targets
)

func swiftSyntaxDependencies(_ names: [String]) -> [Target.Dependency] {
if buildDynamicSwiftSyntaxLibrary {
return [.product(name: "_SwiftSyntaxDynamic", package: "swift-syntax")]
} else {
return names.map { .product(name: $0, package: "swift-syntax") }
}
}

// MARK: - Parse build arguments

func hasEnvironmentVariable(_ name: String) -> Bool {
Expand All @@ -174,6 +182,15 @@ var useLocalDependencies: Bool { hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS"
/// the `swift test` invocation so that all pre-built modules can be found.
var buildOnlyTests: Bool { hasEnvironmentVariable("SWIFTFORMAT_BUILD_ONLY_TESTS") }

/// Whether swift-syntax is being built as a single dynamic library instead of as a separate library per module.
///
/// This means that the swift-syntax symbols don't need to be statically linked, which alles us to stay below the
/// maximum number of exported symbols on Windows, in turn allowing us to build sourcekit-lsp using SwiftPM on Windows
/// and run its tests.
var buildDynamicSwiftSyntaxLibrary: Bool {
hasEnvironmentVariable("SWIFTSYNTAX_BUILD_DYNAMIC_LIBRARY")
}

// MARK: - Dependencies

var dependencies: [Package.Dependency] {
Expand Down

0 comments on commit b267bee

Please sign in to comment.