Skip to content

Commit 6b13df5

Browse files
authored
Merge pull request #1605 from ahoppen/disable-sandbox-option
Add configuration option to disable the sandbox for SwiftPM operations
2 parents 77e66bd + 7e2d12a commit 6b13df5

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

Documentation/Configuration File.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ The structure of the file is currently not guaranteed to be stable. Options may
2323
- `cxxCompilerFlags: string[]`: Extra arguments passed to the compiler for C++ files. Equivalent to SwiftPM's `-Xcxx` option.
2424
- `swiftCompilerFlags: string[]`: Extra arguments passed to the compiler for Swift files. Equivalent to SwiftPM's `-Xswiftc` option.
2525
- `linkerFlags: string[]`: Extra arguments passed to the linker. Equivalent to SwiftPM's `-Xlinker` option.
26+
- `disableSandbox: bool`: Disables running subprocesses from SwiftPM in a sandbox. Useful when running `sourcekit-lsp` in a sandbox because nested sandboxes are not supported.
2627
- `compilationDatabase`: Dictionary with the following keys, defining options for workspaces with a compilation database
2728
- `searchPaths: string[]`: Additional paths to search for a compilation database, relative to a workspace root.
2829
- `fallbackBuildSystem`: Dictionary with the following keys, defining options for files that aren't managed by any build system

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,13 @@ package actor SwiftPMBuildSystem {
261261
fileSystem: fileSystem,
262262
location: location,
263263
configuration: configuration,
264-
customHostToolchain: hostSwiftPMToolchain
264+
customHostToolchain: hostSwiftPMToolchain,
265+
customManifestLoader: ManifestLoader(
266+
toolchain: hostSwiftPMToolchain,
267+
isManifestSandboxEnabled: !(options.swiftPM.disableSandbox ?? false),
268+
cacheDir: location.sharedManifestsCacheDirectory,
269+
importRestrictions: configuration.manifestImportRestrictions
270+
)
265271
)
266272

267273
let buildConfiguration: PackageModel.BuildConfiguration
@@ -378,6 +384,7 @@ extension SwiftPMBuildSystem {
378384
destinationBuildParameters: destinationBuildParameters,
379385
toolsBuildParameters: toolsBuildParameters,
380386
graph: modulesGraph,
387+
disableSandbox: options.swiftPM.disableSandbox ?? false,
381388
fileSystem: fileSystem,
382389
observabilityScope: observabilitySystem.topScope
383390
)
@@ -631,6 +638,9 @@ extension SwiftPMBuildSystem: BuildSystemIntegration.BuildSystem {
631638
"--disable-index-store",
632639
"--target", target.targetID,
633640
]
641+
if options.swiftPM.disableSandbox ?? false {
642+
arguments += ["--disable-sandbox"]
643+
}
634644
if let configuration = options.swiftPM.configuration {
635645
arguments += ["-c", configuration.rawValue]
636646
}

Sources/SKOptions/SourceKitLSPOptions.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
5353
/// Equivalent to SwiftPM's `-Xlinker` option
5454
public var linkerFlags: [String]?
5555

56+
/// Equivalent to SwiftPM's `--disable-sandbox` option
57+
public var disableSandbox: Bool?
58+
5659
public init(
5760
configuration: BuildConfiguration? = nil,
5861
scratchPath: String? = nil,
@@ -62,7 +65,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
6265
cCompilerFlags: [String]? = nil,
6366
cxxCompilerFlags: [String]? = nil,
6467
swiftCompilerFlags: [String]? = nil,
65-
linkerFlags: [String]? = nil
68+
linkerFlags: [String]? = nil,
69+
disableSandbox: Bool? = nil
6670
) {
6771
self.configuration = configuration
6872
self.scratchPath = scratchPath
@@ -73,6 +77,7 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
7377
self.cxxCompilerFlags = cxxCompilerFlags
7478
self.swiftCompilerFlags = swiftCompilerFlags
7579
self.linkerFlags = linkerFlags
80+
self.disableSandbox = disableSandbox
7681
}
7782

7883
static func merging(base: SwiftPMOptions, override: SwiftPMOptions?) -> SwiftPMOptions {
@@ -85,7 +90,8 @@ public struct SourceKitLSPOptions: Sendable, Codable, CustomLogStringConvertible
8590
cCompilerFlags: override?.cCompilerFlags ?? base.cCompilerFlags,
8691
cxxCompilerFlags: override?.cxxCompilerFlags ?? base.cxxCompilerFlags,
8792
swiftCompilerFlags: override?.swiftCompilerFlags ?? base.swiftCompilerFlags,
88-
linkerFlags: override?.linkerFlags ?? base.linkerFlags
93+
linkerFlags: override?.linkerFlags ?? base.linkerFlags,
94+
disableSandbox: override?.disableSandbox ?? base.disableSandbox
8995
)
9096
}
9197

0 commit comments

Comments
 (0)