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(