aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2018-02-26 09:06:16 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-26 09:07:48 -0800
commit1c0bc2dece2a79d78a1caaea6b671b5341003a46 (patch)
treed186ba459cd23195f243e0ab238cef587127fa0c /src/main/java
parentd6b4455b0cd0b2daf92de53e4afc6f22113a5d59 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java18
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();