// RuleHash calculates a hash for the relevant bits of this rule that affect its output. // Optionally it can include parts of the rule that affect runtime (most obviously test-time). // Note that we have to hash on the declared fields, we obviously can't hash pointers etc. // incrementality_test will warn if new fields are added to the struct but not here. func RuleHash(target *core.BuildTarget, runtime, postBuild bool) []byte { if runtime || (postBuild && target.PostBuildFunction != 0) { return ruleHash(target, runtime) } // Non-post-build hashes get stored on the target itself. if len(target.RuleHash) != 0 { return target.RuleHash } target.RuleHash = ruleHash(target, false) // This is never a runtime hash. return target.RuleHash }