Skip to content

Commit f1d6de2

Browse files
committed
Expose a low-level BSP interface wrapping SWBBuildServiceSession
SWBBuildServer implements BSP message handling and is intended to back a higher level BSP which manages the project model and generates PIF and a build request (SwiftPM). As part of this change, many of the core BSP types are vendored into the new SWBBuildServerProtocol target from SourceKitLSP with minor modifications.
1 parent bc2e7d9 commit f1d6de2

File tree

8 files changed

+1074
-4
lines changed

8 files changed

+1074
-4
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ add_compile_definitions(USE_STATIC_PLUGIN_INITIALIZATION)
8181
find_package(ArgumentParser)
8282
find_package(LLBuild)
8383
find_package(SwiftDriver)
84+
find_package(SwiftToolsProtocols)
8485
find_package(SwiftSystem)
8586
find_package(TSC)
8687
# NOTE: these two are required for LLBuild dependencies

Package.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,17 @@ let package = Package(
106106
// Libraries
107107
.target(
108108
name: "SwiftBuild",
109-
dependencies: ["SWBCSupport", "SWBCore", "SWBProtocol", "SWBUtil", "SWBProjectModel"],
109+
dependencies: [
110+
"SWBCSupport",
111+
"SWBCore",
112+
"SWBProtocol",
113+
"SWBUtil",
114+
"SWBProjectModel",
115+
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
116+
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
117+
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols")
118+
119+
],
110120
exclude: ["CMakeLists.txt"],
111121
swiftSettings: swiftSettings(languageMode: .v5)),
112122
.target(
@@ -460,6 +470,7 @@ if useLocalDependencies {
460470
.package(path: "../swift-driver"),
461471
.package(path: "../swift-system"),
462472
.package(path: "../swift-argument-parser"),
473+
.package(path: "../swift-tools-protocols"),
463474
]
464475
if !useLLBuildFramework {
465476
package.dependencies += [.package(path: "../llbuild"),]
@@ -469,6 +480,7 @@ if useLocalDependencies {
469480
.package(url: "https://github.com/swiftlang/swift-driver.git", branch: "main"),
470481
.package(url: "https://github.com/apple/swift-system.git", .upToNextMajor(from: "1.5.0")),
471482
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.3"),
483+
.package(url: "https://github.com/swiftlang/swift-tools-protocols.git", .upToNextMinor(from: "0.0.2")),
472484
]
473485
if !useLLBuildFramework {
474486
package.dependencies += [.package(url: "https://github.com/swiftlang/swift-llbuild.git", branch: "main"),]

Plugins/cmake-smoke-test/cmake-smoke-test.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ struct CMakeSmokeTest: CommandPlugin {
5858
let swiftDriverURL = try findDependency("swift-driver", pluginContext: context)
5959
let swiftDriverBuildURL = context.pluginWorkDirectoryURL.appending(component: "swift-driver")
6060

61-
for url in [swiftToolsSupportCoreBuildURL, swiftSystemBuildURL, llbuildBuildURL, swiftArgumentParserBuildURL, swiftDriverBuildURL, swiftBuildBuildURL] {
61+
let swiftToolsProtocolsURL = try findDependency("swift-tools-protocols", pluginContext: context)
62+
let swiftToolsProtocolsBuildURL = context.pluginWorkDirectoryURL.appending(component: "swift-tools-protocols")
63+
64+
for url in [swiftToolsSupportCoreBuildURL, swiftSystemBuildURL, llbuildBuildURL, swiftArgumentParserBuildURL, swiftDriverBuildURL, swiftToolsProtocolsBuildURL, swiftBuildBuildURL] {
6265
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true)
6366
}
6467

@@ -75,7 +78,8 @@ struct CMakeSmokeTest: CommandPlugin {
7578
"-DLLBuild_DIR=\(llbuildBuildURL.appending(components: "cmake", "modules").filePath)",
7679
"-DTSC_DIR=\(swiftToolsSupportCoreBuildURL.appending(components: "cmake", "modules").filePath)",
7780
"-DSwiftDriver_DIR=\(swiftDriverBuildURL.appending(components: "cmake", "modules").filePath)",
78-
"-DSwiftSystem_DIR=\(swiftSystemBuildURL.appending(components: "cmake", "modules").filePath)"
81+
"-DSwiftSystem_DIR=\(swiftSystemBuildURL.appending(components: "cmake", "modules").filePath)",
82+
"-DSwiftToolsProtocols_DIR=\(swiftToolsProtocolsBuildURL.appending(components: "cmake", "modules").filePath)"
7983
]
8084

8185
let sharedCMakeArgs = [
@@ -112,6 +116,11 @@ struct CMakeSmokeTest: CommandPlugin {
112116
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftDriverBuildURL)
113117
Diagnostics.progress("Built swift-driver")
114118

119+
Diagnostics.progress("Building swift-tools-protocols")
120+
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftToolsProtocolsURL.filePath], workingDirectory: swiftToolsProtocolsBuildURL)
121+
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftToolsProtocolsBuildURL)
122+
Diagnostics.progress("Built swift-tools-protocols")
123+
115124
Diagnostics.progress("Building swift-build in \(swiftBuildBuildURL)")
116125
try await Process.checkNonZeroExit(url: cmakeURL, arguments: sharedCMakeArgs + [swiftBuildURL.filePath], workingDirectory: swiftBuildBuildURL)
117126
try await Process.checkNonZeroExit(url: ninjaURL, arguments: [], workingDirectory: swiftBuildBuildURL)

Sources/SWBCore/Settings/BuiltinMacros.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ public final class BuiltinMacros {
482482
public static let BUILD_DIR = BuiltinMacros.declarePathMacro("BUILD_DIR")
483483
public static let BUILD_LIBRARY_FOR_DISTRIBUTION = BuiltinMacros.declareBooleanMacro("BUILD_LIBRARY_FOR_DISTRIBUTION")
484484
public static let BUILD_PACKAGE_FOR_DISTRIBUTION = BuiltinMacros.declareBooleanMacro("BUILD_PACKAGE_FOR_DISTRIBUTION")
485+
public static let BUILD_SERVER_PROTOCOL_TARGET_TAGS = BuiltinMacros.declareBooleanMacro("BUILD_SERVER_PROTOCOL_TARGET_TAGS")
485486
public static let BUILD_VARIANTS = BuiltinMacros.declareStringListMacro("BUILD_VARIANTS")
486487
public static let BuiltBinaryPath = BuiltinMacros.declareStringMacro("BuiltBinaryPath")
487488
public static let BUNDLE_FORMAT = BuiltinMacros.declareStringMacro("BUNDLE_FORMAT")
@@ -1478,6 +1479,7 @@ public final class BuiltinMacros {
14781479
BUILD_DIR,
14791480
BUILD_LIBRARY_FOR_DISTRIBUTION,
14801481
BUILD_PACKAGE_FOR_DISTRIBUTION,
1482+
BUILD_SERVER_PROTOCOL_TARGET_TAGS,
14811483
BUILD_STYLE,
14821484
BUILD_VARIANTS,
14831485
BUILT_PRODUCTS_DIR,

Sources/SWBUtil/Lock.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,23 @@ extension SWBMutex where Value: ~Copyable, Value == Void {
138138
try withLock { _ throws(E) -> sending Result in return try body() }
139139
}
140140
}
141+
142+
extension SWBMutex where Value: BinaryInteger & Sendable {
143+
public func fetchAndIncrement() -> Value {
144+
withLock { value in
145+
let retVal = value
146+
value += 1
147+
return retVal
148+
}
149+
}
150+
}
151+
152+
extension SWBMutex {
153+
public func takeValue<T>() -> Value where Value == Optional<T> {
154+
withLock { value in
155+
let retVal = value
156+
value = nil
157+
return retVal
158+
}
159+
}
160+
}

Sources/SwiftBuild/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ add_library(SwiftBuild
3636
SWBBuildOperationBacktraceFrame.swift
3737
SWBBuildParameters.swift
3838
SWBBuildRequest.swift
39+
SWBBuildServer.swift
3940
SWBBuildService.swift
4041
SWBBuildServiceConnection.swift
4142
SWBBuildServiceConsole.swift
@@ -70,7 +71,13 @@ target_link_libraries(SwiftBuild PUBLIC
7071
SWBCore
7172
SWBProtocol
7273
SWBUtil
73-
SWBProjectModel)
74+
SWBProjectModel
75+
SwiftToolsProtocols::LSPCAtomics
76+
SwiftToolsProtocols::SKLogging
77+
SwiftToolsProtocols::SwiftExtensions
78+
SwiftToolsProtocols::BuildServerProtocol
79+
SwiftToolsProtocols::LanguageServerProtocol
80+
SwiftToolsProtocols::LanguageServerProtocolTransport)
7481

7582
set_target_properties(SwiftBuild PROPERTIES
7683
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})

0 commit comments

Comments
 (0)