C++: Remove remaining usages of context in compile
A new method was added to ActionConstructionContext in order to get a Tree artifact and the API must now take the grep-includes artifact.
RELNOTES:none
PiperOrigin-RevId: 232634667
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 5b2dbf4..1777564 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -710,13 +710,7 @@
return getAnalysisEnvironment().getDerivedArtifact(rootRelativePath, root);
}
- /**
- * Creates a TreeArtifact under a given root with the given root-relative path.
- *
- * <p>Verifies that it is in the root-relative directory corresponding to the package of the rule,
- * thus ensuring that it doesn't clash with other artifacts generated by other rules using this
- * method.
- */
+ @Override
public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
Preconditions.checkState(rootRelativePath.startsWith(getPackageDirectory()),
"Output artifact '%s' not under package directory '%s' for target '%s'",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
index 08a0887..ff54a8f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -16,6 +16,7 @@
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
import com.google.devtools.build.lib.actions.ArtifactRoot;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -60,6 +61,15 @@
Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
/**
+ * Creates a TreeArtifact under a given root with the given root-relative path.
+ *
+ * <p>Verifies that it is in the root-relative directory corresponding to the package of the rule,
+ * thus ensuring that it doesn't clash with other artifacts generated by other rules using this
+ * method.
+ */
+ SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root);
+
+ /**
* Returns an artifact that can be an output of shared actions. Only use when there is no other
* option.
*
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index c198d13..718be91 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -220,7 +220,6 @@
}
}
- private final RuleContext ruleContext;
private final CppSemantics semantics;
private final BuildConfiguration configuration;
private final CppConfiguration cppConfiguration;
@@ -270,6 +269,7 @@
private final ActionRegistry actionRegistry;
private final ActionConstructionContext actionConstructionContext;
private final Label label;
+ private final Artifact grepIncludes;
/**
* Creates a CcCompilationHelper.
@@ -317,7 +317,6 @@
CcToolchainProvider ccToolchain,
FdoContext fdoContext,
BuildConfiguration configuration) {
- this.ruleContext = Preconditions.checkNotNull(ruleContext);
this.semantics = Preconditions.checkNotNull(semantics);
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
this.sourceCategory = Preconditions.checkNotNull(sourceCatagory);
@@ -336,6 +335,10 @@
actionRegistry = ruleContext;
actionConstructionContext = ruleContext;
label = ruleContext.getLabel();
+ grepIncludes =
+ ruleContext.attributes().has("$grep_includes")
+ ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
+ : null;
}
/**
@@ -1370,7 +1373,8 @@
boolean usePic) {
SpecialArtifact sourceArtifact = (SpecialArtifact) source.getSource();
SpecialArtifact outputFiles =
- CppHelper.getCompileOutputTreeArtifact(ruleContext, sourceArtifact, outputName, usePic);
+ CppHelper.getCompileOutputTreeArtifact(
+ actionConstructionContext, label, sourceArtifact, outputName, usePic);
// TODO(rduan): Dotd file output is not supported yet.
builder.setOutputs(outputFiles, /* dotdFile= */ null);
builder.setVariables(
@@ -1493,7 +1497,8 @@
*/
private CppCompileActionBuilder initializeCompileAction(Artifact sourceArtifact) {
CppCompileActionBuilder builder =
- new CppCompileActionBuilder(ruleContext, ccToolchain, configuration);
+ new CppCompileActionBuilder(
+ actionConstructionContext, grepIncludes, ccToolchain, configuration);
builder.setSourceFile(sourceArtifact);
builder.setCcCompilationContext(ccCompilationContext);
builder.setCoptsFilter(coptsFilter);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index c190a71..cde8d01 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -89,21 +89,22 @@
* rule.
*/
public CppCompileActionBuilder(RuleContext ruleContext, CcToolchainProvider ccToolchain) {
- this(ruleContext, ccToolchain, ruleContext.getConfiguration());
+ this(
+ ruleContext,
+ ruleContext.attributes().has("$grep_includes")
+ ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
+ : null,
+ ccToolchain,
+ ruleContext.getConfiguration());
}
/** Creates a builder from a rule and configuration. */
public CppCompileActionBuilder(
- RuleContext ruleContext,
+ ActionConstructionContext actionConstructionContext,
+ Artifact grepIncludes,
CcToolchainProvider ccToolchain,
BuildConfiguration configuration) {
- this(
- ruleContext.getActionOwner(),
- configuration,
- ccToolchain,
- ruleContext.attributes().has("$grep_includes")
- ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
- : null);
+ this(actionConstructionContext.getActionOwner(), configuration, ccToolchain, grepIncludes);
}
/** Creates a builder from a rule and configuration. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index b79f686..6dcfb52 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -717,11 +717,13 @@
/** Returns the corresponding compiled TreeArtifact given the source TreeArtifact. */
public static SpecialArtifact getCompileOutputTreeArtifact(
- RuleContext ruleContext, Artifact sourceTreeArtifact, String outputName, boolean usePic) {
- PathFragment objectDir = getObjDirectory(ruleContext.getLabel(), usePic);
-
- return ruleContext.getTreeArtifact(
- objectDir.getRelative(outputName), sourceTreeArtifact.getRoot());
+ ActionConstructionContext actionConstructionContext,
+ Label label,
+ Artifact sourceTreeArtifact,
+ String outputName,
+ boolean usePic) {
+ return actionConstructionContext.getTreeArtifact(
+ getObjDirectory(label, usePic).getRelative(outputName), sourceTreeArtifact.getRoot());
}
public static String getArtifactNameForCategory(