Skip to content

Commit e7b46ac

Browse files
authored
Pass linker working directory information back in preview info (rdar://147957256) (#350)
1 parent 938d258 commit e7b46ac

File tree

9 files changed

+46
-3
lines changed

9 files changed

+46
-3
lines changed

Sources/SWBBuildService/Messages.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,7 @@ private extension PreviewInfoOutput {
10781078
PreviewInfoTargetDependencyInfo(
10791079
objectFileInputMap: info.objectFileInputMap,
10801080
linkCommandLine: info.linkCommandLine,
1081+
linkerWorkingDirectory: info.linkerWorkingDirectory,
10811082
swiftEnableOpaqueTypeErasure: info.swiftEnableOpaqueTypeErasure,
10821083
swiftUseIntegratedDriver: info.swiftUseIntegratedDriver,
10831084
enableJITPreviews: info.enableJITPreviews,

Sources/SWBBuildService/PreviewInfo.swift

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ package struct PreviewInfoOutput: Sendable {
5151
package struct TargetDependencyInfo: Sendable {
5252
package let objectFileInputMap: [String: Set<String>]
5353
package let linkCommandLine: [String]
54+
package let linkerWorkingDirectory: String?
5455

5556
package let swiftEnableOpaqueTypeErasure: Bool
5657
package let swiftUseIntegratedDriver: Bool
@@ -264,6 +265,7 @@ extension BuildDescription {
264265
let targetInfo = PreviewInfoOutput.TargetDependencyInfo(
265266
objectFileInputMap: swiftInfos,
266267
linkCommandLine: linkInfo?.commandLine ?? [],
268+
linkerWorkingDirectory: linkInfo?.workingDirectory.str,
267269
swiftEnableOpaqueTypeErasure: settings.globalScope.evaluate(BuiltinMacros.SWIFT_ENABLE_OPAQUE_TYPE_ERASURE),
268270
swiftUseIntegratedDriver: settings.globalScope.evaluate(BuiltinMacros.SWIFT_USE_INTEGRATED_DRIVER),
269271
enableJITPreviews: settings.globalScope.evaluate(BuiltinMacros.ENABLE_XOJIT_PREVIEWS),

Sources/SWBCore/SpecImplementations/Tools/LinkerTools.swift

+11-1
Original file line numberDiff line numberDiff line change
@@ -1027,7 +1027,15 @@ public final class LdLinkerSpec : GenericLinkerSpec, SpecIdentifierType, @unchec
10271027
outputPath.str,
10281028
])
10291029

1030-
let output = TaskGeneratePreviewInfoOutput(architecture: previewPayload.architecture, buildVariant: previewPayload.buildVariant, commandLine: commandLine, input: inputPath, output: outputPath, type: .Ld)
1030+
let output = TaskGeneratePreviewInfoOutput(
1031+
architecture: previewPayload.architecture,
1032+
buildVariant: previewPayload.buildVariant,
1033+
commandLine: commandLine,
1034+
workingDirectory: task.workingDirectory,
1035+
input: inputPath,
1036+
output: outputPath,
1037+
type: .Ld
1038+
)
10311039

10321040
return [output]
10331041
}
@@ -1072,6 +1080,7 @@ public final class LdLinkerSpec : GenericLinkerSpec, SpecIdentifierType, @unchec
10721080
architecture: previewPayload.architecture,
10731081
buildVariant: previewPayload.buildVariant,
10741082
commandLine: commandLine,
1083+
workingDirectory: task.workingDirectory,
10751084
input: Path(""),
10761085
output: payload.outputPath,
10771086
type: .Ld
@@ -1640,6 +1649,7 @@ public final class LibtoolLinkerSpec : GenericLinkerSpec, SpecIdentifierType, @u
16401649
architecture: previewPayload.architecture,
16411650
buildVariant: previewPayload.buildVariant,
16421651
commandLine: Array(task.commandLineAsStrings),
1652+
workingDirectory: task.workingDirectory,
16431653
input: Path(""),
16441654
output: Path(""),
16451655
type: .Ld

Sources/SWBCore/SpecImplementations/Tools/SwiftCompiler.swift

+18-2
Original file line numberDiff line numberDiff line change
@@ -3199,7 +3199,15 @@ public final class SwiftCompilerSpec : CompilerSpec, SpecIdentifierType, SwiftDi
31993199
let outputs = task.outputPaths.filter({ $0.fileSuffix == ".o" })
32003200
guard inputs.count == outputs.count else { return [] }
32013201
return zip(inputs, outputs).map { input, output in
3202-
TaskGeneratePreviewInfoOutput(architecture: previewPayload.architecture, buildVariant: previewPayload.buildVariant, commandLine: commandLine, input: input, output: output, type: .Swift)
3202+
TaskGeneratePreviewInfoOutput(
3203+
architecture: previewPayload.architecture,
3204+
buildVariant: previewPayload.buildVariant,
3205+
commandLine: commandLine,
3206+
workingDirectory: task.workingDirectory,
3207+
input: input,
3208+
output: output,
3209+
type: .Swift
3210+
)
32033211
}
32043212
}
32053213

@@ -3478,7 +3486,15 @@ public final class SwiftCompilerSpec : CompilerSpec, SpecIdentifierType, SwiftDi
34783486
}
34793487
}
34803488

3481-
let output = TaskGeneratePreviewInfoOutput(architecture: previewPayload.architecture, buildVariant: previewPayload.buildVariant, commandLine: commandLine, input: inputPath, output: outputPath, type: .Swift)
3489+
let output = TaskGeneratePreviewInfoOutput(
3490+
architecture: previewPayload.architecture,
3491+
buildVariant: previewPayload.buildVariant,
3492+
commandLine: commandLine,
3493+
workingDirectory: task.workingDirectory,
3494+
input: inputPath,
3495+
output: outputPath,
3496+
type: .Swift
3497+
)
34823498

34833499
return [output]
34843500
}

Sources/SWBCore/TaskGeneration.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,8 @@ public struct TaskGeneratePreviewInfoOutput: Sendable {
10781078
public let buildVariant: String
10791079
/// The commandline to run to update the thunk.
10801080
public let commandLine: [String]
1081+
/// Working directory of the task
1082+
public let workingDirectory: Path
10811083
/// Input path of the task.
10821084
public let input: Path
10831085
/// Output path of the task.

Sources/SWBProtocol/MessageSupport.swift

+3
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ public struct PreviewInfoThunkInfo: Codable, Equatable, Sendable {
437437
public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable {
438438
public let objectFileInputMap: [String: Set<String>]
439439
public let linkCommandLine: [String]
440+
public let linkerWorkingDirectory: String?
440441
public let swiftEnableOpaqueTypeErasure: Bool
441442
public let swiftUseIntegratedDriver: Bool
442443
public let enableJITPreviews: Bool
@@ -448,6 +449,7 @@ public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable {
448449
public init(
449450
objectFileInputMap: [String : Set<String>],
450451
linkCommandLine: [String],
452+
linkerWorkingDirectory: String?,
451453
swiftEnableOpaqueTypeErasure: Bool,
452454
swiftUseIntegratedDriver: Bool,
453455
enableJITPreviews: Bool,
@@ -458,6 +460,7 @@ public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable {
458460
) {
459461
self.objectFileInputMap = objectFileInputMap
460462
self.linkCommandLine = linkCommandLine
463+
self.linkerWorkingDirectory = linkerWorkingDirectory
461464
self.swiftEnableOpaqueTypeErasure = swiftEnableOpaqueTypeErasure
462465
self.swiftUseIntegratedDriver = swiftUseIntegratedDriver
463466
self.enableJITPreviews = enableJITPreviews

Sources/SwiftBuild/SWBBuildServiceSession.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1027,6 +1027,7 @@ fileprivate extension SWBPreviewTargetDependencyInfo {
10271027
case let .targetDependencyInfo(targetDependencyInfo):
10281028
self.objectFileInputMap = targetDependencyInfo.objectFileInputMap
10291029
self.linkCommandLine = targetDependencyInfo.linkCommandLine
1030+
self.linkerWorkingDirectory = targetDependencyInfo.linkerWorkingDirectory
10301031
self.swiftEnableOpaqueTypeErasure = targetDependencyInfo.swiftEnableOpaqueTypeErasure
10311032
self.swiftUseIntegratedDriver = targetDependencyInfo.swiftUseIntegratedDriver
10321033
self.enableJITPreviews = targetDependencyInfo.enableJITPreviews

Sources/SwiftBuild/SWBPreviewSupport.swift

+5
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S
6666
/// Full command line for Previews to extract values as needed. This is the link command line of the preview stub dylib.
6767
public let linkCommandLine: [String]
6868

69+
/// Working directory for the linker invocation.
70+
public let linkerWorkingDirectory: String?
71+
6972
// The following build settings help Previews diagnose certain situations where it
7073
// won't succeed or offer help if something goes wrong.
7174

@@ -109,6 +112,7 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S
109112
pifGUID: String,
110113
objectFileInputMap: [String : Set<String>],
111114
linkCommandLine: [String],
115+
linkerWorkingDirectory: String?,
112116
swiftEnableOpaqueTypeErasure: Bool,
113117
swiftUseIntegratedDriver: Bool,
114118
enableJITPreviews: Bool,
@@ -124,6 +128,7 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S
124128
self.pifGUID = pifGUID
125129
self.objectFileInputMap = objectFileInputMap
126130
self.linkCommandLine = linkCommandLine
131+
self.linkerWorkingDirectory = linkerWorkingDirectory
127132
self.swiftEnableOpaqueTypeErasure = swiftEnableOpaqueTypeErasure
128133
self.swiftUseIntegratedDriver = swiftUseIntegratedDriver
129134
self.enableJITPreviews = enableJITPreviews

Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift

+3
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests {
254254
"-o",
255255
"\(tmpDir.str)/Test/build/Debug-iphoneos/App.app/App.debug.dylib"
256256
],
257+
linkerWorkingDirectory: "\(tmpDir.str)/Test",
257258
swiftEnableOpaqueTypeErasure: false,
258259
swiftUseIntegratedDriver: true,
259260
enableJITPreviews: true,
@@ -398,6 +399,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests {
398399
"-o",
399400
"\(tmpDir.str)/Test/build/Debug-iphoneos/libStaticLib.a"
400401
],
402+
linkerWorkingDirectory: "\(tmpDir.str)/Test",
401403
swiftEnableOpaqueTypeErasure: false,
402404
swiftUseIntegratedDriver: true,
403405
enableJITPreviews: true,
@@ -523,6 +525,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests {
523525
"-o",
524526
"\(tmpDir.str)/Test/build/Debug-iphoneos/CApplication.app/CApplication"
525527
],
528+
linkerWorkingDirectory: "\(tmpDir.str)/Test",
526529
swiftEnableOpaqueTypeErasure: false,
527530
swiftUseIntegratedDriver: true,
528531
enableJITPreviews: false,

0 commit comments

Comments
 (0)