aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-10-31 13:54:28 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-10-31 15:04:59 +0000
commit176ff2b4ada5c407c39bf4ea45ef2e64a7c154a6 (patch)
tree466c5bf9937aa50895eb45f5d4b0d67113f93f90 /src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
parentbb922271323b418addba47807b84ef71c195af96 (diff)
ObjcCompileAction provides all headers to sandboxed execution. This allows
headers pruned by .d pruning to be re-added if they are changed. -- MOS_MIGRATED_REVID=137697323
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
index 47c4ff1c6d..9179e74c60 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
@@ -21,13 +21,16 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
+import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactResolver;
import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.Spawn;
import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -59,10 +62,27 @@ import java.util.Map;
*/
public class ObjcCompileAction extends SpawnAction {
+ /**
+ * A spawn that provides all headers to sandboxed execution to allow pruned headers to be
+ * re-introduced into action inputs.
+ */
+ public class ObjcCompileActionSpawn extends ActionSpawn {
+
+ public ObjcCompileActionSpawn(Map<String, String> clientEnv) {
+ super(clientEnv);
+ }
+
+ @Override
+ public Iterable<? extends ActionInput> getInputFiles() {
+ return Iterables.concat(super.getInputFiles(), headers);
+ }
+ }
+
private final DotdFile dotdFile;
private final Artifact sourceFile;
private final NestedSet<Artifact> mandatoryInputs;
private final HeaderDiscovery.DotdPruningMode dotdPruningPlan;
+ private final NestedSet<Artifact> headers;
private static final String GUID = "a00d5bac-a72c-4f0f-99a7-d5fdc6072137";
@@ -83,7 +103,8 @@ public class ObjcCompileAction extends SpawnAction {
DotdFile dotdFile,
Artifact sourceFile,
NestedSet<Artifact> mandatoryInputs,
- HeaderDiscovery.DotdPruningMode dotdPruningPlan) {
+ HeaderDiscovery.DotdPruningMode dotdPruningPlan,
+ NestedSet<Artifact> headers) {
super(
owner,
tools,
@@ -104,6 +125,7 @@ public class ObjcCompileAction extends SpawnAction {
this.sourceFile = sourceFile;
this.mandatoryInputs = mandatoryInputs;
this.dotdPruningPlan = dotdPruningPlan;
+ this.headers = headers;
}
/** Returns the DotdPruningPlan for this compile */
@@ -113,14 +135,18 @@ public class ObjcCompileAction extends SpawnAction {
}
@Override
+ public final Spawn getSpawn(Map<String, String> clientEnv) {
+ return new ObjcCompileActionSpawn(clientEnv);
+ }
+
+ @Override
public boolean discoversInputs() {
return true;
}
@Override
public Iterable<Artifact> discoverInputs(ActionExecutionContext actionExecutionContext) {
- // We do not use include scanning for objc
- return null;
+ return headers;
}
@Override
@@ -225,6 +251,7 @@ public class ObjcCompileAction extends SpawnAction {
private Artifact sourceFile;
private final NestedSetBuilder<Artifact> mandatoryInputs = new NestedSetBuilder<>(STABLE_ORDER);
private HeaderDiscovery.DotdPruningMode dotdPruningPlan;
+ private NestedSet<Artifact> headers;
/**
* Creates a new compile action builder with apple environment variables set that are typically
@@ -293,6 +320,12 @@ public class ObjcCompileAction extends SpawnAction {
return this;
}
+ /** Sets the set of all possible headers that could be required by this compile action. */
+ public Builder setHeaders(NestedSet<Artifact> headers) {
+ this.headers = Preconditions.checkNotNull(headers);
+ return this;
+ }
+
@Override
protected SpawnAction createSpawnAction(
ActionOwner owner,
@@ -324,7 +357,8 @@ public class ObjcCompileAction extends SpawnAction {
dotdFile,
sourceFile,
mandatoryInputs.build(),
- dotdPruningPlan);
+ dotdPruningPlan,
+ headers);
}
}
}