aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-08-12 11:35:14 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-12 11:36:55 -0700
commitc0d4bb06d4227be27d5b4d4b04a4d5bb9ae3215d (patch)
tree1504d37452650f2d35dd25bd03e39ff6ca9516d5 /src/main/java/com/google/devtools/build/lib/rules
parent5276be608c43fa37706903c1d9301403f814985e (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java11
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;
}