Skip to content

Commit

Permalink
Add a couple missing SwiftPM options
Browse files Browse the repository at this point in the history
  • Loading branch information
bnbarham committed Feb 12, 2025
1 parent ec18669 commit 61b34fb
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Documentation/Configuration File.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ The structure of the file is currently not guaranteed to be stable. Options may
- `swiftSDKsDirectory: string`: Equivalent to SwiftPM's `--swift-sdks-path` option.
- `swiftSDK: string`: Equivalent to SwiftPM's `--swift-sdk` option.
- `triple: string`: Equivalent to SwiftPM's `--triple` option.
- `traits: string[]`: Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.
- `cCompilerFlags: string[]`: Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.
- `cxxCompilerFlags: string[]`: Extra arguments passed to the compiler for C++ files. Equivalent to SwiftPM's `-Xcxx` option.
- `swiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files. Equivalent to SwiftPM's `-Xswiftc` option.
- `linkerFlags: string[]`: Extra arguments passed to the linker. Equivalent to SwiftPM's `-Xlinker` option.
- `buildToolsSwiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.
- `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.
- `compilationDatabase`: Dictionary with the following keys, defining options for workspaces with a compilation database.
- `searchPaths: string[]`: Additional paths to search for a compilation database, relative to a workspace root.
Expand Down
13 changes: 12 additions & 1 deletion Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
private let swiftPMWorkspace: Workspace

private let pluginConfiguration: PluginConfiguration
private let traitConfiguration: TraitConfiguration

/// A `ObservabilitySystem` from `SwiftPM` that logs.
private let observabilitySystem: ObservabilitySystem
Expand Down Expand Up @@ -249,6 +250,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
toolchain: hostSwiftPMToolchain,
isManifestSandboxEnabled: !(options.swiftPMOrDefault.disableSandbox ?? false),
cacheDir: location.sharedManifestsCacheDirectory,
extraManifestFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags,
importRestrictions: configuration.manifestImportRestrictions
)
)
Expand Down Expand Up @@ -294,7 +296,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
fileSystem: localFileSystem,
cacheDir: location.pluginWorkingDirectory.appending("cache"),
toolchain: hostSwiftPMToolchain,
extraPluginSwiftCFlags: [],
extraPluginSwiftCFlags: options.swiftPMOrDefault.buildToolsSwiftCompilerFlags ?? [],
enableSandbox: !(options.swiftPMOrDefault.disableSandbox ?? false)
)
self.pluginConfiguration = PluginConfiguration(
Expand All @@ -303,6 +305,10 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false
)

self.traitConfiguration = TraitConfiguration(
enabledTraits: options.swiftPMOrDefault.traits.flatMap(Set.init)
)

packageLoadingQueue.async {
await orLog("Initial package loading") {
// Schedule an initial generation of the build graph. Once the build graph is loaded, the build system will send
Expand Down Expand Up @@ -355,6 +361,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
toolsBuildParameters: toolsBuildParameters,
packageGraph: modulesGraph,
pluginConfiguration: pluginConfiguration,
traitConfiguration: traitConfiguration,
disableSandbox: options.swiftPMOrDefault.disableSandbox ?? false,
scratchDirectory: swiftPMWorkspace.location.scratchDirectory.asURL,
fileSystem: localFileSystem,
Expand Down Expand Up @@ -635,10 +642,14 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
if let swiftSDK = options.swiftPMOrDefault.swiftSDK {
arguments += ["--swift-sdk", swiftSDK]
}
if let traits = options.swiftPMOrDefault.traits {
arguments += ["--traits", traits.joined(separator: ",")]
}
arguments += options.swiftPMOrDefault.cCompilerFlags?.flatMap { ["-Xcc", $0] } ?? []
arguments += options.swiftPMOrDefault.cxxCompilerFlags?.flatMap { ["-Xcxx", $0] } ?? []
arguments += options.swiftPMOrDefault.swiftCompilerFlags?.flatMap { ["-Xswiftc", $0] } ?? []
arguments += options.swiftPMOrDefault.linkerFlags?.flatMap { ["-Xlinker", $0] } ?? []
arguments += options.swiftPMOrDefault.buildToolsSwiftCompilerFlags?.flatMap { ["-Xbuild-tools-swiftc", $0] } ?? []
switch options.backgroundPreparationModeOrDefault {
case .build: break
case .noLazy: arguments += ["--experimental-prepare-for-indexing", "--experimental-prepare-for-indexing-no-lazy"]
Expand Down
13 changes: 13 additions & 0 deletions Sources/SKOptions/SourceKitLSPOptions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
/// Equivalent to SwiftPM's `--triple` option.
public var triple: String?

/// Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.
public var traits: [String]?

/// Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.
public var cCompilerFlags: [String]?

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

/// Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's
/// `-Xbuild-tools-swiftc` option.
public var buildToolsSwiftCompilerFlags: [String]?

/// 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.
public var disableSandbox: Bool?
Expand All @@ -75,21 +82,25 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
swiftSDKsDirectory: String? = nil,
swiftSDK: String? = nil,
triple: String? = nil,
traits: [String]? = nil,
cCompilerFlags: [String]? = nil,
cxxCompilerFlags: [String]? = nil,
swiftCompilerFlags: [String]? = nil,
linkerFlags: [String]? = nil,
buildToolsSwiftCompilerFlags: [String]? = nil,
disableSandbox: Bool? = nil
) {
self.configuration = configuration
self.scratchPath = scratchPath
self.swiftSDKsDirectory = swiftSDKsDirectory
self.swiftSDK = swiftSDK
self.triple = triple
self.traits = traits
self.cCompilerFlags = cCompilerFlags
self.cxxCompilerFlags = cxxCompilerFlags
self.swiftCompilerFlags = swiftCompilerFlags
self.linkerFlags = linkerFlags
self.buildToolsSwiftCompilerFlags = buildToolsSwiftCompilerFlags
self.disableSandbox = disableSandbox
}

Expand All @@ -100,10 +111,12 @@ public struct SourceKitLSPOptions: Sendable, Codable, Equatable {
swiftSDKsDirectory: override?.swiftSDKsDirectory ?? base.swiftSDKsDirectory,
swiftSDK: override?.swiftSDK ?? base.swiftSDK,
triple: override?.triple ?? base.triple,
traits: override?.traits ?? base.traits,
cCompilerFlags: override?.cCompilerFlags ?? base.cCompilerFlags,
cxxCompilerFlags: override?.cxxCompilerFlags ?? base.cxxCompilerFlags,
swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags,
linkerFlags: override?.linkerFlags ?? base.linkerFlags,
buildToolsSwiftCompilerFlags: override?.buildToolsSwiftCompilerFlags ?? base.buildToolsSwiftCompilerFlags,
disableSandbox: override?.disableSandbox ?? base.disableSandbox
)
}
Expand Down
16 changes: 16 additions & 0 deletions config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,14 @@
"description" : "Options for SwiftPM workspaces.",
"markdownDescription" : "Options for SwiftPM workspaces.",
"properties" : {
"buildToolsSwiftCompilerFlags" : {
"description" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
"items" : {
"type" : "string"
},
"markdownDescription" : "Extra arguments passed to the compiler for Swift files or plugins. Equivalent to SwiftPM's `-Xbuild-tools-swiftc` option.",
"type" : "array"
},
"cCompilerFlags" : {
"description" : "Extra arguments passed to the compiler for C files. Equivalent to SwiftPM's `-Xcc` option.",
"items" : {
Expand Down Expand Up @@ -278,6 +286,14 @@
"markdownDescription" : "Equivalent to SwiftPM's `--swift-sdks-path` option.",
"type" : "string"
},
"traits" : {
"description" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
"items" : {
"type" : "string"
},
"markdownDescription" : "Traits to enable for the package. Equivalent to SwiftPM's `--traits` option.",
"type" : "array"
},
"triple" : {
"description" : "Equivalent to SwiftPM's `--triple` option.",
"markdownDescription" : "Equivalent to SwiftPM's `--triple` option.",
Expand Down

0 comments on commit 61b34fb

Please sign in to comment.