Skip to content

Commit 751eb61

Browse files
committed
Add a couple missing SwiftPM options
1 parent f525da5 commit 751eb61

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

Documentation/Configuration File.md

+2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ The structure of the file is currently not guaranteed to be stable. Options may
2020
- `swiftSDKsDirectory: string`: Equivalent to SwiftPM's `--swift-sdks-path` option.
2121
- `swiftSDK: string`: Equivalent to SwiftPM's `--swift-sdk` option.
2222
- `triple: string`: Equivalent to SwiftPM's `--triple` option.
23+
- `traits: string[]`: Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.
2324
- `cCompilerFlags: string[]`: Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.
2425
- `cxxCompilerFlags: string[]`: Extra arguments passed to the compiler for C++ files. Equivalent to SwiftPM's `-Xcxx` option.
2526
- `swiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files. Equivalent to SwiftPM's `-Xswiftc` option.
2627
- `linkerFlags: string[]`: Extra arguments passed to the linker. Equivalent to SwiftPM's `-Xlinker` option.
28+
- `buildToolsSwiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.
2729
- `disableSandbox: boolean`: Disables running subprocesses from SwiftPM in a sandbox. Equivalent to SwiftPM's `--disable-sandbox` option. Useful when running `sourcekit-lsp` in a sandbox because nested sandboxes are not supported.
2830
- `compilationDatabase`: Dictionary with the following keys, defining options for workspaces with a compilation database.
2931
- `searchPaths: string[]`: Additional paths to search for a compilation database, relative to a workspace root.

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

+12-1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
132132
private let swiftPMWorkspace: Workspace
133133

134134
private let pluginConfiguration: PluginConfiguration
135+
private let traitConfiguration: TraitConfiguration
135136

136137
/// A `ObservabilitySystem` from `SwiftPM` that logs.
137138
private let observabilitySystem: ObservabilitySystem
@@ -249,6 +250,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
249250
toolchain: hostSwiftPMToolchain,
250251
isManifestSandboxEnabled: !(options.swiftPMOrDefault.disableSandbox ?? false),
251252
cacheDir: location.sharedManifestsCacheDirectory,
253+
extraManifestFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags,
252254
importRestrictions: configuration.manifestImportRestrictions
253255
)
254256
)
@@ -294,7 +296,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
294296
fileSystem: localFileSystem,
295297
cacheDir: location.pluginWorkingDirectory.appending("cache"),
296298
toolchain: hostSwiftPMToolchain,
297-
extraPluginSwiftCFlags: [],
299+
extraPluginSwiftCFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags ?? [],
298300
enableSandbox: !(options.swiftPMOrDefault.disableSandbox ?? false)
299301
)
300302
self.pluginConfiguration = PluginConfiguration(
@@ -303,6 +305,10 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
303305
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false
304306
)
305307

308+
self.traitConfiguration = TraitConfiguration(
309+
enabledTraits: options.swiftPMOrDefault.traits.flatMap(Set.init)
310+
)
311+
306312
packageLoadingQueue.async {
307313
await orLog("Initial package loading") {
308314
// Schedule an initial generation of the build graph. Once the build graph is loaded, the build system will send
@@ -355,6 +361,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
355361
toolsBuildParameters: toolsBuildParameters,
356362
packageGraph: modulesGraph,
357363
pluginConfiguration: pluginConfiguration,
364+
traitConfiguration: traitConfiguration,
358365
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false,
359366
scratchDirectory: swiftPMWorkspace.location.scratchDirectory.asURL,
360367
fileSystem: localFileSystem,
@@ -635,10 +642,14 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
635642
if let swiftSDK = options.swiftPMOrDefault.swiftSDK {
636643
arguments += ["--swift-sdk", swiftSDK]
637644
}
645+
if let traits = options.swiftPMOrDefault.traits {
646+
arguments += ["--traits", traits.joined(separator: ",")]
647+
}
638648
arguments += options.swiftPMOrDefault.cCompilerFlags?.flatMap { ["-Xcc", $0] } ?? []
639649
arguments += options.swiftPMOrDefault.cxxCompilerFlags?.flatMap { ["-Xcxx", $0] } ?? []
640650
arguments += options.swiftPMOrDefault.swiftCompilerFlags?.flatMap { ["-Xswiftc", $0] } ?? []
641651
arguments += options.swiftPMOrDefault.linkerFlags?.flatMap { ["-Xlinker", $0] } ?? []
652+
arguments += options.swiftPMOrDefault.buildToolsSwiftCompilerFlags?.flatMap { ["-Xbuild-tools-swiftc", $0] } ?? []
642653
switch options.backgroundPreparationModeOrDefault {
643654
case .build: break
644655
case .noLazy: arguments += ["--experimental-prepare-for-indexing", "--experimental-prepare-for-indexing-no-lazy"]

Sources/SKOptions/SourceKitLSPOptions.swift

+13
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
5353
/// Equivalent to SwiftPM's `--triple` option.
5454
public var triple: String?
5555

56+
/// Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.
57+
public var traits: [String]?
58+
5659
/// Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.
5760
public var cCompilerFlags: [String]?
5861

@@ -65,6 +68,10 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
6568
/// Extra arguments passed to the linker. Equivalent to SwiftPM's `-Xlinker` option.
6669
public var linkerFlags: [String]?
6770

71+
/// Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's
72+
/// `-Xbuild-tools-swiftc` option.
73+
public var buildToolsSwiftCompilerFlags: [String]?
74+
6875
/// Disables running subprocesses from SwiftPM in a sandbox. Equivalent to SwiftPM's `--disable-sandbox` option.
6976
/// Useful when running `sourcekit-lsp` in a sandbox because nested sandboxes are not supported.
7077
public var disableSandbox: Bool?
@@ -75,21 +82,25 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
7582
swiftSDKsDirectory: String? = nil,
7683
swiftSDK: String? = nil,
7784
triple: String? = nil,
85+
traits: [String]? = nil,
7886
cCompilerFlags: [String]? = nil,
7987
cxxCompilerFlags: [String]? = nil,
8088
swiftCompilerFlags: [String]? = nil,
8189
linkerFlags: [String]? = nil,
90+
buildToolsSwiftCompilerFlags: [String]? = nil,
8291
disableSandbox: Bool? = nil
8392
) {
8493
self.configuration = configuration
8594
self.scratchPath = scratchPath
8695
self.swiftSDKsDirectory = swiftSDKsDirectory
8796
self.swiftSDK = swiftSDK
8897
self.triple = triple
98+
self.traits = traits
8999
self.cCompilerFlags = cCompilerFlags
90100
self.cxxCompilerFlags = cxxCompilerFlags
91101
self.swiftCompilerFlags = swiftCompilerFlags
92102
self.linkerFlags = linkerFlags
103+
self.buildToolsSwiftCompilerFlags = buildToolsSwiftCompilerFlags
93104
self.disableSandbox = disableSandbox
94105
}
95106

@@ -100,10 +111,12 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
100111
swiftSDKsDirectory: override?.swiftSDKsDirectory ?? base.swiftSDKsDirectory,
101112
swiftSDK: override?.swiftSDK ?? base.swiftSDK,
102113
triple: override?.triple ?? base.triple,
114+
traits: override?.traits ?? base.traits,
103115
cCompilerFlags: override?.cCompilerFlags ?? base.cCompilerFlags,
104116
cxxCompilerFlags: override?.cxxCompilerFlags ?? base.cxxCompilerFlags,
105117
swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags,
106118
linkerFlags: override?.linkerFlags ?? base.linkerFlags,
119+
buildToolsSwiftCompilerFlags: override?.buildToolsSwiftCompilerFlags ?? base.buildToolsSwiftCompilerFlags,
107120
disableSandbox: override?.disableSandbox ?? base.disableSandbox
108121
)
109122
}

config.schema.json

+16
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,14 @@
217217
"description" : "Options for SwiftPM workspaces.",
218218
"markdownDescription" : "Options for SwiftPM workspaces.",
219219
"properties" : {
220+
"buildToolsSwiftCompilerFlags" : {
221+
"description" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
222+
"items" : {
223+
"type" : "string"
224+
},
225+
"markdownDescription" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
226+
"type" : "array"
227+
},
220228
"cCompilerFlags" : {
221229
"description" : "Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.",
222230
"items" : {
@@ -278,6 +286,14 @@
278286
"markdownDescription" : "Equivalent to SwiftPM's `--swift-sdks-path` option.",
279287
"type" : "string"
280288
},
289+
"traits" : {
290+
"description" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
291+
"items" : {
292+
"type" : "string"
293+
},
294+
"markdownDescription" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
295+
"type" : "array"
296+
},
281297
"triple" : {
282298
"description" : "Equivalent to SwiftPM's `--triple` option.",
283299
"markdownDescription" : "Equivalent to SwiftPM's `--triple` option.",

0 commit comments

Comments
 (0)