diff options
author | shahan <shahan@google.com> | 2018-08-12 11:35:14 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-12 11:36:55 -0700 |
commit | c0d4bb06d4227be27d5b4d4b04a4d5bb9ae3215d (patch) | |
tree | 1504d37452650f2d35dd25bd03e39ff6ca9516d5 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 5276be608c43fa37706903c1d9301403f814985e (diff) |
ActionAnalysisMetadata exposes whether loose headers are present. TransitiveVersionTable uses futures.
PiperOrigin-RevId: 208402465
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
3 files changed, 33 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java index c69e6d93f9..0e0553949a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java @@ -75,6 +75,8 @@ public final class CcCompilationContext implements CcCompilationContextApi { // Derived from depsContexts. private final ImmutableSet<Artifact> compilationPrerequisites; + private final CppConfiguration.HeadersCheckingMode headersCheckingMode; + @AutoCodec.Instantiator @VisibleForSerialization CcCompilationContext( @@ -90,7 +92,8 @@ public final class CcCompilationContext implements CcCompilationContextApi { ImmutableList<Artifact> directModuleMaps, CppModuleMap cppModuleMap, @Nullable CppModuleMap verificationModuleMap, - boolean propagateModuleMapAsActionInput) { + boolean propagateModuleMapAsActionInput, + CppConfiguration.HeadersCheckingMode headersCheckingMode) { Preconditions.checkNotNull(commandLineCcCompilationContext); this.commandLineCcCompilationContext = commandLineCcCompilationContext; this.declaredIncludeDirs = declaredIncludeDirs; @@ -105,6 +108,7 @@ public final class CcCompilationContext implements CcCompilationContextApi { this.verificationModuleMap = verificationModuleMap; this.compilationPrerequisites = compilationPrerequisites; this.propagateModuleMapAsActionInput = propagateModuleMapAsActionInput; + this.headersCheckingMode = headersCheckingMode; } /** @@ -294,7 +298,8 @@ public final class CcCompilationContext implements CcCompilationContextApi { ccCompilationContext.directModuleMaps, ccCompilationContext.cppModuleMap, ccCompilationContext.verificationModuleMap, - ccCompilationContext.propagateModuleMapAsActionInput); + ccCompilationContext.propagateModuleMapAsActionInput, + ccCompilationContext.headersCheckingMode); } /** @return the C++ module map of the owner. */ @@ -307,6 +312,10 @@ public final class CcCompilationContext implements CcCompilationContextApi { return verificationModuleMap; } + public CppConfiguration.HeadersCheckingMode getHeadersCheckingMode() { + return headersCheckingMode; + } + /** * The parts of the {@code CcCompilationContext} that influence the command line of compilation * actions. @@ -354,6 +363,8 @@ public final class CcCompilationContext implements CcCompilationContextApi { private CppModuleMap cppModuleMap; private CppModuleMap verificationModuleMap; private boolean propagateModuleMapAsActionInput = true; + private CppConfiguration.HeadersCheckingMode headersCheckingMode = + CppConfiguration.HeadersCheckingMode.STRICT; /** The rule that owns the context */ private final RuleContext ruleContext; @@ -565,6 +576,12 @@ public final class CcCompilationContext implements CcCompilationContextApi { return this; } + public Builder setHeadersCheckingMode( + CppConfiguration.HeadersCheckingMode headersCheckingMode) { + this.headersCheckingMode = headersCheckingMode; + return this; + } + /** Builds the {@link CcCompilationContext}. */ public CcCompilationContext build() { return build( @@ -600,7 +617,8 @@ public final class CcCompilationContext implements CcCompilationContextApi { ImmutableList.copyOf(directModuleMaps), cppModuleMap, verificationModuleMap, - propagateModuleMapAsActionInput); + propagateModuleMapAsActionInput, + headersCheckingMode); } /** 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 ea5ee63f04..474ea556fc 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 @@ -982,6 +982,7 @@ public final class CcCompilationHelper { for (PathFragment looseIncludeDir : looseIncludeDirs) { ccCompilationContextBuilder.addDeclaredIncludeDir(looseIncludeDir); } + ccCompilationContextBuilder.setHeadersCheckingMode(headersCheckingMode); } if (featureConfiguration.isEnabled(CppRuleClasses.MODULE_MAPS)) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index f4b9c688d2..8492e10be6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -1271,6 +1271,17 @@ public class CppCompileAction extends AbstractAction return message.toString(); } + @Override + public boolean hasLooseHeaders() { + // Layering check is stricter than hdrs_check = strict, so when it's enabled, there can't be + // loose headers. + return ccCompilationContext + .getHeadersCheckingMode() + .equals(CppConfiguration.HeadersCheckingMode.LOOSE) + && !(featureConfiguration.isEnabled(CppRuleClasses.LAYERING_CHECK) + && featureConfiguration.isEnabled(CppRuleClasses.PARSE_HEADERS)); + } + public CompileCommandLine getCompileCommandLine() { return compileCommandLine; } |