aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-04-19 06:27:11 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-04-19 10:51:22 +0200
commitbb752ad0d85c9bfcb1359f091e956ab88544a7ef (patch)
tree55a992677ae867122f48a46a0508620a8a00409f /src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
parentcdcd27cb17ff16cca428d5269cbd5dd41fba39bf (diff)
Support using minimized bitcode for ThinLTO LTO indexing step
This is the Blaze side of the support for emitting and using minimized bitcode files during the LTO indexing (thin link) step of a ThinLTO build. The llvm support has already been released to stable, and this needs to be submitted after the companion Crosstool support (unknown commit, will send for review once this larger part is reviewed). This enables large applications successfully build using ThinLTO and -g, otherwise the bitcode files that are input to the LTO indexing step are huge and the maximum input size is exceeded. PiperOrigin-RevId: 153549687
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
index f70a4ed28b..4b48783ccf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationOutputs.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.cpp;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -41,9 +42,10 @@ public class CcCompilationOutputs {
private final ImmutableList<Artifact> picObjectFiles;
/**
- * All .o files coming from a C(++) compilation under our control.
+ * Maps all .o bitcode files coming from a ThinLTO C(++) compilation under our control to the
+ * corresponding minimized bitcode files that can be used for the LTO indexing step.
*/
- private final ImmutableList<Artifact> ltoBitcodeFiles;
+ private final ImmutableMap<Artifact, Artifact> ltoBitcodeFiles;
/**
* All .dwo files built by the target, corresponding to .o outputs.
@@ -70,8 +72,7 @@ public class CcCompilationOutputs {
private CcCompilationOutputs(
ImmutableList<Artifact> objectFiles,
ImmutableList<Artifact> picObjectFiles,
- ImmutableList<Artifact> ltoBitcodeFiles,
-
+ ImmutableMap<Artifact, Artifact> ltoBitcodeFiles,
ImmutableList<Artifact> dwoFiles,
ImmutableList<Artifact> picDwoFiles,
NestedSet<Artifact> temps,
@@ -103,10 +104,8 @@ public class CcCompilationOutputs {
return usePic ? picObjectFiles : objectFiles;
}
- /**
- * Returns unmodifiable view of object files resulting from compilation.
- */
- public ImmutableList<Artifact> getLtoBitcodeFiles() {
+ /** Returns unmodifiable map of bitcode object files resulting from compilation. */
+ public ImmutableMap<Artifact, Artifact> getLtoBitcodeFiles() {
return ltoBitcodeFiles;
}
@@ -166,7 +165,7 @@ public class CcCompilationOutputs {
public static final class Builder {
private final Set<Artifact> objectFiles = new LinkedHashSet<>();
private final Set<Artifact> picObjectFiles = new LinkedHashSet<>();
- private final Set<Artifact> ltoBitcodeFiles = new LinkedHashSet<>();
+ private final ImmutableMap.Builder<Artifact, Artifact> ltoBitcodeFiles = ImmutableMap.builder();
private final Set<Artifact> dwoFiles = new LinkedHashSet<>();
private final Set<Artifact> picDwoFiles = new LinkedHashSet<>();
private final NestedSetBuilder<Artifact> temps = NestedSetBuilder.stableOrder();
@@ -177,7 +176,7 @@ public class CcCompilationOutputs {
return new CcCompilationOutputs(
ImmutableList.copyOf(objectFiles),
ImmutableList.copyOf(picObjectFiles),
- ImmutableList.copyOf(ltoBitcodeFiles),
+ ltoBitcodeFiles.build(),
ImmutableList.copyOf(dwoFiles),
ImmutableList.copyOf(picDwoFiles),
temps.build(),
@@ -224,13 +223,13 @@ public class CcCompilationOutputs {
return this;
}
- public Builder addLTOBitcodeFile(Artifact a) {
- ltoBitcodeFiles.add(a);
+ public Builder addLTOBitcodeFile(Artifact fullBitcode, Artifact ltoIndexingBitcode) {
+ ltoBitcodeFiles.put(fullBitcode, ltoIndexingBitcode);
return this;
}
- public Builder addLTOBitcodeFile(Iterable<Artifact> artifacts) {
- Iterables.addAll(ltoBitcodeFiles, artifacts);
+ public Builder addLTOBitcodeFile(ImmutableMap<Artifact, Artifact> artifacts) {
+ ltoBitcodeFiles.putAll(artifacts);
return this;
}