aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-08-06 02:55:14 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-06 02:56:47 -0700
commitad7b61286e29364d6c7e386f218c6c3b0530bfdc (patch)
tree46aefc0f4f73a011040425a63d6016a2b2abaf37 /src/main/java/com/google/devtools/build/lib/rules
parent9be5a485f5ee0ab2c83fed9030f6d6c211305d01 (diff)
Remove the functionality to do ahead-of-time #include extraction as a separate
action. RELNOTES: None. PiperOrigin-RevId: 207516074
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.java61
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java88
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScanner.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java5
6 files changed, 6 insertions, 178 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 160218c0ff..c69e6d93f9 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
@@ -27,7 +27,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.rules.cpp.CppHelper.PregreppedHeader;
import com.google.devtools.build.lib.rules.cpp.IncludeScanner.IncludeScanningHeaderData;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
@@ -38,10 +37,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.stream.Collectors;
import javax.annotation.Nullable;
/**
@@ -121,8 +118,7 @@ public final class CcCompilationContext implements CcCompilationContextApi {
*
* <p>To reduce the number of edges in the action graph, we express the dependency on compilation
* prerequisites as a transitive dependency via a middleman. After they have been accumulated
- * (using {@link Builder#addCompilationPrerequisites(Iterable)}, {@link
- * Builder#mergeDependentCcCompilationContext(CcCompilationContext)}, and {@link
+ * ({@link Builder#mergeDependentCcCompilationContext(CcCompilationContext)}, and {@link
* Builder#mergeDependentCcCompilationContexts(Iterable)}, they are consolidated into a single
* middleman Artifact when {@link Builder#build()} is called.
*
@@ -192,7 +188,6 @@ public final class CcCompilationContext implements CcCompilationContextApi {
// We'd prefer for these types to use ImmutableSet/ImmutableMap. However, constructing these is
// substantially more costly in a way that shows up in profiles.
Map<PathFragment, Artifact> pathToLegalOutputArtifact = new HashMap<>();
- Map<Artifact, Artifact> pregreppedHeaders = new HashMap<>();
Set<Artifact> modularHeaders = new HashSet<>();
for (HeaderInfo transitiveHeaderInfo : transitiveHeaderInfos) {
boolean isModule = createModularHeaders && transitiveHeaderInfo.getModule(usePic) != null;
@@ -209,18 +204,12 @@ public final class CcCompilationContext implements CcCompilationContextApi {
pathToLegalOutputArtifact.put(a.getExecPath(), a);
}
}
- for (PregreppedHeader pregreppedHeader : transitiveHeaderInfo.pregreppedHeaders) {
- Artifact hdr = pregreppedHeader.originalHeader();
- Preconditions.checkState(!hdr.isSourceArtifact(), hdr);
- pregreppedHeaders.put(hdr, pregreppedHeader.greppedHeader());
- }
}
modularHeaders.removeAll(headerInfo.modularHeaders);
modularHeaders.removeAll(headerInfo.textualHeaders);
return new IncludeScanningHeaderData(
Collections.unmodifiableMap(pathToLegalOutputArtifact),
- Collections.unmodifiableSet(modularHeaders),
- Collections.unmodifiableMap(pregreppedHeaders));
+ Collections.unmodifiableSet(modularHeaders));
}
public NestedSet<Artifact> getTransitiveModules(boolean usePic) {
@@ -441,23 +430,6 @@ public final class CcCompilationContext implements CcCompilationContextApi {
}
/**
- * Adds multiple compilation prerequisites.
- *
- * <p>There are two kinds of "compilation prerequisites": declared header files and pregrepped
- * headers.
- */
- public Builder addCompilationPrerequisites(Iterable<Artifact> prerequisites) {
- for (Artifact prerequisite : prerequisites) {
- String basename = prerequisite.getFilename();
- Preconditions.checkArgument(!Link.OBJECT_FILETYPES.matches(basename));
- Preconditions.checkArgument(!Link.ARCHIVE_LIBRARY_FILETYPES.matches(basename));
- Preconditions.checkArgument(!Link.SHARED_LIBRARY_FILETYPES.matches(basename));
- }
- Iterables.addAll(compilationPrerequisites, prerequisites);
- return this;
- }
-
- /**
* Add a single include directory to be added with "-I". It can be either
* relative to the exec root (see
* {@link com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot}) or
@@ -532,20 +504,6 @@ public final class CcCompilationContext implements CcCompilationContextApi {
return this;
}
- /**
- * Add a map of generated source or header Artifact to an output Artifact after grepping the
- * file for include statements.
- */
- public Builder addPregreppedHeaders(List<PregreppedHeader> pregrepped) {
- addCompilationPrerequisites(
- pregrepped
- .stream()
- .map(pregreppedHeader -> pregreppedHeader.greppedHeader())
- .collect(Collectors.toList()));
- this.headerInfoBuilder.addPregreppedHeaders(pregrepped);
- return this;
- }
-
/** Add a set of required non-code compilation input. */
public Builder addNonCodeInputs(Iterable<Artifact> inputs) {
nonCodeInputs.addAll(inputs);
@@ -703,19 +661,15 @@ public final class CcCompilationContext implements CcCompilationContextApi {
/** All header files that are contained in this module. */
private final ImmutableList<Artifact> textualHeaders;
- private final ImmutableList<PregreppedHeader> pregreppedHeaders;
-
public HeaderInfo(
Artifact headerModule,
Artifact picHeaderModule,
ImmutableList<Artifact> modularHeaders,
- ImmutableList<Artifact> textualHeaders,
- ImmutableList<PregreppedHeader> pregreppedHeaders) {
+ ImmutableList<Artifact> textualHeaders) {
this.headerModule = headerModule;
this.picHeaderModule = picHeaderModule;
this.modularHeaders = modularHeaders;
this.textualHeaders = textualHeaders;
- this.pregreppedHeaders = pregreppedHeaders;
}
public Artifact getModule(boolean pic) {
@@ -730,7 +684,6 @@ public final class CcCompilationContext implements CcCompilationContextApi {
private Artifact picHeaderModule = null;
private final Set<Artifact> modularHeaders = new HashSet<>();
private final Set<Artifact> textualHeaders = new HashSet<>();
- private final Set<PregreppedHeader> pregreppedHeaders = new HashSet<>();
public Builder setHeaderModule(Artifact headerModule) {
this.headerModule = headerModule;
@@ -760,18 +713,12 @@ public final class CcCompilationContext implements CcCompilationContextApi {
return this;
}
- public Builder addPregreppedHeaders(Collection<PregreppedHeader> pregreppedHeaders) {
- this.pregreppedHeaders.addAll(pregreppedHeaders);
- return this;
- }
-
public HeaderInfo build() {
return new HeaderInfo(
headerModule,
picHeaderModule,
ImmutableList.copyOf(modularHeaders),
- ImmutableList.copyOf(textualHeaders),
- ImmutableList.copyOf(pregreppedHeaders));
+ ImmutableList.copyOf(textualHeaders));
}
}
}
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 4b777fa3ab..ea5ee63f04 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
@@ -964,7 +964,7 @@ public final class CcCompilationHelper {
// But defines come after those inherited from deps.
ccCompilationContextBuilder.addDefines(defines);
- // There are no ordering constraints for declared include dirs/srcs, or the pregrepped headers.
+ // There are no ordering constraints for declared include dirs/srcs.
ccCompilationContextBuilder.addDeclaredIncludeSrcs(publicHeaders.getHeaders());
ccCompilationContextBuilder.addDeclaredIncludeSrcs(publicTextualHeaders);
ccCompilationContextBuilder.addDeclaredIncludeSrcs(privateHeaders);
@@ -973,12 +973,6 @@ public final class CcCompilationHelper {
ccCompilationContextBuilder.addModularHdrs(publicHeaders.getHeaders());
ccCompilationContextBuilder.addModularHdrs(privateHeaders);
ccCompilationContextBuilder.addTextualHdrs(publicTextualHeaders);
- ccCompilationContextBuilder.addPregreppedHeaders(
- CppHelper.createExtractInclusions(ruleContext, semantics, publicHeaders.getHeaders()));
- ccCompilationContextBuilder.addPregreppedHeaders(
- CppHelper.createExtractInclusions(ruleContext, semantics, publicTextualHeaders));
- ccCompilationContextBuilder.addPregreppedHeaders(
- CppHelper.createExtractInclusions(ruleContext, semantics, privateHeaders));
// Add this package's dir to declaredIncludeDirs, & this rule's headers to declaredIncludeSrcs
// Note: no include dir for STRICT mode.
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 eca2691bb8..6046612b2b 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
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL;
import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL;
import static java.nio.charset.StandardCharsets.UTF_8;
-import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
@@ -61,13 +60,11 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfig
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Tool;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
import com.google.devtools.build.lib.shell.ShellUtils;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -83,17 +80,11 @@ public class CppHelper {
static final PathFragment OBJS = PathFragment.create("_objs");
static final PathFragment PIC_OBJS = PathFragment.create("_pic_objs");
- private static final String GREPPED_INCLUDES_SUFFIX = ".includes";
-
// TODO(bazel-team): should this use Link.SHARED_LIBRARY_FILETYPES?
public static final FileTypeSet SHARED_LIBRARY_FILETYPES = FileTypeSet.of(
CppFileTypes.SHARED_LIBRARY,
CppFileTypes.VERSIONED_SHARED_LIBRARY);
- private static final FileTypeSet CPP_FILETYPES = FileTypeSet.of(
- CppFileTypes.CPP_HEADER,
- CppFileTypes.CPP_SOURCE);
-
/** Base label of the c++ toolchain category. */
public static final String TOOLCHAIN_TYPE_LABEL = "//tools/cpp:toolchain_type";
@@ -451,85 +442,6 @@ public class CppHelper {
}
/**
- * A header that has been grepped for #include statements. Includes the original header as well as
- * a stripped version of that header that contains only #include statements.
- */
- @AutoCodec
- @AutoValue
- abstract static class PregreppedHeader {
- @AutoCodec.Instantiator
- static PregreppedHeader create(Artifact originalHeader, Artifact greppedHeader) {
- return new AutoValue_CppHelper_PregreppedHeader(originalHeader, greppedHeader);
- }
-
- /** Returns the original header, before grepping. */
- abstract Artifact originalHeader();
-
- /** Returns the grepped header, which contains only #include statements. */
- abstract Artifact greppedHeader();
- }
-
- /**
- * Creates a grep-includes ExtractInclusions action for generated sources/headers in the
- * needsIncludeScanning() BuildConfiguration case. Returns a map from original header Artifact to
- * the output Artifact of grepping over it. The return value only includes entries for generated
- * sources or headers when --extract_generated_inclusions is enabled.
- *
- * <p>Previously, incremental rebuilds redid all include scanning work for a given .cc source in
- * serial. For high-latency file systems, this could cause performance problems if many headers
- * are generated.
- */
- @Nullable
- public static final List<PregreppedHeader> createExtractInclusions(
- RuleContext ruleContext, CppSemantics semantics, Iterable<Artifact> prerequisites) {
- List<PregreppedHeader> extractions = new ArrayList<>();
- HashSet<Artifact> alreadyProcessedHeaders = new HashSet<>();
- for (Artifact prerequisite : prerequisites) {
- if (alreadyProcessedHeaders.contains(prerequisite)) {
- // Don't create duplicate actions just because user specified same header file twice.
- continue;
- }
- alreadyProcessedHeaders.add(prerequisite);
-
- Artifact scanned = createExtractInclusions(ruleContext, semantics, prerequisite);
- if (scanned != null) {
- extractions.add(PregreppedHeader.create(prerequisite, scanned));
- }
- }
- return extractions;
- }
-
- /**
- * Creates a grep-includes ExtractInclusions action for generated sources/headers in the
- * needsIncludeScanning() BuildConfiguration case.
- *
- * <p>Previously, incremental rebuilds redid all include scanning work for a given
- * .cc source in serial. For high-latency file systems, this could cause
- * performance problems if many headers are generated.
- */
- private static final Artifact createExtractInclusions(
- RuleContext ruleContext, CppSemantics semantics, Artifact prerequisite) {
- if (ruleContext != null
- && semantics.needsIncludeScanning(ruleContext)
- && !prerequisite.isSourceArtifact()
- && CPP_FILETYPES.matches(prerequisite.getFilename())) {
- Artifact scanned = getIncludesOutput(ruleContext, prerequisite);
- Artifact grepIncludes = ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST);
- ruleContext.registerAction(
- new ExtractInclusionAction(
- ruleContext.getActionOwner(), prerequisite, scanned, grepIncludes));
- return scanned;
- }
- return null;
- }
-
- private static Artifact getIncludesOutput(RuleContext ruleContext, Artifact src) {
- Preconditions.checkArgument(!src.isSourceArtifact(), src);
- return ruleContext.getGenfilesArtifact(
- src.getRootRelativePath().replaceName(src.getFilename() + GREPPED_INCLUDES_SUFFIX));
- }
-
- /**
* Returns the linked artifact.
*
* @param ruleContext the ruleContext to be used to scope the artifact
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
index 93048e9654..16ba5fdcb6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
@@ -51,12 +51,6 @@ public interface CppSemantics {
/** Returns the include processing closure, which handles include processing for this build */
IncludeProcessing getIncludeProcessing();
- /**
- * Returns true iff this build configuration requires inclusion extraction (for include scanning)
- * in the action graph.
- */
- boolean needsIncludeScanning(RuleContext ruleContext);
-
/** Returns true iff this build should perform .d input pruning. */
boolean needsDotdInputPruning();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScanner.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScanner.java
index 18f4684c8e..e27b99baa4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScanner.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/IncludeScanner.java
@@ -195,30 +195,16 @@ public interface IncludeScanner {
*/
private final Set<Artifact> modularHeaders;
- /**
- * Lookup table to find pregrepped .includes files that contain a single line per include. These
- * are essentially a cache to make it unnecessary for the {@link IncludeScanner} to read large
- * generated files repeatedly.
- */
- private final Map<Artifact, Artifact> pregreppedHeaders;
-
public IncludeScanningHeaderData(
- Map<PathFragment, Artifact> pathToLegalOutputArtifact,
- Set<Artifact> modularHeaders,
- Map<Artifact, Artifact> pregreppedHeaders) {
+ Map<PathFragment, Artifact> pathToLegalOutputArtifact, Set<Artifact> modularHeaders) {
this.pathToLegalOutputArtifact = pathToLegalOutputArtifact;
this.modularHeaders = modularHeaders;
- this.pregreppedHeaders = pregreppedHeaders;
}
public Set<Artifact> getModularHeaders() {
return modularHeaders;
}
- public Map<Artifact, Artifact> getPregreppedHeaders() {
- return pregreppedHeaders;
- }
-
public Map<PathFragment, Artifact> getPathToLegalOutputArtifact() {
return pathToLegalOutputArtifact;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
index bee851f49a..3296fbcfed 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
@@ -149,11 +149,6 @@ public class ObjcCppSemantics implements CppSemantics {
}
@Override
- public boolean needsIncludeScanning(RuleContext ruleContext) {
- return false;
- }
-
- @Override
public boolean needsDotdInputPruning() {
return config.getDotdPruningPlan() == DotdPruningMode.USE;
}