diff options
author | Googler <noreply@google.com> | 2018-08-06 02:55:14 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-06 02:56:47 -0700 |
commit | ad7b61286e29364d6c7e386f218c6c3b0530bfdc (patch) | |
tree | 46aefc0f4f73a011040425a63d6016a2b2abaf37 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 9be5a485f5ee0ab2c83fed9030f6d6c211305d01 (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')
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; } |