aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-03-22 13:37:38 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-22 13:38:49 -0700
commit5d7fa7ba5d93a1fe35353b05882698b0d74d90f7 (patch)
tree3dc1c360c768c18ccdcdbc5607d98216a2a4f77b /src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
parent62af2b4763510033cf824a4c6d1e59e566002361 (diff)
Add a DefaultBuildOptions specifying default build flags that may differ from the provided defaults in Options classes. These are used to create BuildOptionsDiffForReconstruction, which lets us store only the diffs in our BuildConfigurationValue.Keys.
PiperOrigin-RevId: 190117455
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 2df73d1791..a4bb22fce0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAsp
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
import com.google.devtools.build.lib.analysis.ToolchainContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
import com.google.devtools.build.lib.analysis.config.ConfigurationResolver;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
@@ -116,6 +117,7 @@ public final class ConfiguredTargetFunction implements SkyFunction {
private final RuleClassProvider ruleClassProvider;
private final Semaphore cpuBoundSemaphore;
private final Supplier<Boolean> removeActionsAfterEvaluation;
+ private final BuildOptions defaultBuildOptions;
/**
* Indicates whether the set of packages transitively loaded for a given {@link
* ConfiguredTargetValue} will be needed for package root resolution later in the build. If not,
@@ -128,13 +130,15 @@ public final class ConfiguredTargetFunction implements SkyFunction {
RuleClassProvider ruleClassProvider,
Semaphore cpuBoundSemaphore,
Supplier<Boolean> removeActionsAfterEvaluation,
- boolean storeTransitivePackagesForPackageRootResolution) {
+ boolean storeTransitivePackagesForPackageRootResolution,
+ BuildOptions defaultBuildOptions) {
this.buildViewProvider = buildViewProvider;
this.ruleClassProvider = ruleClassProvider;
this.cpuBoundSemaphore = cpuBoundSemaphore;
this.removeActionsAfterEvaluation = Preconditions.checkNotNull(removeActionsAfterEvaluation);
this.storeTransitivePackagesForPackageRootResolution =
storeTransitivePackagesForPackageRootResolution;
+ this.defaultBuildOptions = defaultBuildOptions;
}
@Override
@@ -269,7 +273,8 @@ public final class ConfiguredTargetFunction implements SkyFunction {
ruleClassProvider,
view.getHostConfiguration(configuration),
transitivePackagesForPackageRootResolution,
- transitiveLoadingRootCauses);
+ transitiveLoadingRootCauses,
+ defaultBuildOptions);
if (env.valuesMissing()) {
return null;
}
@@ -380,6 +385,9 @@ public final class ConfiguredTargetFunction implements SkyFunction {
* @param hostConfiguration the host configuration. There's a noticeable performance hit from
* instantiating this on demand for every dependency that wants it, so it's best to compute
* the host configuration as early as possible and pass this reference to all consumers
+ * @param defaultBuildOptions the default build options provided by the server; these are used to
+ * create diffs for {@link BuildConfigurationValue.Key}s to prevent storing the entire
+ * BuildOptions object.
*/
@Nullable
static OrderedSetMultimap<Attribute, ConfiguredTargetAndData> computeDependencies(
@@ -392,7 +400,8 @@ public final class ConfiguredTargetFunction implements SkyFunction {
RuleClassProvider ruleClassProvider,
BuildConfiguration hostConfiguration,
@Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution,
- NestedSetBuilder<Label> transitiveLoadingRootCauses)
+ NestedSetBuilder<Label> transitiveLoadingRootCauses,
+ BuildOptions defaultBuildOptions)
throws DependencyEvaluationException, ConfiguredTargetFunctionException,
AspectCreationException, InterruptedException {
// Create the map from attributes to set of (target, configuration) pairs.
@@ -407,7 +416,8 @@ public final class ConfiguredTargetFunction implements SkyFunction {
toolchainContext == null
? ImmutableSet.of()
: toolchainContext.getResolvedToolchainLabels(),
- transitiveLoadingRootCauses);
+ transitiveLoadingRootCauses,
+ defaultBuildOptions);
} catch (EvalException e) {
// EvalException can only be thrown by computed Skylark attributes in the current rule.
env.getListener().handle(Event.error(e.getLocation(), e.getMessage()));
@@ -423,8 +433,14 @@ public final class ConfiguredTargetFunction implements SkyFunction {
// Trim each dep's configuration so it only includes the fragments needed by its transitive
// closure.
if (ctgValue.getConfiguration() != null) {
- depValueNames = ConfigurationResolver.resolveConfigurations(env, ctgValue, depValueNames,
- hostConfiguration, ruleClassProvider);
+ depValueNames =
+ ConfigurationResolver.resolveConfigurations(
+ env,
+ ctgValue,
+ depValueNames,
+ hostConfiguration,
+ ruleClassProvider,
+ defaultBuildOptions);
// It's important that we don't use "if (env.missingValues()) { return null }" here (or
// in the following lines). See the comments in getDynamicConfigurations' Skyframe call
// for explanation.
@@ -686,7 +702,8 @@ public final class ConfiguredTargetFunction implements SkyFunction {
throws ConfiguredTargetFunctionException, InterruptedException {
StoredEventHandler events = new StoredEventHandler();
BuildConfiguration ownerConfig =
- ConfiguredTargetFactory.getArtifactOwnerConfiguration(env, configuration);
+ ConfiguredTargetFactory.getArtifactOwnerConfiguration(
+ env, configuration, defaultBuildOptions);
if (env.valuesMissing()) {
return null;
}