aboutsummaryrefslogtreecommitdiffhomepage
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
parent5276be608c43fa37706903c1d9301403f814985e (diff)
ActionAnalysisMetadata exposes whether loose headers are present. TransitiveVersionTable uses futures.
PiperOrigin-RevId: 208402465
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java10
-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
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java2
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/TransitiveVersionTable.java12
6 files changed, 51 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java b/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
index 1e13cbec96..d86224ba3f 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
@@ -179,4 +179,14 @@ public interface ActionAnalysisMetadata {
return this != NORMAL;
}
}
+
+ /**
+ * Whether this action has loose headers.
+ *
+ * <p>If this is true, top-down evaluation considers an action changed if any source files in
+ * package have changed.
+ */
+ default boolean hasLooseHeaders() {
+ return false;
+ }
}
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;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index ce65b6d646..5e8f708444 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -691,7 +691,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
* single command, so callers should err on the side of calling it more frequently. Should be
* idempotent, so that calls after the first one in the same evaluation should be quick.
*/
- public final void notifyCommandComplete() throws InterruptedException {
+ public void notifyCommandComplete() throws InterruptedException {
memoizingEvaluator.noteEvaluationsAtSameVersionMayBeFinished();
}
diff --git a/src/main/java/com/google/devtools/build/skyframe/TransitiveVersionTable.java b/src/main/java/com/google/devtools/build/skyframe/TransitiveVersionTable.java
index 210cff45b8..9aa6083552 100644
--- a/src/main/java/com/google/devtools/build/skyframe/TransitiveVersionTable.java
+++ b/src/main/java/com/google/devtools/build/skyframe/TransitiveVersionTable.java
@@ -13,7 +13,8 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import java.io.IOException;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.function.Supplier;
/** Readable view of transitive version information. */
public interface TransitiveVersionTable {
@@ -22,9 +23,10 @@ public interface TransitiveVersionTable {
/** Encapsulates transitive version information. */
interface VersionAggregator {
- /** @return the maximum transitive source version or -1 if no sources were found */
- long getMaxTransitiveVersion(
- long baselineVersion, InterruptibleIOLongSupplier deferredMaxDepVersion)
- throws InterruptedException, IOException;
+ /** @return future with the maximum transitive source version or -1 if no sources were found */
+ ListenableFuture<Long> getMaxTransitiveVersion(
+ SkyKey key,
+ InterruptibleSupplier<SkyValue> valueSupplier,
+ Supplier<ListenableFuture<Long>> deferredMaxDepVersion);
}
}