aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/FilesetOutputConfiguredTarget.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java46
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/fileset/FilesetProvider.java5
4 files changed, 61 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index 1d2eb5bf58..f582cb62c8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -43,6 +43,7 @@ import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleVisibility;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.rules.SkylarkRuleConfiguredTargetBuilder;
+import com.google.devtools.build.lib.rules.fileset.FilesetProvider;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.syntax.Label;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -178,7 +179,12 @@ public final class ConfiguredTargetFactory {
TransitiveInfoCollection rule = targetContext.findDirectPrerequisite(
outputFile.getGeneratingRule().getLabel(), config);
if (isFileset) {
- return new FilesetOutputConfiguredTarget(targetContext, outputFile, rule, artifact);
+ return new FilesetOutputConfiguredTarget(
+ targetContext,
+ outputFile,
+ rule,
+ artifact,
+ rule.getProvider(FilesetProvider.class).getTraversals());
} else {
return new OutputFileConfiguredTarget(targetContext, outputFile, rule, artifact);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/FilesetOutputConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/FilesetOutputConfiguredTarget.java
index 860024d52d..993da82fd5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/FilesetOutputConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/FilesetOutputConfiguredTarget.java
@@ -15,7 +15,9 @@
package com.google.devtools.build.lib.analysis;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.FilesetTraversalParams;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.rules.fileset.FilesetProvider;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -33,14 +35,20 @@ public final class FilesetOutputConfiguredTarget extends OutputFileConfiguredTar
implements FilesetProvider {
private final Artifact filesetInputManifest;
private final PathFragment filesetLinkDir;
+ private final ImmutableList<FilesetTraversalParams> filesetTraversals;
- FilesetOutputConfiguredTarget(TargetContext targetContext, OutputFile outputFile,
- TransitiveInfoCollection generatingRule, Artifact outputArtifact) {
+ FilesetOutputConfiguredTarget(
+ TargetContext targetContext,
+ OutputFile outputFile,
+ TransitiveInfoCollection generatingRule,
+ Artifact outputArtifact,
+ ImmutableList<FilesetTraversalParams> traversals) {
super(targetContext, outputFile, generatingRule, outputArtifact);
FilesetProvider provider = generatingRule.getProvider(FilesetProvider.class);
Preconditions.checkArgument(provider != null);
filesetInputManifest = provider.getFilesetInputManifest();
filesetLinkDir = provider.getFilesetLinkDir();
+ filesetTraversals = traversals;
}
@Override
@@ -52,4 +60,9 @@ public final class FilesetOutputConfiguredTarget extends OutputFileConfiguredTar
public PathFragment getFilesetLinkDir() {
return filesetLinkDir;
}
+
+ @Override
+ public ImmutableList<FilesetTraversalParams> getTraversals() {
+ return filesetTraversals;
+ }
}
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 849b7785d2..b5291a1de9 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
@@ -694,18 +694,33 @@ public final class BuildConfiguration implements ClassObject {
+ "subdirectory which has not been traversed.")
public boolean checkFilesetDependenciesRecursively;
- @Option(name = "run_under",
- category = "run",
- defaultValue = "null",
- converter = RunUnderConverter.class,
- help = "Prefix to insert in front of command before running. "
- + "Examples:\n"
- + "\t--run_under=valgrind\n"
- + "\t--run_under=strace\n"
- + "\t--run_under='strace -c'\n"
- + "\t--run_under='valgrind --quiet --num-callers=20'\n"
- + "\t--run_under=//package:target\n"
- + "\t--run_under='//package:target --options'\n")
+ @Option(
+ name = "experimental_skyframe_native_filesets",
+ defaultValue = "false",
+ category = "experimental",
+ help =
+ "If true, Blaze will use the skyframe-native implementation of the Fileset rule."
+ + " This offers improved performance in incremental builds of Filesets as well as"
+ + " correct incremental behavior, but is not yet stable. The default is false,"
+ + " meaning Blaze uses the legacy impelementation of Fileset."
+ )
+ public boolean skyframeNativeFileset;
+
+ @Option(
+ name = "run_under",
+ category = "run",
+ defaultValue = "null",
+ converter = RunUnderConverter.class,
+ help =
+ "Prefix to insert in front of command before running. "
+ + "Examples:\n"
+ + "\t--run_under=valgrind\n"
+ + "\t--run_under=strace\n"
+ + "\t--run_under='strace -c'\n"
+ + "\t--run_under='valgrind --quiet --num-callers=20'\n"
+ + "\t--run_under=//package:target\n"
+ + "\t--run_under='//package:target --options'\n"
+ )
public RunUnder runUnder;
@Option(name = "distinct_host_configuration",
@@ -830,6 +845,9 @@ public final class BuildConfiguration implements ClassObject {
// === Licenses ===
host.checkLicenses = checkLicenses;
+ // === Fileset ===
+ host.skyframeNativeFileset = skyframeNativeFileset;
+
// === Allow runtime_deps to depend on neverlink Java libraries.
host.allowRuntimeDepsOnNeverLink = allowRuntimeDepsOnNeverLink;
@@ -1696,6 +1714,10 @@ public final class BuildConfiguration implements ClassObject {
return options.checkFilesetDependenciesRecursively;
}
+ public boolean getSkyframeNativeFileset() {
+ return options.skyframeNativeFileset;
+ }
+
public List<String> getTestArguments() {
return options.testArguments;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/fileset/FilesetProvider.java b/src/main/java/com/google/devtools/build/lib/rules/fileset/FilesetProvider.java
index 6b70aab267..ec0de4641b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/fileset/FilesetProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/fileset/FilesetProvider.java
@@ -14,7 +14,9 @@
package com.google.devtools.build.lib.rules.fileset;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.FilesetTraversalParams;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -24,4 +26,7 @@ import com.google.devtools.build.lib.vfs.PathFragment;
public interface FilesetProvider extends TransitiveInfoProvider {
Artifact getFilesetInputManifest();
PathFragment getFilesetLinkDir();
+
+ /** Returns a list of the traversals that went into this Fileset.*/
+ ImmutableList<FilesetTraversalParams> getTraversals();
}