diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
6 files changed, 54 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index deaddcbfa1..cd94353556 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -81,6 +81,7 @@ import com.google.devtools.build.lib.pkgcache.PackageManager.PackageManagerStati import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey; import com.google.devtools.build.lib.skyframe.AspectValue.AspectValueKey; +import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey; import com.google.devtools.build.lib.skyframe.CoverageReportValue; @@ -613,7 +614,10 @@ public class BuildView { } Set<ConfiguredTarget> targetsToSkip = - new TopLevelConstraintSemantics(skyframeExecutor.getPackageManager(), eventHandler) + new TopLevelConstraintSemantics( + skyframeExecutor.getPackageManager(), + input -> skyframeExecutor.getConfiguration(eventHandler, input), + eventHandler) .checkTargetEnvironmentRestrictions(skyframeAnalysisResult.getConfiguredTargets()); AnalysisResult result = @@ -975,7 +979,7 @@ public class BuildView { throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { return getConfiguredTargetAndDataDirectPrerequisitesForTesting( - eventHandler, ct, ct.getConfiguration(), configurations); + eventHandler, ct, ct.getConfigurationKey(), configurations); } @VisibleForTesting @@ -987,14 +991,17 @@ public class BuildView { throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { return getConfiguredTargetAndDataDirectPrerequisitesForTesting( - eventHandler, ct.getConfiguredTarget(), ct.getConfiguration(), configurations); + eventHandler, + ct.getConfiguredTarget(), + ct.getConfiguredTarget().getConfigurationKey(), + configurations); } private Collection<ConfiguredTargetAndData> getConfiguredTargetAndDataDirectPrerequisitesForTesting( ExtendedEventHandler eventHandler, ConfiguredTarget ct, - BuildConfiguration configuration, + BuildConfigurationValue.Key configuration, BuildConfigurationCollection configurations) throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { @@ -1066,7 +1073,7 @@ public class BuildView { Iterable<BuildOptions> buildOptions, BuildOptions defaultBuildOptions) { Preconditions.checkArgument( - ct.getConfiguration().fragmentClasses().equals(fragments), + fragments.fragmentClasses().equals(ct.getConfigurationKey().getFragments()), "Mismatch: %s %s", ct, fragments); @@ -1085,7 +1092,9 @@ public class BuildView { } DependencyResolver dependencyResolver = new SilentDependencyResolver(); - TargetAndConfiguration ctgNode = new TargetAndConfiguration(target, ct.getConfiguration()); + TargetAndConfiguration ctgNode = + new TargetAndConfiguration( + target, skyframeExecutor.getConfiguration(eventHandler, ct.getConfigurationKey())); return dependencyResolver.dependentNodeMap( ctgNode, configurations.getHostConfiguration(), @@ -1135,7 +1144,7 @@ public class BuildView { ImmutableMultimap<Dependency, ConfiguredTargetAndData> cts = skyframeExecutor.getConfiguredTargetMapForTesting( - eventHandler, target.getConfiguration(), ImmutableSet.copyOf(depNodeNames.values())); + eventHandler, target.getConfigurationKey(), ImmutableSet.copyOf(depNodeNames.values())); OrderedSetMultimap<Attribute, ConfiguredTargetAndData> result = OrderedSetMultimap.create(); for (Map.Entry<Attribute, Dependency> entry : depNodeNames.entries()) { 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 b44dfd0edd..c7c0866c32 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 @@ -55,6 +55,10 @@ public interface ConfiguredTarget extends TransitiveInfoCollection, ClassObject, @Nullable BuildConfiguration getConfiguration(); + default String getConfigurationChecksum() { + return getConfiguration().checksum(); + } + /** * Returns keys for a legacy Skylark provider. * diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java index 0727e22056..a2e37345e4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java @@ -16,11 +16,14 @@ package com.google.devtools.build.lib.analysis; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget; +import com.google.devtools.build.lib.analysis.configuredtargets.PackageGroupConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.RequiredProviders; +import com.google.devtools.build.lib.skyframe.BuildConfigurationValue; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -94,13 +97,25 @@ public interface TransitiveInfoCollection extends SkylarkIndexable, SkylarkProvi */ Label getLabel(); + /** Deprecated! Use {@link #getConfigurationKey} instead. */ + @Deprecated + @Nullable + BuildConfiguration getConfiguration(); + /** - * <p>Returns the {@link BuildConfiguration} for which this transitive info collection is defined. - * Configuration is defined for all configured targets with exception of {@link - * InputFileConfiguredTarget} and {@link PackageGroupConfiguredTarget} for which it is always - * <b>null</b>.</p> + * Returns the {@link BuildConfigurationValue.Key} naming the {@link BuildConfiguration} for which + * this transitive info collection is defined. Configuration is defined for all configured targets + * with exception of {@link InputFileConfiguredTarget} and {@link PackageGroupConfiguredTarget} + * for which it is always <b>null</b>. */ - @Nullable BuildConfiguration getConfiguration(); + @Nullable + default BuildConfigurationValue.Key getConfigurationKey() { + BuildConfiguration configuration = getConfiguration(); + return configuration == null + ? null + : BuildConfigurationValue.key( + configuration.fragmentClasses(), configuration.getBuildOptionsDiff()); + } /** * Checks whether this {@link TransitiveInfoCollection} satisfies given {@link RequiredProviders}. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java index 825ba5a57a..9bd4119347 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java @@ -89,7 +89,7 @@ public abstract class AbstractConfiguredTarget @Override public String toString() { - return "ConfiguredTarget(" + getLabel() + ", " + getConfiguration() + ")"; + return "ConfiguredTarget(" + getLabel() + ", " + getConfigurationChecksum() + ")"; } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java index 42397c0c26..0cae3d3573 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/InputFileConfiguredTarget.java @@ -54,7 +54,7 @@ public final class InputFileConfiguredTarget extends FileConfiguredTarget implem public InputFileConfiguredTarget( TargetContext targetContext, InputFile inputFile, Artifact artifact) { this(inputFile.getLabel(), targetContext.getVisibility(), artifact, makeLicenses(inputFile)); - Preconditions.checkArgument(getConfiguration() == null, getLabel()); + Preconditions.checkArgument(getConfigurationKey() == null, getLabel()); Preconditions.checkArgument(targetContext.getTarget() == inputFile, getLabel()); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java index 4e1f099931..130d4ef453 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java @@ -34,10 +34,12 @@ import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.pkgcache.PackageManager; +import com.google.devtools.build.lib.skyframe.BuildConfigurationValue.Key; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -51,17 +53,21 @@ import javax.annotation.Nullable; */ public class TopLevelConstraintSemantics { private final PackageManager packageManager; + private final Function<Key, BuildConfiguration> configurationProvider; private final ExtendedEventHandler eventHandler; /** * Constructor with helper classes for loading targets. * - * @param packageManager object for retrieving loaded targets - * @param eventHandler the build's event handler - */ - public TopLevelConstraintSemantics(PackageManager packageManager, + * @param packageManager object for retrieving loaded targets + * @param eventHandler the build's event handler + */ + public TopLevelConstraintSemantics( + PackageManager packageManager, + Function<Key, BuildConfiguration> configurationProvider, ExtendedEventHandler eventHandler) { this.packageManager = packageManager; + this.configurationProvider = configurationProvider; this.eventHandler = eventHandler; } @@ -84,7 +90,7 @@ public class TopLevelConstraintSemantics { * environment declared through {@link BuildConfiguration.Options#targetEnvironments} */ public Set<ConfiguredTarget> checkTargetEnvironmentRestrictions( - Iterable<ConfiguredTarget> topLevelTargets) + ImmutableList<ConfiguredTarget> topLevelTargets) throws ViewCreationFailedException, InterruptedException { ImmutableSet.Builder<ConfiguredTarget> badTargets = ImmutableSet.builder(); // Maps targets that are missing *explicitly* required environments to the set of environments @@ -93,7 +99,7 @@ public class TopLevelConstraintSemantics { // continues while skipping them. Multimap<ConfiguredTarget, Label> exceptionInducingTargets = ArrayListMultimap.create(); for (ConfiguredTarget topLevelTarget : topLevelTargets) { - BuildConfiguration config = topLevelTarget.getConfiguration(); + BuildConfiguration config = configurationProvider.apply(topLevelTarget.getConfigurationKey()); Target target = null; try { target = packageManager.getTarget(eventHandler, topLevelTarget.getLabel()); |