From 214088f7fccf96426aa122b44f71330b20ecc4ee Mon Sep 17 00:00:00 2001 From: Jonathan Penn Date: Thu, 6 Nov 2025 13:30:54 -0500 Subject: [PATCH] rdar://164182636 Pass back PRODUCT_MODULE_NAME to previews as target dependency info --- Sources/SWBBuildService/Messages.swift | 1 + Sources/SWBBuildService/PreviewInfo.swift | 2 ++ Sources/SWBProtocol/MessageSupport.swift | 3 +++ Sources/SwiftBuild/SWBBuildServiceSession.swift | 1 + Sources/SwiftBuild/SWBPreviewSupport.swift | 4 ++++ Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift | 2 ++ Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift | 3 +++ 7 files changed, 16 insertions(+) diff --git a/Sources/SWBBuildService/Messages.swift b/Sources/SWBBuildService/Messages.swift index 0c6cd516..4cab7fae 100644 --- a/Sources/SWBBuildService/Messages.swift +++ b/Sources/SWBBuildService/Messages.swift @@ -1092,6 +1092,7 @@ private extension PreviewInfoOutput { case let .targetDependencyInfo(info): kind = .targetDependencyInfo( PreviewInfoTargetDependencyInfo( + productModuleName: info.productModuleName, objectFileInputMap: info.objectFileInputMap, linkCommandLine: info.linkCommandLine, linkerWorkingDirectory: info.linkerWorkingDirectory, diff --git a/Sources/SWBBuildService/PreviewInfo.swift b/Sources/SWBBuildService/PreviewInfo.swift index bb35a916..5b9dbf99 100644 --- a/Sources/SWBBuildService/PreviewInfo.swift +++ b/Sources/SWBBuildService/PreviewInfo.swift @@ -50,6 +50,7 @@ package struct PreviewInfoOutput: Sendable { } package struct TargetDependencyInfo: Sendable { + package let productModuleName: String package let objectFileInputMap: [String: Set] package let linkCommandLine: [String] package let linkerWorkingDirectory: String? @@ -265,6 +266,7 @@ extension BuildDescription { case .targetDependencyInfo: let swiftInfos = Dictionary(grouping: relevantPreviewInfos.filter({ $0.type == .Swift }), by: { $0.output.str }).mapValues { Set($0.map { $0.input.str }) } let targetInfo = PreviewInfoOutput.TargetDependencyInfo( + productModuleName: settings.globalScope.evaluate(BuiltinMacros.PRODUCT_MODULE_NAME), objectFileInputMap: swiftInfos, linkCommandLine: linkInfo?.commandLine ?? [], linkerWorkingDirectory: linkInfo?.workingDirectory.str, diff --git a/Sources/SWBProtocol/MessageSupport.swift b/Sources/SWBProtocol/MessageSupport.swift index 81544c7e..65e79bfc 100644 --- a/Sources/SWBProtocol/MessageSupport.swift +++ b/Sources/SWBProtocol/MessageSupport.swift @@ -443,6 +443,7 @@ public struct PreviewInfoThunkInfo: Codable, Equatable, Sendable { } public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable { + public let productModuleName: String public let objectFileInputMap: [String: Set] public let linkCommandLine: [String] public let linkerWorkingDirectory: String? @@ -455,6 +456,7 @@ public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable { public let enableUndefinedBehaviorSanitizer: Bool public init( + productModuleName: String, objectFileInputMap: [String : Set], linkCommandLine: [String], linkerWorkingDirectory: String?, @@ -466,6 +468,7 @@ public struct PreviewInfoTargetDependencyInfo: Codable, Equatable, Sendable { enableThreadSanitizer: Bool, enableUndefinedBehaviorSanitizer: Bool ) { + self.productModuleName = productModuleName self.objectFileInputMap = objectFileInputMap self.linkCommandLine = linkCommandLine self.linkerWorkingDirectory = linkerWorkingDirectory diff --git a/Sources/SwiftBuild/SWBBuildServiceSession.swift b/Sources/SwiftBuild/SWBBuildServiceSession.swift index fcacfc99..b86e3a52 100644 --- a/Sources/SwiftBuild/SWBBuildServiceSession.swift +++ b/Sources/SwiftBuild/SWBBuildServiceSession.swift @@ -990,6 +990,7 @@ fileprivate extension SWBPreviewTargetDependencyInfo { case .thunkInfo: throw StubError.error("Unexpected response type for request") case let .targetDependencyInfo(targetDependencyInfo): + self.productModuleName = targetDependencyInfo.productModuleName self.objectFileInputMap = targetDependencyInfo.objectFileInputMap self.linkCommandLine = targetDependencyInfo.linkCommandLine self.linkerWorkingDirectory = targetDependencyInfo.linkerWorkingDirectory diff --git a/Sources/SwiftBuild/SWBPreviewSupport.swift b/Sources/SwiftBuild/SWBPreviewSupport.swift index eb35ab07..4c1248bb 100644 --- a/Sources/SwiftBuild/SWBPreviewSupport.swift +++ b/Sources/SwiftBuild/SWBPreviewSupport.swift @@ -60,6 +60,8 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S public let pifGUID: String + public let productModuleName: String + /// Mapping of object files to the source file inputs they came from. public let objectFileInputMap: [String: Set] @@ -110,6 +112,7 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S buildVariant: String, architecture: String, pifGUID: String, + productModuleName: String, objectFileInputMap: [String : Set], linkCommandLine: [String], linkerWorkingDirectory: String?, @@ -126,6 +129,7 @@ public struct SWBPreviewTargetDependencyInfo: SWBPreviewInfoContext, Hashable, S self.buildVariant = buildVariant self.architecture = architecture self.pifGUID = pifGUID + self.productModuleName = productModuleName self.objectFileInputMap = objectFileInputMap self.linkCommandLine = linkCommandLine self.linkerWorkingDirectory = linkerWorkingDirectory diff --git a/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift b/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift index 26e1ba13..b95ae152 100644 --- a/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift +++ b/Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift @@ -299,6 +299,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests { #expect(targetPreviewInfo.context.sdkRoot == core.loadSDK(.iOSSimulator).name) #expect(targetPreviewInfo.context.sdkVariant == "iphonesimulator") + #expect(targetPreviewInfo.targetDependencyInfo?.productModuleName == "AppTarget") #expect(targetPreviewInfo.targetDependencyInfo?.objectFileInputMap == [ "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/main.o": Set(["\(srcRoot.str)/Sources/main.swift"]) ]) @@ -603,6 +604,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests { #expect(targetPreviewInfo.context.sdkRoot == core.loadSDK(.iOSSimulator).name) #expect(targetPreviewInfo.context.sdkVariant == "iphonesimulator") + #expect(targetPreviewInfo.targetDependencyInfo?.productModuleName == "AppTarget") #expect(targetPreviewInfo.targetDependencyInfo?.objectFileInputMap == [ "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/main.o": Set(["\(srcRoot.str)/Sources/main.swift"]), "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/File1.o": Set(["\(srcRoot.str)/Sources/File1.swift"]), diff --git a/Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift b/Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift index 39cf1d9b..23c2434d 100644 --- a/Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift +++ b/Tests/SwiftBuildTests/GeneratePreviewInfoTests.swift @@ -206,6 +206,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests { buildVariant: "normal", architecture: activeRunDestination.targetArchitecture, pifGUID: appTarget.guid, + productModuleName: "App", objectFileInputMap: [ "\(tmpDir.str)/Test/build/Test.build/Debug-iphoneos/App.build/Objects-normal/\(activeRunDestination.targetArchitecture)/TestFile4.o": Set(["\(tmpDir.str)/Test/TestFile4.swift"]), "\(tmpDir.str)/Test/build/Test.build/Debug-iphoneos/App.build/Objects-normal/\(activeRunDestination.targetArchitecture)/GeneratedAssetSymbols.o": Set(["\(tmpDir.str)/Test/build/Test.build/Debug-iphoneos/App.build/DerivedSources/GeneratedAssetSymbols.swift"]) @@ -381,6 +382,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests { buildVariant: "normal", architecture: activeRunDestination.targetArchitecture, pifGUID: libTarget.guid, + productModuleName: "StaticLib", objectFileInputMap: [ "\(tmpDir.str)/Test/build/Test.build/Debug-iphoneos/StaticLib.build/Objects-normal/arm64/TestFile4.o": Set(["\(tmpDir.str)/Test/TestFile4.swift"]) ], @@ -505,6 +507,7 @@ fileprivate struct GeneratePreviewInfoTests: CoreBasedTests { buildVariant: "normal", architecture: activeRunDestination.targetArchitecture, pifGUID: target.guid, + productModuleName: "CApplication", objectFileInputMap: [:], linkCommandLine: [ "\(developerDir)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang",