Skip to content

Commit 9ce308d

Browse files
committed
add --destination option support
1 parent dd0b724 commit 9ce308d

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ let package = Package(
7575
// useful to any Swift package. Similar in spirit to SwiftPM's Basic module.
7676
.target(
7777
name: "SKSupport",
78-
dependencies: ["SPMUtility"]),
78+
dependencies: ["SwiftPM-auto", "SPMUtility"]),
7979
.testTarget(
8080
name: "SKSupportTests",
8181
dependencies: ["SKSupport", "SKTestSupport"]),

Sources/SKCore/BuildSetup.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import Basic
14+
import Workspace
1415
import SPMUtility
1516
import SKSupport
1617

@@ -31,9 +32,13 @@ public struct BuildSetup {
3132
/// Additional build flags
3233
public let flags: BuildFlags
3334

34-
public init(configuration: BuildConfiguration, path: AbsolutePath?, flags: BuildFlags) {
35+
/// Custom compilation destination, if different from host
36+
public let customDestination: Destination?
37+
38+
public init(configuration: BuildConfiguration, path: AbsolutePath?, flags: BuildFlags, customDestination: Destination? = nil) {
3539
self.configuration = configuration
3640
self.path = path
3741
self.flags = flags
42+
self.customDestination = customDestination
3843
}
3944
}

Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,23 @@ public final class SwiftPMWorkspace {
7373
throw Error.cannotDetermineHostToolchain
7474
}
7575

76-
let destination = try Destination.hostDestination(destinationToolchainBinDir)
77-
let toolchain = try UserToolchain(destination: destination)
76+
let hostDestination = try Destination.hostDestination(destinationToolchainBinDir)
77+
let manifestToolchain = try UserToolchain(destination: hostDestination)
78+
let targetDestination = buildSetup.customDestination ?? hostDestination
79+
let targetToolchain = try UserToolchain(destination: targetDestination)
7880

7981
let buildPath: AbsolutePath = buildSetup.path ?? packageRoot.appending(component: ".build")
8082

83+
8184
self.workspace = Workspace(
8285
dataPath: buildPath,
8386
editablesPath: packageRoot.appending(component: "Packages"),
8487
pinsFile: packageRoot.appending(component: "Package.resolved"),
85-
manifestLoader: ManifestLoader(manifestResources: toolchain.manifestResources, cacheDir: buildPath),
88+
manifestLoader: ManifestLoader(manifestResources: manifestToolchain.manifestResources, cacheDir: buildPath),
8689
delegate: BuildSettingProviderWorkspaceDelegate(),
8790
fileSystem: fileSystem,
8891
skipUpdate: true)
8992

90-
let triple = Triple.hostTriple
91-
9293
let swiftPMConfiguration: PackageModel.BuildConfiguration
9394
switch buildSetup.configuration {
9495
case .debug:
@@ -98,9 +99,10 @@ public final class SwiftPMWorkspace {
9899
}
99100

100101
self.buildParameters = BuildParameters(
101-
dataPath: buildPath.appending(component: triple.tripleString),
102+
dataPath: buildPath.appending(component: targetDestination.target.tripleString),
102103
configuration: swiftPMConfiguration,
103-
toolchain: toolchain,
104+
toolchain: targetToolchain,
105+
destinationTriple: targetDestination.target,
104106
flags: buildSetup.flags)
105107

106108
self.packageGraph = PackageGraph(rootPackages: [], requiredDependencies: [])

Sources/sourcekit-lsp/main.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Dispatch
2020
import Basic
2121
import SPMUtility
2222
import Foundation
23+
import Workspace
2324
import sourcekitd // Not needed here, but fixes debugging...
2425

2526
func parseArguments() throws -> BuildSetup {
@@ -28,6 +29,7 @@ func parseArguments() throws -> BuildSetup {
2829
let loggingOption = parser.add(option: "--log-level", kind: LogLevel.self, usage: "Set the logging level (debug|info|warning|error) [default: \(LogLevel.default)]")
2930
let buildConfigurationOption = parser.add(option: "--configuration", shortName: "-c", kind: BuildConfiguration.self, usage: "Build with configuration (debug|release) [default: debug]")
3031
let buildPathOption = parser.add(option: "--build-path", kind: PathArgument.self, usage: "Specify build/cache directory")
32+
let destinationOption = parser.add(option: "--destination", kind: PathArgument.self)
3133
let buildFlagsCc = parser.add(option: "-Xcc", kind: [String].self, strategy: .oneByOne, usage: "Pass flag through to all C compiler invocations")
3234
let buildFlagsCxx = parser.add(option: "-Xcxx", kind: [String].self, strategy: .oneByOne, usage: "Pass flag through to all C++ compiler invocations")
3335
let buildFlagsLinker = parser.add(option: "-Xlinker", kind: [String].self, strategy: .oneByOne, usage: "Pass flag through to all linker invocations")
@@ -41,6 +43,10 @@ func parseArguments() throws -> BuildSetup {
4143
buildFlags.linkerFlags = parsedArguments.get(buildFlagsLinker) ?? []
4244
buildFlags.swiftCompilerFlags = parsedArguments.get(buildFlagsSwift) ?? []
4345

46+
let customDestination = try parsedArguments.get(destinationOption).map {
47+
return try Destination(fromFile: $0.path)
48+
}
49+
4450
if let logLevel = parsedArguments.get(loggingOption) {
4551
Logger.shared.currentLevel = logLevel
4652
} else {
@@ -50,7 +56,8 @@ func parseArguments() throws -> BuildSetup {
5056
return BuildSetup(
5157
configuration: parsedArguments.get(buildConfigurationOption) ?? BuildSetup.default.configuration,
5258
path: parsedArguments.get(buildPathOption)?.path,
53-
flags: buildFlags)
59+
flags: buildFlags,
60+
customDestination: customDestination)
5461
}
5562

5663
let clientConnection = JSONRPCConection(inFD: STDIN_FILENO, outFD: STDOUT_FILENO, closeHandler: {

0 commit comments

Comments
 (0)