Resolve paths passed in the SwiftPM configuration to the project root

Resolves #2148.
This commit is contained in:
Ben Barham
2025-05-12 18:16:57 -07:00
parent 3f1568c68d
commit 385f8ae79f

View File

@@ -203,18 +203,23 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
throw Error.cannotDetermineHostToolchain
}
var absProjectRoot = try AbsolutePath(validating: projectRoot.filePath)
let hostSDK = try SwiftSDK.hostSwiftSDK(AbsolutePath(validating: destinationToolchainBinDir.filePath))
let hostSwiftPMToolchain = try UserToolchain(swiftSDK: hostSDK)
let destinationSDK = try SwiftSDK.deriveTargetSwiftSDK(
hostSwiftSDK: hostSDK,
hostTriple: hostSwiftPMToolchain.targetTriple,
customToolsets: options.swiftPMOrDefault.toolsets?.map { try AbsolutePath(validating: $0) } ?? [],
customToolsets: options.swiftPMOrDefault.toolsets?.map {
try AbsolutePath(validating: $0, relativeTo: absProjectRoot)
} ?? [],
customCompileTriple: options.swiftPMOrDefault.triple.map { try Triple($0) },
swiftSDKSelector: options.swiftPMOrDefault.swiftSDK,
store: SwiftSDKBundleStore(
swiftSDKsDirectory: localFileSystem.getSharedSwiftSDKsDirectory(
explicitDirectory: options.swiftPMOrDefault.swiftSDKsDirectory.map { try AbsolutePath(validating: $0) }
explicitDirectory: options.swiftPMOrDefault.swiftSDKsDirectory.map {
try AbsolutePath(validating: $0, relativeTo: absProjectRoot)
}
),
fileSystem: localFileSystem,
observabilityScope: observabilitySystem.topScope.makeChildScope(description: "SwiftPM Bundle Store"),
@@ -227,20 +232,14 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
let destinationSwiftPMToolchain = try UserToolchain(swiftSDK: destinationSDK)
var location = try Workspace.Location(
forRootPackage: try AbsolutePath(validating: projectRoot.filePath),
forRootPackage: absProjectRoot,
fileSystem: localFileSystem
)
if options.backgroundIndexingOrDefault {
location.scratchDirectory = try AbsolutePath(
validating: projectRoot.appendingPathComponent(".build").appendingPathComponent("index-build").filePath
)
} else if let scratchDirectory = options.swiftPMOrDefault.scratchPath,
let scratchDirectoryPath = try? AbsolutePath(
validating: scratchDirectory,
relativeTo: AbsolutePath(validating: projectRoot.filePath)
)
{
location.scratchDirectory = scratchDirectoryPath
location.scratchDirectory = absProjectRoot.appending(components: ".build", "index-build")
} else if let scratchDirectory = options.swiftPMOrDefault.scratchPath {
location.scratchDirectory = try AbsolutePath(validating: scratchDirectory, relativeTo: absProjectRoot)
}
var configuration = WorkspaceConfiguration.default