diff options
author | 2018-02-26 09:06:16 -0800 | |
---|---|---|
committer | 2018-02-26 09:07:48 -0800 | |
commit | 1c0bc2dece2a79d78a1caaea6b671b5341003a46 (patch) | |
tree | d186ba459cd23195f243e0ab238cef587127fa0c /src/main/java | |
parent | d6b4455b0cd0b2daf92de53e4afc6f22113a5d59 (diff) |
Hide fix for linkstmap inputs computation behind an option
This cl introduces a bazel option
(--experimental_fix_linkstamp_inputs_bug_73447914) to control which inputs get
added into C++ linkstamp compile action. When set to true (defaults to false),
all inputs of relevant C++ linking action get added as inputs to the linkstamp
compile action too.
RELNOTES: None.
PiperOrigin-RevId: 187030217
Diffstat (limited to 'src/main/java')
3 files changed, 40 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index 00eeea8994..e0b1e53a0b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -200,6 +200,8 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { private final boolean shouldProvideMakeVariables; + private final boolean fixLinkstampInputsBug; + /** * If true, the ConfiguredTarget is only used to get the necessary cross-referenced {@code * CcCompilationInfo}s, but registering build actions is disabled. @@ -315,6 +317,7 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { ImmutableList.copyOf(cppOptions.ltoindexoptList), cppOptions, params.cpuTransformer, + cppOptions.fixLinkstampInputsBug, (cppOptions.stripBinaries == StripMode.ALWAYS || (cppOptions.stripBinaries == StripMode.SOMETIMES && compilationMode == CompilationMode.FASTBUILD)), @@ -351,6 +354,7 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { ImmutableList<String> ltoindexOptions, CppOptions cppOptions, CpuTransformer cpuTransformerEnum, + boolean fixLinkstampInputsBug, boolean stripBinaries, CompilationMode compilationMode, boolean shouldProvideMakeVariables, @@ -381,6 +385,7 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { this.ltoindexOptions = ltoindexOptions; this.cppOptions = cppOptions; this.cpuTransformerEnum = cpuTransformerEnum; + this.fixLinkstampInputsBug = fixLinkstampInputsBug; this.stripBinaries = stripBinaries; this.compilationMode = compilationMode; this.shouldProvideMakeVariables = shouldProvideMakeVariables; @@ -421,6 +426,10 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { return cpuTransformerEnum.getTransformer(); } + public boolean shouldFixLinkstampInputsBug() { + return fixLinkstampInputsBug; + } + /** * Returns the path of the crosstool. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index 6e652378ae..2b9447a755 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -1191,19 +1191,25 @@ public class CppLinkActionBuilder { if (!isLtoIndexing) { for (Entry<Linkstamp, Artifact> linkstampEntry : linkstampMap.entrySet()) { + Iterable<Artifact> inputs; + if (cppConfiguration.shouldFixLinkstampInputsBug()) { + inputs = IterablesChain.<Artifact>builder() + .add(ImmutableSet.copyOf(nonCodeInputs)) + // We don't want to add outputs of this linkstamp compilation action to + // inputsBuilder before this line, since that would introduce a cycle in the + // graph. + .add(inputsBuilder.deduplicate().build()) + .build(); + } else { + inputs = ImmutableSet.copyOf(nonCodeInputs); + } analysisEnvironment.registerAction( CppLinkstampCompileHelper.createLinkstampCompileAction( ruleContext, linkstampEntry.getKey().getArtifact(), linkstampEntry.getValue(), linkstampEntry.getKey().getDeclaredIncludeSrcs(), - NestedSetBuilder.<Artifact>stableOrder() - .addAll(nonCodeInputs) - // We don't want to add outputs of this linkstamp compilation action to - // inputsBuilder before this line, since that would introduce a cycle in the - // graph. - .addAll(inputsBuilder.deduplicate().build()) - .build(), + inputs, buildInfoHeaderArtifacts, additionalLinkstampDefines, toolchain, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index 5ca58c20fd..54ee2a97f1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -888,6 +888,24 @@ public class CppOptions extends FragmentOptions { ) public boolean useLLVMCoverageMapFormat; + @Option( + name = "experimental_fix_linkstamp_inputs_bug", + defaultValue = "false", + category = "experimental", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = { + OptionEffectTag.CHANGES_INPUTS, + OptionEffectTag.AFFECTS_OUTPUTS, + OptionEffectTag.LOADING_AND_ANALYSIS + }, + metadataTags = {OptionMetadataTag.EXPERIMENTAL}, + help = + "If set to true, bazel will add all inputs of the C++ linking action as inputs to the " + + "C++ linkstamp compile action too. This is a migration-only flag and will be " + + "removed as soon as g3 is fixed." + ) + public boolean fixLinkstampInputsBug; + @Override public FragmentOptions getHost() { CppOptions host = (CppOptions) getDefault(); |