aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-07-08 16:15:53 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-08 16:17:17 -0700
commit4e4c77ae96955138006af15664074123d6a4f51d (patch)
treedaf2083fa3c02df668ff35dd21af31580d06db8f /src/main/java/com/google/devtools/build/lib/analysis
parent3ac44db0427b7db46b6c39f7dbfab7b5f31f8c37 (diff)
PiperOrigin-RevId: 203687257
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java48
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java1
2 files changed, 44 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
index 770d16aef7..0582a93a3f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
@@ -50,6 +50,7 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
import java.util.function.Consumer;
+import java.util.function.Function;
import javax.annotation.Nullable;
/** A customizable, serializable class for building memory efficient command lines. */
@@ -617,16 +618,27 @@ public final class CustomCommandLine extends CommandLine {
}
@AutoCodec
- static final class ExpandedTreeArtifactExecPathsArg extends TreeArtifactExpansionArgvFragment {
+ static final class ExpandedTreeArtifactArg extends TreeArtifactExpansionArgvFragment {
private final Artifact treeArtifact;
private static final UUID TREE_UUID = UUID.fromString("13b7626b-c77d-4a30-ad56-ff08c06b1cee");
+ private final Function<Artifact, Iterable<String>> expandFunction;
@AutoCodec.Instantiator
@VisibleForSerialization
- ExpandedTreeArtifactExecPathsArg(Artifact treeArtifact) {
+ ExpandedTreeArtifactArg(Artifact treeArtifact) {
Preconditions.checkArgument(
treeArtifact.isTreeArtifact(), "%s is not a TreeArtifact", treeArtifact);
this.treeArtifact = treeArtifact;
+ this.expandFunction = artifact -> ImmutableList.of(artifact.getExecPathString());
+ }
+
+ @VisibleForSerialization
+ ExpandedTreeArtifactArg(
+ Artifact treeArtifact, Function<Artifact, Iterable<String>> expandFunction) {
+ Preconditions.checkArgument(
+ treeArtifact.isTreeArtifact(), "%s is not a TreeArtifact", treeArtifact);
+ this.treeArtifact = treeArtifact;
+ this.expandFunction = expandFunction;
}
@Override
@@ -635,14 +647,16 @@ public final class CustomCommandLine extends CommandLine {
artifactExpander.expand(treeArtifact, expandedArtifacts);
for (Artifact expandedArtifact : expandedArtifacts) {
- builder.add(expandedArtifact.getExecPathString());
+ for (String commandLine : expandFunction.apply(expandedArtifact)) {
+ builder.add(commandLine);
+ }
}
}
@Override
public String describe() {
return String.format(
- "ExpandedTreeArtifactExecPathsArg{ treeArtifact: %s}", treeArtifact.getExecPathString());
+ "ExpandedTreeArtifactArg{ treeArtifact: %s}", treeArtifact.getExecPathString());
}
@Override
@@ -1040,7 +1054,31 @@ public final class CustomCommandLine extends CommandLine {
*/
public Builder addExpandedTreeArtifactExecPaths(Artifact treeArtifact) {
Preconditions.checkNotNull(treeArtifact);
- arguments.add(new ExpandedTreeArtifactExecPathsArg(treeArtifact));
+ arguments.add(new ExpandedTreeArtifactArg(treeArtifact));
+ return this;
+ }
+
+ public Builder addExpandedTreeArtifactExecPaths(String arg, Artifact treeArtifact) {
+ Preconditions.checkNotNull(arg);
+ Preconditions.checkNotNull(treeArtifact);
+ arguments.add(
+ new ExpandedTreeArtifactArg(
+ treeArtifact, artifact -> ImmutableList.of(arg, artifact.getExecPathString())));
+ return this;
+ }
+
+ /**
+ * Adds the arguments for all {@link TreeFileArtifact}s under
+ * {@code treeArtifact}, one argument per file. Using {@code expandingFunction} to expand each
+ * {@link TreeFileArtifact} to expected argument.
+ *
+ * @param treeArtifact the TreeArtifact containing the {@link TreeFileArtifact}s to add.
+ * @param expandFunction the function to generate the argument for each{@link TreeFileArtifact}.
+ */
+ public Builder addExpandedTreeArtifact(
+ Artifact treeArtifact, Function<Artifact, Iterable<String>> expandFunction) {
+ Preconditions.checkNotNull(treeArtifact);
+ arguments.add(new ExpandedTreeArtifactArg(treeArtifact, expandFunction));
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index e2cbcc89bd..74509858d9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -726,6 +726,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
ParameterFileWriteAction paramFileWriteAction =
new ParameterFileWriteAction(
owner,
+ paramFileInfo.getInputs(),
paramFile,
commandLine,
paramFileInfo.getFileType(),