mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2025-12-12 20:35:43 +01:00
CMake was previously doing this itself before 4.0, but seems to be inserting `/usr/bin/*` now. Resolve the `/usr/bin` trampoline ourselves in a similar fashion to swiftly (but with xcrun). Resolves rdar://163462990.
816 lines
26 KiB
Swift
816 lines
26 KiB
Swift
// swift-tools-version: 6.2
|
|
|
|
import Foundation
|
|
import PackageDescription
|
|
|
|
var products: [Product] = [
|
|
.executable(name: "sourcekit-lsp", targets: ["sourcekit-lsp"]),
|
|
.library(name: "_SourceKitLSP", targets: ["SourceKitLSP"]),
|
|
.library(name: "InProcessClient", targets: ["InProcessClient"]),
|
|
.library(name: "SwiftSourceKitPlugin", type: .dynamic, targets: ["SwiftSourceKitPlugin"]),
|
|
.library(name: "SwiftSourceKitClientPlugin", type: .dynamic, targets: ["SwiftSourceKitClientPlugin"]),
|
|
]
|
|
|
|
var targets: [Target] = [
|
|
// Formatting style:
|
|
// - One section for each target and its test target
|
|
// - Sections are sorted alphabetically
|
|
// - Dependencies are listed on separate lines
|
|
// - All array elements are sorted alphabetically
|
|
|
|
// MARK: sourcekit-lsp
|
|
|
|
.executableTarget(
|
|
name: "sourcekit-lsp",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"Diagnose",
|
|
"InProcessClient",
|
|
"LanguageServerProtocolExtensions",
|
|
"SKOptions",
|
|
"SourceKitLSP",
|
|
"ToolchainRegistry",
|
|
.product(name: "ArgumentParser", package: "swift-argument-parser"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
linkerSettings: sourcekitLSPLinkSettings
|
|
),
|
|
|
|
// MARK: BuildServerIntegration
|
|
|
|
.target(
|
|
name: "BuildServerIntegration",
|
|
dependencies: [
|
|
"LanguageServerProtocolExtensions",
|
|
"SKOptions",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
]
|
|
+ swiftPMDependency([
|
|
.product(name: "SwiftPM-auto", package: "swift-package-manager"),
|
|
.product(name: "SwiftPMDataModel-auto", package: "swift-package-manager"),
|
|
]),
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "BuildServerIntegrationTests",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"SKOptions",
|
|
"SKTestSupport",
|
|
"SourceKitLSP",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
|
|
.target(
|
|
name: "CCompletionScoring",
|
|
dependencies: []
|
|
),
|
|
|
|
// MARK: ClangLanguageService
|
|
|
|
.target(
|
|
name: "ClangLanguageService",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"LanguageServerProtocolExtensions",
|
|
"SKOptions",
|
|
"SourceKitLSP",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
] + swiftSyntaxDependencies(["SwiftSyntax"]),
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
// MARK: CompletionScoring
|
|
|
|
.target(
|
|
name: "CompletionScoring",
|
|
dependencies: ["CCompletionScoring"],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.target(
|
|
name: "CompletionScoringForPlugin",
|
|
dependencies: ["CCompletionScoring"],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "CompletionScoringTests",
|
|
dependencies: ["CompletionScoring", "CompletionScoringTestSupport", "SwiftExtensions"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "CompletionScoringPerfTests",
|
|
dependencies: ["CompletionScoring", "CompletionScoringTestSupport", "SwiftExtensions"],
|
|
),
|
|
|
|
// MARK: CompletionScoringTestSupport
|
|
|
|
.target(
|
|
name: "CompletionScoringTestSupport",
|
|
dependencies: [
|
|
"CompletionScoring",
|
|
"SwiftExtensions",
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
resources: [.copy("INPUTS")],
|
|
),
|
|
|
|
// MARK: CSKTestSupport
|
|
|
|
.target(
|
|
name: "CSKTestSupport",
|
|
dependencies: []
|
|
),
|
|
|
|
// MARK: Csourcekitd
|
|
|
|
.target(
|
|
name: "Csourcekitd",
|
|
dependencies: [],
|
|
exclude: ["CMakeLists.txt"]
|
|
),
|
|
|
|
// MARK: Diagnose
|
|
|
|
.target(
|
|
name: "Diagnose",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"InProcessClient",
|
|
"LanguageServerProtocolExtensions",
|
|
"SKOptions",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SourceKitLSP",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "ArgumentParser", package: "swift-argument-parser"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
] + swiftSyntaxDependencies(["SwiftIDEUtils", "SwiftSyntax", "SwiftParser"]),
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "DiagnoseTests",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"Diagnose",
|
|
"SKTestSupport",
|
|
"SourceKitD",
|
|
"ToolchainRegistry",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
],
|
|
),
|
|
|
|
// MARK: DocumentationLanguageService
|
|
|
|
.target(
|
|
name: "DocumentationLanguageService",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"SemanticIndex",
|
|
"SKUtilities",
|
|
"SourceKitLSP",
|
|
"SwiftExtensions",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "IndexStoreDB", package: "indexstore-db"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "Markdown", package: "swift-markdown"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftDocC", package: "swift-docc"),
|
|
.product(name: "SymbolKit", package: "swift-docc-symbolkit"),
|
|
],
|
|
exclude: [],
|
|
),
|
|
|
|
// MARK: InProcessClient
|
|
|
|
.target(
|
|
name: "InProcessClient",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"ClangLanguageService",
|
|
"DocumentationLanguageService",
|
|
"SKOptions",
|
|
"SourceKitLSP",
|
|
"SwiftLanguageService",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
// MARK: LanguageServerProtocolExtensions
|
|
|
|
.target(
|
|
name: "LanguageServerProtocolExtensions",
|
|
dependencies: [
|
|
"SourceKitD",
|
|
"SwiftExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
// MARK: SemanticIndex
|
|
|
|
.target(
|
|
name: "SemanticIndex",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"LanguageServerProtocolExtensions",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "IndexStoreDB", package: "indexstore-db"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SemanticIndexTests",
|
|
dependencies: [
|
|
"SemanticIndex",
|
|
"SKTestSupport",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
|
|
// MARK: SKOptions
|
|
|
|
.target(
|
|
name: "SKOptions",
|
|
dependencies: [
|
|
"LanguageServerProtocolExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
// MARK: SKUtilities
|
|
|
|
.target(
|
|
name: "SKUtilities",
|
|
dependencies: [
|
|
"SwiftExtensions",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.target(
|
|
name: "SKUtilitiesForPlugin",
|
|
dependencies: [
|
|
"SwiftExtensionsForPlugin",
|
|
.product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "SKLogging=_SKLoggingForPlugin",
|
|
"-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin",
|
|
"-module-alias", "ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin",
|
|
])
|
|
]
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SKUtilitiesTests",
|
|
dependencies: [
|
|
"SKUtilities",
|
|
"SKTestSupport",
|
|
],
|
|
),
|
|
|
|
// MARK: SKTestSupport
|
|
|
|
.target(
|
|
name: "SKTestSupport",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"CSKTestSupport",
|
|
"Csourcekitd",
|
|
"InProcessClient",
|
|
"LanguageServerProtocolExtensions",
|
|
"SKOptions",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SourceKitLSP",
|
|
"SwiftExtensions",
|
|
"SwiftLanguageService",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
resources: [.copy("INPUTS")],
|
|
),
|
|
|
|
// MARK: SourceKitD
|
|
|
|
.target(
|
|
name: "SourceKitD",
|
|
dependencies: [
|
|
"Csourcekitd",
|
|
"SwiftExtensions",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt", "sourcekitd_uids.swift.gyb"],
|
|
),
|
|
|
|
.target(
|
|
name: "SourceKitDForPlugin",
|
|
dependencies: [
|
|
"Csourcekitd",
|
|
"SwiftExtensionsForPlugin",
|
|
.product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"),
|
|
.product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt", "sourcekitd_uids.swift.gyb"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "SKLogging=_SKLoggingForPlugin",
|
|
"-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin",
|
|
"-module-alias", "ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin",
|
|
])
|
|
]
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SourceKitDTests",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"SourceKitD",
|
|
"SKTestSupport",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
|
|
// MARK: SourceKitLSP
|
|
|
|
.target(
|
|
name: "SourceKitLSP",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"LanguageServerProtocolExtensions",
|
|
"SemanticIndex",
|
|
"SKOptions",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "IndexStoreDB", package: "indexstore-db"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "Markdown", package: "swift-markdown"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
] + swiftSyntaxDependencies(["SwiftSyntax"]),
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SourceKitLSPTests",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"LanguageServerProtocolExtensions",
|
|
"SemanticIndex",
|
|
"SKOptions",
|
|
"SKTestSupport",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SourceKitLSP",
|
|
"SwiftLanguageService",
|
|
"ToolchainRegistry",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "IndexStoreDB", package: "indexstore-db"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
// Depend on `SwiftCompilerPlugin` and `SwiftSyntaxMacros` so the modules are built before running tests and can
|
|
// be used by test cases that test macros (see `SwiftPMTestProject.macroPackageManifest`)
|
|
]
|
|
+ swiftSyntaxDependencies([
|
|
"SwiftIfConfig", "SwiftParser", "SwiftSyntax", "SwiftCompilerPlugin", "SwiftSyntaxMacros",
|
|
]),
|
|
),
|
|
|
|
// MARK: SwiftExtensions
|
|
|
|
.target(
|
|
name: "SwiftExtensions",
|
|
dependencies: [
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols")
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.target(
|
|
name: "SwiftExtensionsForPlugin",
|
|
dependencies: [
|
|
.product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols")
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin",
|
|
])
|
|
]
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SwiftExtensionsTests",
|
|
dependencies: [
|
|
"SKTestSupport",
|
|
"SwiftExtensions",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
|
|
// MARK: SwiftLanguageService
|
|
|
|
.target(
|
|
name: "SwiftLanguageService",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"Csourcekitd",
|
|
"LanguageServerProtocolExtensions",
|
|
"SemanticIndex",
|
|
"SKOptions",
|
|
"SKUtilities",
|
|
"SourceKitD",
|
|
"SourceKitLSP",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
"TSCExtensions",
|
|
.product(name: "BuildServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "Crypto", package: "swift-crypto"),
|
|
.product(name: "IndexStoreDB", package: "indexstore-db"),
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
.product(name: "LanguageServerProtocolTransport", package: "swift-tools-protocols"),
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
]
|
|
+ swiftSyntaxDependencies([
|
|
"SwiftBasicFormat",
|
|
"SwiftDiagnostics",
|
|
"SwiftIDEUtils",
|
|
"SwiftParser",
|
|
"SwiftParserDiagnostics",
|
|
"SwiftRefactor",
|
|
"SwiftSyntax",
|
|
"SwiftSyntaxBuilder",
|
|
]),
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
// MARK: SwiftSourceKitClientPlugin
|
|
|
|
.target(
|
|
name: "SwiftSourceKitClientPlugin",
|
|
dependencies: [
|
|
"Csourcekitd",
|
|
"SourceKitDForPlugin",
|
|
"SwiftExtensionsForPlugin",
|
|
"SwiftSourceKitPluginCommon",
|
|
.product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "SKLogging=_SKLoggingForPlugin",
|
|
"-module-alias", "SourceKitD=SourceKitDForPlugin",
|
|
"-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin",
|
|
])
|
|
],
|
|
linkerSettings: sourcekitLSPLinkSettings
|
|
),
|
|
|
|
// MARK: SwiftSourceKitPluginCommon
|
|
|
|
.target(
|
|
name: "SwiftSourceKitPluginCommon",
|
|
dependencies: [
|
|
"Csourcekitd",
|
|
"SourceKitDForPlugin",
|
|
"SwiftExtensionsForPlugin",
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "SourceKitD=SourceKitDForPlugin",
|
|
"-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin",
|
|
])
|
|
]
|
|
),
|
|
|
|
// MARK: SwiftSourceKitPlugin
|
|
|
|
.target(
|
|
name: "SwiftSourceKitPlugin",
|
|
dependencies: [
|
|
"Csourcekitd",
|
|
"CompletionScoringForPlugin",
|
|
"SKUtilitiesForPlugin",
|
|
"SourceKitDForPlugin",
|
|
"SwiftSourceKitPluginCommon",
|
|
"SwiftExtensionsForPlugin",
|
|
.product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"),
|
|
.product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
swiftSettings: [
|
|
.unsafeFlags([
|
|
"-module-alias", "CompletionScoring=CompletionScoringForPlugin",
|
|
"-module-alias", "SKLogging=_SKLoggingForPlugin",
|
|
"-module-alias", "SKUtilities=SKUtilitiesForPlugin",
|
|
"-module-alias", "SourceKitD=SourceKitDForPlugin",
|
|
"-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin",
|
|
"-module-alias", "ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin",
|
|
])
|
|
],
|
|
linkerSettings: sourcekitLSPLinkSettings
|
|
),
|
|
|
|
.testTarget(
|
|
name: "SwiftSourceKitPluginTests",
|
|
dependencies: [
|
|
"BuildServerIntegration",
|
|
"CompletionScoring",
|
|
"Csourcekitd",
|
|
"SKTestSupport",
|
|
"SourceKitD",
|
|
"SwiftExtensions",
|
|
"ToolchainRegistry",
|
|
.product(name: "LanguageServerProtocol", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
|
|
// MARK: ToolchainRegistry
|
|
|
|
.target(
|
|
name: "ToolchainRegistry",
|
|
dependencies: [
|
|
"SKUtilities",
|
|
"SwiftExtensions",
|
|
"TSCExtensions",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "ToolchainRegistryTests",
|
|
dependencies: [
|
|
"SKTestSupport",
|
|
"ToolchainRegistry",
|
|
],
|
|
),
|
|
|
|
// MARK: TSCExtensions
|
|
|
|
.target(
|
|
name: "TSCExtensions",
|
|
dependencies: [
|
|
"SwiftExtensions",
|
|
.product(name: "SKLogging", package: "swift-tools-protocols"),
|
|
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
exclude: ["CMakeLists.txt"],
|
|
),
|
|
|
|
.testTarget(
|
|
name: "TSCExtensionsTests",
|
|
dependencies: [
|
|
"SKTestSupport",
|
|
"SwiftExtensions",
|
|
"TSCExtensions",
|
|
.product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"),
|
|
],
|
|
),
|
|
]
|
|
|
|
// MARK: - Apply global Swift settings
|
|
|
|
// Apply global Swift settings to targets.
|
|
do {
|
|
var globalSwiftSettings: [SwiftSetting] = [
|
|
// Swift 7 mode upcoming features. These must be compatible with swift-tools-version.
|
|
.enableUpcomingFeature("InternalImportsByDefault"),
|
|
.enableUpcomingFeature("MemberImportVisibility"),
|
|
.enableUpcomingFeature("InferIsolatedConformances"),
|
|
.enableUpcomingFeature("NonisolatedNonsendingByDefault"),
|
|
.enableUpcomingFeature("ExistentialAny"),
|
|
.enableUpcomingFeature("ImmutableWeakCaptures"),
|
|
|
|
// Warning escalation.
|
|
.unsafeFlags(["-Werror", "ExistentialAny"]),
|
|
]
|
|
if noSwiftPMDependency {
|
|
globalSwiftSettings.append(.define("NO_SWIFTPM_DEPENDENCY"))
|
|
}
|
|
|
|
for target in targets where target.type != .plugin {
|
|
if let swiftSettings = target.swiftSettings {
|
|
// Target-specific settings should come last.
|
|
target.swiftSettings = globalSwiftSettings + swiftSettings
|
|
} else {
|
|
target.swiftSettings = globalSwiftSettings
|
|
}
|
|
}
|
|
}
|
|
|
|
if buildOnlyTests {
|
|
products = []
|
|
targets = targets.compactMap { target in
|
|
guard target.isTest || target.name.contains("TestSupport") else {
|
|
return nil
|
|
}
|
|
target.dependencies = target.dependencies.filter { dependency in
|
|
if case .byNameItem(name: let name, _) = dependency, name.contains("TestSupport") {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
return target
|
|
}
|
|
}
|
|
|
|
let package = Package(
|
|
name: "SourceKitLSP",
|
|
platforms: [.macOS(.v14)],
|
|
products: products,
|
|
dependencies: dependencies,
|
|
targets: targets,
|
|
swiftLanguageModes: [.v6]
|
|
)
|
|
|
|
@MainActor
|
|
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") }
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
func swiftPMDependency<T>(_ values: [T]) -> [T] {
|
|
if noSwiftPMDependency {
|
|
return []
|
|
}
|
|
return values
|
|
}
|
|
|
|
// MARK: - Parse build arguments
|
|
|
|
func hasEnvironmentVariable(_ name: String) -> Bool {
|
|
return ProcessInfo.processInfo.environment[name] != nil
|
|
}
|
|
|
|
/// Use the `NonDarwinLogger` even if `os_log` can be imported.
|
|
///
|
|
/// This is useful when running tests using `swift test` because xctest will not display the output from `os_log` on the
|
|
/// command line.
|
|
var forceNonDarwinLogger: Bool { hasEnvironmentVariable("SOURCEKIT_LSP_FORCE_NON_DARWIN_LOGGER") }
|
|
|
|
// When building the toolchain on the CI, don't add the CI's runpath for the
|
|
// final build before installing.
|
|
var installAction: Bool { hasEnvironmentVariable("SOURCEKIT_LSP_CI_INSTALL") }
|
|
|
|
/// Assume that all the package dependencies are checked out next to sourcekit-lsp and use that instead of fetching a
|
|
/// remote dependency.
|
|
var useLocalDependencies: Bool { hasEnvironmentVariable("SWIFTCI_USE_LOCAL_DEPS") }
|
|
|
|
/// 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 allows 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") }
|
|
|
|
/// Build only tests targets and test support modules.
|
|
///
|
|
/// This is used to test swift-format on Windows, where the modules required for the `swift-format` executable are
|
|
/// built using CMake. When using this setting, the caller is responsible for passing the required search paths to
|
|
/// the `swift test` invocation so that all pre-built modules can be found.
|
|
var buildOnlyTests: Bool { hasEnvironmentVariable("SOURCEKIT_LSP_BUILD_ONLY_TESTS") }
|
|
|
|
/// Build SourceKit-LSP without a dependency on SwiftPM, ie. without support for SwiftPM projects.
|
|
var noSwiftPMDependency: Bool { hasEnvironmentVariable("SOURCEKIT_LSP_NO_SWIFTPM_DEPENDENCY") }
|
|
|
|
// MARK: - Dependencies
|
|
|
|
// When building with the swift build-script, use local dependencies whose contents are controlled
|
|
// by the external environment. This allows sourcekit-lsp to take advantage of the automation used
|
|
// for building the swift toolchain, such as `update-checkout`, or cross-repo PR tests.
|
|
|
|
var dependencies: [Package.Dependency] {
|
|
if buildOnlyTests {
|
|
return []
|
|
} else if useLocalDependencies {
|
|
return [
|
|
.package(path: "../indexstore-db"),
|
|
.package(path: "../swift-docc"),
|
|
.package(path: "../swift-docc-symbolkit"),
|
|
.package(path: "../swift-markdown"),
|
|
.package(path: "../swift-tools-protocols"),
|
|
.package(path: "../swift-tools-support-core"),
|
|
.package(path: "../swift-argument-parser"),
|
|
.package(path: "../swift-syntax"),
|
|
.package(path: "../swift-crypto"),
|
|
] + swiftPMDependency([.package(name: "swift-package-manager", path: "../swiftpm")])
|
|
} else {
|
|
let relatedDependenciesBranch = "main"
|
|
|
|
return [
|
|
.package(url: "https://github.com/swiftlang/indexstore-db.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/swiftlang/swift-docc.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/swiftlang/swift-docc-symbolkit.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/swiftlang/swift-markdown.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/swiftlang/swift-tools-protocols.git", exact: "0.0.9"),
|
|
.package(url: "https://github.com/swiftlang/swift-tools-support-core.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.5.1"),
|
|
.package(url: "https://github.com/swiftlang/swift-syntax.git", branch: relatedDependenciesBranch),
|
|
.package(url: "https://github.com/apple/swift-crypto.git", from: "3.0.0"),
|
|
// Not a build dependency. Used so the "Format Source Code" command plugin can be used to format sourcekit-lsp
|
|
.package(url: "https://github.com/swiftlang/swift-format.git", branch: relatedDependenciesBranch),
|
|
]
|
|
+ swiftPMDependency([
|
|
.package(url: "https://github.com/swiftlang/swift-package-manager.git", branch: relatedDependenciesBranch)
|
|
])
|
|
}
|
|
}
|
|
|
|
// MARK: - Compute custom build settings
|
|
|
|
var sourcekitLSPLinkSettings: [LinkerSetting] {
|
|
if installAction {
|
|
return [.unsafeFlags(["-no-toolchain-stdlib-rpath"], .when(platforms: [.linux, .android]))]
|
|
} else {
|
|
return []
|
|
}
|
|
}
|
|
|
|
var lspLoggingSwiftSettings: [SwiftSetting] {
|
|
if forceNonDarwinLogger {
|
|
return [.define("SOURCEKIT_LSP_FORCE_NON_DARWIN_LOGGER")]
|
|
} else {
|
|
return []
|
|
}
|
|
}
|