Skip to content

Commit 4a84ad5

Browse files
authored
Fix task signatures for module dependencies (#710)
- `ValidateDependencies` needs to include the context as part of its signature - Swift tasks no longer need to do this since they don't deal in module dependencies directly, only emitting a data file for use by `ValidateDependencies`
1 parent 2f3a47a commit 4a84ad5

File tree

2 files changed

+12
-19
lines changed

2 files changed

+12
-19
lines changed

Sources/SWBCore/SpecImplementations/Tools/SwiftCompiler.swift

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2405,25 +2405,8 @@ public final class SwiftCompilerSpec : CompilerSpec, SpecIdentifierType, SwiftDi
24052405
dependencyData = nil
24062406
}
24072407

2408-
let compilationRequirementAdditionalSignatureData: String
2409-
if let moduleDependenciesContext = cbc.producer.moduleDependenciesContext {
2410-
do {
2411-
let jsonData = try JSONEncoder(outputFormatting: [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]).encode(moduleDependenciesContext)
2412-
guard let signature = String(data: jsonData, encoding: .utf8) else {
2413-
throw StubError.error("non-UTF-8 data")
2414-
}
2415-
compilationRequirementAdditionalSignatureData = additionalSignatureData + "|\(signature)"
2416-
} catch {
2417-
delegate.error("failed to serialize 'MODULE_DEPENDENCIES' context information: \(error)")
2418-
return
2419-
}
2420-
}
2421-
else {
2422-
compilationRequirementAdditionalSignatureData = additionalSignatureData
2423-
}
2424-
24252408
// Compilation Requirements
2426-
delegate.createTask(type: self, dependencyData: dependencyData, payload: payload, ruleInfo: ruleInfo("SwiftDriver Compilation Requirements", targetName), additionalSignatureData: compilationRequirementAdditionalSignatureData, commandLine: ["builtin-Swift-Compilation-Requirements", "--"] + args, environment: environmentBindings, workingDirectory: compilerWorkingDirectory(cbc), inputs: allInputsNodes, outputs: compilationRequirementOutputs, action: delegate.taskActionCreationDelegate.createSwiftCompilationRequirementTaskAction(), execDescription: archSpecificExecutionDescription(cbc.scope.namespace.parseString("Unblock downstream dependents of $PRODUCT_NAME"), cbc, delegate), preparesForIndexing: true, enableSandboxing: enableSandboxing, additionalTaskOrderingOptions: [.compilation, .compilationRequirement, .linkingRequirement, .blockedByTargetHeaders, .compilationForIndexableSourceFile], usesExecutionInputs: true, showInLog: true)
2409+
delegate.createTask(type: self, dependencyData: dependencyData, payload: payload, ruleInfo: ruleInfo("SwiftDriver Compilation Requirements", targetName), additionalSignatureData: additionalSignatureData, commandLine: ["builtin-Swift-Compilation-Requirements", "--"] + args, environment: environmentBindings, workingDirectory: compilerWorkingDirectory(cbc), inputs: allInputsNodes, outputs: compilationRequirementOutputs, action: delegate.taskActionCreationDelegate.createSwiftCompilationRequirementTaskAction(), execDescription: archSpecificExecutionDescription(cbc.scope.namespace.parseString("Unblock downstream dependents of $PRODUCT_NAME"), cbc, delegate), preparesForIndexing: true, enableSandboxing: enableSandboxing, additionalTaskOrderingOptions: [.compilation, .compilationRequirement, .linkingRequirement, .blockedByTargetHeaders, .compilationForIndexableSourceFile], usesExecutionInputs: true, showInLog: true)
24272410

24282411
if case .compile = compilationMode {
24292412
// Unblocking compilation

Sources/SWBCore/SpecImplementations/Tools/ValidateDependencies.swift

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

13+
private import Foundation
1314
public import SWBUtil
1415
import SWBMacro
1516

@@ -39,8 +40,17 @@ public final class ValidateDependenciesSpec: CommandLineToolSpec, SpecImplementa
3940
guard let configuredTarget = cbc.producer.configuredTarget else {
4041
return
4142
}
43+
44+
let jsonData: Data
45+
do {
46+
jsonData = try JSONEncoder(outputFormatting: [.prettyPrinted, .sortedKeys, .withoutEscapingSlashes]).encode(payload)
47+
} catch {
48+
delegate.error("Error serializing \(payload): \(error)")
49+
return
50+
}
51+
let signature = String(decoding: jsonData, as: UTF8.self)
4252
let output = delegate.createVirtualNode("ValidateDependencies \(configuredTarget.guid)")
43-
delegate.createTask(type: self, payload: payload, ruleInfo: ["ValidateDependencies"], commandLine: ["builtin-validate-dependencies"] + dependencyInfos.map { $0.path.str }, environment: EnvironmentBindings(), workingDirectory: cbc.producer.defaultWorkingDirectory, inputs: dependencyInfos + cbc.commandOrderingInputs, outputs: [output], action: delegate.taskActionCreationDelegate.createValidateDependenciesTaskAction(), preparesForIndexing: false, enableSandboxing: false)
53+
delegate.createTask(type: self, payload: payload, ruleInfo: ["ValidateDependencies"], additionalSignatureData: signature, commandLine: ["builtin-validate-dependencies"] + dependencyInfos.map { $0.path.str }, environment: EnvironmentBindings(), workingDirectory: cbc.producer.defaultWorkingDirectory, inputs: dependencyInfos + cbc.commandOrderingInputs, outputs: [output], action: delegate.taskActionCreationDelegate.createValidateDependenciesTaskAction(), preparesForIndexing: false, enableSandboxing: false)
4454
}
4555
}
4656

0 commit comments

Comments
 (0)