aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-08-01 16:38:49 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-01 17:45:16 +0200
commit2789c97149a1f253b659aa0f2401f44705a3258f (patch)
tree3cba2aa851cdba8eddaf7b09daa71ebddb05d171 /src/main
parent57d3e955f6d531a31ba955b8364990eadf4dda2c (diff)
Enable ThinLTO for nativedeps links
Add support for setting up the LTO indexing step when the inputs contain bitcode. Added a python BuildViewTestCase that provokes this, as well as a ThinLTO GoogleBuildIntegrationTestCase to the existing NativeDeps testing. PiperOrigin-RevId: 163827441
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index f4f89af8a9..1ed477e97c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.nativedeps;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.analysis.RuleContext;
@@ -31,6 +32,7 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppLinkAction;
import com.google.devtools.build.lib.rules.cpp.CppLinkActionBuilder;
+import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
import com.google.devtools.build.lib.rules.cpp.Link;
import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
@@ -213,19 +215,36 @@ public abstract class NativeDepsHelper {
builder.setRuntimeInputs(ArtifactCategory.STATIC_LIBRARY,
toolchain.getStaticRuntimeLinkMiddleman(), toolchain.getStaticRuntimeLinkInputs());
}
- CppLinkAction linkAction =
- builder
- .setLinkArtifactFactory(SHAREABLE_LINK_ARTIFACT_FACTORY)
- .setCrosstoolInputs(toolchain.getLink())
- .addLibraries(linkerInputs)
- .setLinkType(LinkTargetType.DYNAMIC_LIBRARY)
- .setLinkStaticness(LinkStaticness.MOSTLY_STATIC)
- .setLibraryIdentifier(libraryIdentifier)
- .addLinkopts(linkopts)
- .setNativeDeps(true)
- .addLinkstamps(linkstamps)
- .build();
+ ImmutableMap.Builder<Artifact, Artifact> ltoBitcodeFilesMap = new ImmutableMap.Builder<>();
+ for (LibraryToLink lib : linkerInputs) {
+ if (!lib.getLTOBitcodeFiles().isEmpty()) {
+ ltoBitcodeFilesMap.putAll(lib.getLTOBitcodeFiles());
+ }
+ }
+ builder
+ .setLinkArtifactFactory(SHAREABLE_LINK_ARTIFACT_FACTORY)
+ .setCrosstoolInputs(toolchain.getLink())
+ .addLibraries(linkerInputs)
+ .setLinkType(LinkTargetType.DYNAMIC_LIBRARY)
+ .setLinkStaticness(LinkStaticness.MOSTLY_STATIC)
+ .setLibraryIdentifier(libraryIdentifier)
+ .addLinkopts(linkopts)
+ .setNativeDeps(true)
+ .addLinkstamps(linkstamps)
+ .addLTOBitcodeFiles(ltoBitcodeFilesMap.build());
+
+ if (!builder.getLtoBitcodeFiles().isEmpty()
+ && featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO)) {
+ builder.setLTOIndexing(true);
+ builder.setUsePicForLTOBackendActions(CppHelper.usePic(ruleContext, false));
+ builder.setUseFissionForLTOBackendActions(
+ ruleContext.getFragment(CppConfiguration.class).useFission());
+ CppLinkAction indexAction = builder.build();
+ ruleContext.registerAction(indexAction);
+ builder.setLTOIndexing(false);
+ }
+ CppLinkAction linkAction = builder.build();
ruleContext.registerAction(linkAction);
Artifact linkerOutput = linkAction.getPrimaryOutput();