Skip to content

Commit 5ca3c77

Browse files
committed
Add a couple missing SwiftPM options
(cherry picked from commit 751eb61)
1 parent 165b4bd commit 5ca3c77

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

Documentation/Configuration File.md

Lines changed: 2 additions & 0 deletions
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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
154154
private let swiftPMWorkspace: Workspace
155155

156156
private let pluginConfiguration: PluginConfiguration
157+
private let traitConfiguration: TraitConfiguration
157158

158159
/// A `ObservabilitySystem` from `SwiftPM` that logs.
159160
private let observabilitySystem: ObservabilitySystem
@@ -271,6 +272,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
271272
toolchain: hostSwiftPMToolchain,
272273
isManifestSandboxEnabled: !(options.swiftPMOrDefault.disableSandbox ?? false),
273274
cacheDir: location.sharedManifestsCacheDirectory,
275+
extraManifestFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags,
274276
importRestrictions: configuration.manifestImportRestrictions
275277
)
276278
)
@@ -316,7 +318,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
316318
fileSystem: localFileSystem,
317319
cacheDir: location.pluginWorkingDirectory.appending("cache"),
318320
toolchain: hostSwiftPMToolchain,
319-
extraPluginSwiftCFlags: [],
321+
extraPluginSwiftCFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags ?? [],
320322
enableSandbox: !(options.swiftPMOrDefault.disableSandbox ?? false)
321323
)
322324
self.pluginConfiguration = PluginConfiguration(
@@ -325,6 +327,10 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
325327
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false
326328
)
327329

330+
self.traitConfiguration = TraitConfiguration(
331+
enabledTraits: options.swiftPMOrDefault.traits.flatMap(Set.init)
332+
)
333+
328334
packageLoadingQueue.async {
329335
await orLog("Initial package loading") {
330336
// Schedule an initial generation of the build graph. Once the build graph is loaded, the build system will send
@@ -373,6 +379,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
373379
toolsBuildParameters: toolsBuildParameters,
374380
packageGraph: modulesGraph,
375381
pluginConfiguration: pluginConfiguration,
382+
traitConfiguration: traitConfiguration,
376383
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false,
377384
scratchDirectory: swiftPMWorkspace.location.scratchDirectory.asURL,
378385
fileSystem: localFileSystem,
@@ -666,10 +673,14 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
666673
if let swiftSDK = options.swiftPMOrDefault.swiftSDK {
667674
arguments += ["--swift-sdk", swiftSDK]
668675
}
676+
if let traits = options.swiftPMOrDefault.traits {
677+
arguments += ["--traits", traits.joined(separator: ",")]
678+
}
669679
arguments += options.swiftPMOrDefault.cCompilerFlags?.flatMap { ["-Xcc", $0] } ?? []
670680
arguments += options.swiftPMOrDefault.cxxCompilerFlags?.flatMap { ["-Xcxx", $0] } ?? []
671681
arguments += options.swiftPMOrDefault.swiftCompilerFlags?.flatMap { ["-Xswiftc", $0] } ?? []
672682
arguments += options.swiftPMOrDefault.linkerFlags?.flatMap { ["-Xlinker", $0] } ?? []
683+
arguments += options.swiftPMOrDefault.buildToolsSwiftCompilerFlags?.flatMap { ["-Xbuild-tools-swiftc", $0] } ?? []
673684
switch options.backgroundPreparationModeOrDefault {
674685
case .build: break
675686
case .noLazy: arguments += ["--experimental-prepare-for-indexing", "--experimental-prepare-for-indexing-no-lazy"]

Sources/SKOptions/SourceKitLSPOptions.swift

Lines changed: 13 additions & 0 deletions
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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,14 @@
200200
"description" : "Options for SwiftPM workspaces.",
201201
"markdownDescription" : "Options for SwiftPM workspaces.",
202202
"properties" : {
203+
"buildToolsSwiftCompilerFlags" : {
204+
"description" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
205+
"items" : {
206+
"type" : "string"
207+
},
208+
"markdownDescription" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
209+
"type" : "array"
210+
},
203211
"cCompilerFlags" : {
204212
"description" : "Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.",
205213
"items" : {
@@ -261,6 +269,14 @@
261269
"markdownDescription" : "Equivalent to SwiftPM's `--swift-sdks-path` option.",
262270
"type" : "string"
263271
},
272+
"traits" : {
273+
"description" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
274+
"items" : {
275+
"type" : "string"
276+
},
277+
"markdownDescription" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
278+
"type" : "array"
279+
},
264280
"triple" : {
265281
"description" : "Equivalent to SwiftPM's `--triple` option.",
266282
"markdownDescription" : "Equivalent to SwiftPM's `--triple` option.",

0 commit comments

Comments
 (0)