Skip to content

Add configuration option to disable the sandbox for SwiftPM operations #1605

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Documentation/Configuration File.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ The structure of the file is currently not guaranteed to be stable. Options may
- `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.
- `disableSandbox: bool`: Disables running subprocesses from SwiftPM in a sandbox. 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.
- `fallbackBuildSystem`: Dictionary with the following keys, defining options for files that aren't managed by any build system
Expand Down
12 changes: 11 additions & 1 deletion Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,13 @@ package actor SwiftPMBuildSystem {
fileSystem: fileSystem,
location: location,
configuration: configuration,
customHostToolchain: hostSwiftPMToolchain
customHostToolchain: hostSwiftPMToolchain,
customManifestLoader: ManifestLoader(
toolchain: hostSwiftPMToolchain,
isManifestSandboxEnabled: !(options.swiftPM.disableSandbox ?? false),
cacheDir: location.sharedManifestsCacheDirectory,
importRestrictions: configuration.manifestImportRestrictions
)
)

let buildConfiguration: PackageModel.BuildConfiguration
Expand Down Expand Up @@ -378,6 +384,7 @@ extension SwiftPMBuildSystem {
destinationBuildParameters: destinationBuildParameters,
toolsBuildParameters: toolsBuildParameters,
graph: modulesGraph,
disableSandbox: options.swiftPM.disableSandbox ?? false,
fileSystem: fileSystem,
observabilityScope: observabilitySystem.topScope
)
Expand Down Expand Up @@ -631,6 +638,9 @@ extension SwiftPMBuildSystem: BuildSystemIntegration.BuildSystem {
"--disable-index-store",
"--target", target.targetID,
]
if options.swiftPM.disableSandbox ?? false {
arguments += ["--disable-sandbox"]
}
if let configuration = options.swiftPM.configuration {
arguments += ["-c", configuration.rawValue]
}
Expand Down
10 changes: 8 additions & 2 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, CustomLogStringConvertible
/// Equivalent to SwiftPM's `-Xlinker` option
public var linkerFlags: [String]?

/// Equivalent to SwiftPM's `--disable-sandbox` option
public var disableSandbox: Bool?

public init(
configuration: BuildConfiguration? = nil,
scratchPath: String? = nil,
Expand All @@ -62,7 +65,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
cCompilerFlags: [String]? = nil,
cxxCompilerFlags: [String]? = nil,
swiftCompilerFlags: [String]? = nil,
linkerFlags: [String]? = nil
linkerFlags: [String]? = nil,
disableSandbox: Bool? = nil
) {
self.configuration = configuration
self.scratchPath = scratchPath
Expand All @@ -73,6 +77,7 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
self.cxxCompilerFlags = cxxCompilerFlags
self.swiftCompilerFlags = swiftCompilerFlags
self.linkerFlags = linkerFlags
self.disableSandbox = disableSandbox
}

static func merging(base: SwiftPMOptions, override: SwiftPMOptions?) -> SwiftPMOptions {
Expand All @@ -85,7 +90,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
cCompilerFlags: override?.cCompilerFlags ?? base.cCompilerFlags,
cxxCompilerFlags: override?.cxxCompilerFlags ?? base.cxxCompilerFlags,
swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags,
linkerFlags: override?.linkerFlags ?? base.linkerFlags
linkerFlags: override?.linkerFlags ?? base.linkerFlags,
disableSandbox: override?.disableSandbox ?? base.disableSandbox
)
}

Expand Down