diff options
Diffstat (limited to 'src')
5 files changed, 28 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java index 2a0f751dd2..29f1506fd4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java @@ -56,7 +56,9 @@ public interface ConfiguredTarget extends TransitiveInfoCollection, ClassObject, BuildConfiguration getConfiguration(); default String getConfigurationChecksum() { - return getConfiguration() == null ? null : getConfiguration().checksum(); + return getConfigurationKey() == null + ? null + : getConfigurationKey().getOptionsDiff().getChecksum(); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index 26d6132b4f..51cbfbc261 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -55,7 +55,6 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; -import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.util.RegexFilter; import com.google.devtools.build.lib.vfs.Path; @@ -1360,7 +1359,7 @@ public class BuildConfiguration { globalMakeEnvBuilder.put("GENDIR", getGenfilesDirectory().getExecPath().getPathString()); globalMakeEnv = globalMakeEnvBuilder.build(); - checksum = computeChecksum(buildOptions); + checksum = buildOptions.computeChecksum(); hashCode = computeHashCode(); ImmutableSet.Builder<String> reservedActionMnemonics = ImmutableSet.builder(); @@ -1371,10 +1370,6 @@ public class BuildConfiguration { this.buildEventSupplier = Suppliers.memoize(this::createBuildEvent); } - public static String computeChecksum(BuildOptions buildOptions) { - return Fingerprint.md5Digest(buildOptions.computeCacheKey()); - } - /** * Returns a copy of this configuration only including the given fragments (which the current * configuration is assumed to have). diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java index d84db4ce32..8e7c7675ab 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java @@ -199,6 +199,10 @@ public final class BuildOptions implements Cloneable, Serializable { return keyBuilder.toString(); } + public String computeChecksum() { + return Fingerprint.md5Digest(computeCacheKey()); + } + /** * String representation of build options. */ @@ -417,7 +421,7 @@ public final class BuildOptions implements Cloneable, Serializable { BuildOptions first, BuildOptions second) { OptionsDiff diff = diff(first, second); if (diff.areSame()) { - return OptionsDiffForReconstruction.getEmpty(first.fingerprint); + return OptionsDiffForReconstruction.getEmpty(first.fingerprint, second.computeChecksum()); } HashMap<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions = new HashMap<>(diff.differingOptions.keySet().size()); @@ -445,7 +449,8 @@ public final class BuildOptions implements Cloneable, Serializable { differingOptions, ImmutableSet.copyOf(diff.extraFirstFragments), ImmutableList.copyOf(diff.extraSecondFragments), - first.fingerprint); + first.fingerprint, + second.computeChecksum()); } /** @@ -543,22 +548,25 @@ public final class BuildOptions implements Cloneable, Serializable { private final ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses; private final ImmutableList<FragmentOptions> extraSecondFragments; private final byte[] baseFingerprint; + private final String checksum; @AutoCodec.VisibleForSerialization OptionsDiffForReconstruction( Map<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions, ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses, ImmutableList<FragmentOptions> extraSecondFragments, - byte[] baseFingerprint) { + byte[] baseFingerprint, + String checksum) { this.differingOptions = differingOptions; this.extraFirstFragmentClasses = extraFirstFragmentClasses; this.extraSecondFragments = extraSecondFragments; this.baseFingerprint = baseFingerprint; + this.checksum = checksum; } - private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint) { + private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint, String checksum) { return new OptionsDiffForReconstruction( - ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint); + ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint, checksum); } @Nullable @@ -583,6 +591,10 @@ public final class BuildOptions implements Cloneable, Serializable { return newOptions; } + public String getChecksum() { + return checksum; + } + private boolean isEmpty() { return differingOptions.isEmpty() && extraFirstFragmentClasses.isEmpty() diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java index a0a83e43cb..5d5e8e628f 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java @@ -170,10 +170,11 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback .concat( toOptions .stream() - .map(options -> { - String checksum = BuildConfiguration.computeChecksum(options); - return checksum.equals(hostConfigurationChecksum) ? "HOST" : checksum; - }) + .map( + options -> { + String checksum = options.computeChecksum(); + return checksum.equals(hostConfigurationChecksum) ? "HOST" : checksum; + }) .collect(Collectors.joining(", "))) .concat(")")); if (verbosity == CqueryOptions.Transitions.LITE) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java index 7bc792a62e..b648d100b8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -78,7 +77,6 @@ public class BuildConfigurationValue implements SkyValue { } /** {@link SkyKey} for {@link BuildConfigurationValue}. */ - @VisibleForSerialization public static final class Key implements SkyKey, Serializable { private static final Interner<Key> keyInterner = BlazeInterners.newWeakInterner(); @@ -92,7 +90,7 @@ public class BuildConfigurationValue implements SkyValue { return keyInterner.intern(new Key(fragments, optionsDiff)); } - Key(FragmentClassSet fragments, BuildOptions.OptionsDiffForReconstruction optionsDiff) { + private Key(FragmentClassSet fragments, BuildOptions.OptionsDiffForReconstruction optionsDiff) { this.fragments = fragments; this.optionsDiff = optionsDiff; } @@ -102,7 +100,7 @@ public class BuildConfigurationValue implements SkyValue { return fragments.fragmentClasses(); } - BuildOptions.OptionsDiffForReconstruction getOptionsDiff() { + public BuildOptions.OptionsDiffForReconstruction getOptionsDiff() { return optionsDiff; } |