From 441fd75d0047f8a998d784c557736ab9075db893 Mon Sep 17 00:00:00 2001 From: plf Date: Wed, 6 Feb 2019 01:28:18 -0800 Subject: [PATCH] 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 --- .../build/lib/analysis/RuleContext.java | 8 +------- .../actions/ActionConstructionContext.java | 10 ++++++++++ .../lib/rules/cpp/CcCompilationHelper.java | 13 +++++++++---- .../rules/cpp/CppCompileActionBuilder.java | 19 ++++++++++--------- .../build/lib/rules/cpp/CppHelper.java | 12 +++++++----- 5 files changed, 37 insertions(+), 25 deletions(-) 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 5b2dbf4d967bfa..1777564dce1de7 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 @@ public Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot r return getAnalysisEnvironment().getDerivedArtifact(rootRelativePath, root); } - /** - * Creates a TreeArtifact under a given root with the given root-relative path. - * - *

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 08a08874a7b722..ff54a8fa769043 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; @@ -59,6 +60,15 @@ public interface ActionConstructionContext { */ Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root); + /** + * Creates a TreeArtifact under a given root with the given root-relative path. + * + *

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 c198d1386d0967..718be9195d9eca 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 @@ public CcCompilationContext getCcCompilationContext() { } } - private final RuleContext ruleContext; private final CppSemantics semantics; private final BuildConfiguration configuration; private final CppConfiguration cppConfiguration; @@ -270,6 +269,7 @@ public CcCompilationContext getCcCompilationContext() { private final ActionRegistry actionRegistry; private final ActionConstructionContext actionConstructionContext; private final Label label; + private final Artifact grepIncludes; /** * Creates a CcCompilationHelper. @@ -317,7 +317,6 @@ public CcCompilationHelper( 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 @@ public CcCompilationHelper( actionRegistry = ruleContext; actionConstructionContext = ruleContext; label = ruleContext.getLabel(); + grepIncludes = + ruleContext.attributes().has("$grep_includes") + ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST) + : null; } /** @@ -1370,7 +1373,8 @@ private Artifact createCompileActionTemplate( 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 static String toPathString(Artifact a) { */ 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 c190a713f44c2e..cde8d016daf9ee 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 @@ public class CppCompileActionBuilder { * 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 b79f68690e1303..6dcfb5289d44da 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 @@ static Artifact getCompileOutputArtifact( /** 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(