aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-03-14 13:29:10 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-03-14 19:50:00 +0000
commit278b58e23c6a7057e641f16be2700ef116680524 (patch)
treeedf1c2f992fe0fcb6ac120f3db20d84cca55415a /src/main
parent95a4dd0269d95a2a5dc8a952573ef6d83791bbfb (diff)
Refactor scheduling of LTO Backend actions into CppLinkActionBuilder
This was suggested in the review for unknown commit, which adds ThinLTO support to another client of CppLinkActionBuilder. The change required changing the constructor to take a FdoSupportProvider object instead of a FdoSupport object, so required changes to all callers. -- PiperOrigin-RevId: 150060046 MOS_MIGRATED_REVID=150060046
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java5
5 files changed, 49 insertions, 41 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 1278aad640..950c800dd2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -236,7 +236,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
determineLinkerArguments(
ruleContext,
ccToolchain,
- fdoSupport.getFdoSupport(),
+ fdoSupport,
common,
precompiledFiles,
info,
@@ -287,19 +287,12 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
if (featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO)) {
linkActionBuilder.setLTOIndexing(true);
+ linkActionBuilder.setUsePicForLTOBackendActions(usePic);
+ linkActionBuilder.setUseFissionForLTOBackendActions(cppConfiguration.useFission());
CppLinkAction indexAction = linkActionBuilder.build();
ruleContext.registerAction(indexAction);
ltoBackendArtifacts = indexAction.getAllLTOBackendArtifacts();
- for (LTOBackendArtifacts ltoArtifacts : ltoBackendArtifacts) {
- ltoArtifacts.scheduleLTOBackendAction(
- ruleContext,
- featureConfiguration,
- ccToolchain,
- fdoSupport,
- usePic,
- /*generateDwo=*/ cppConfiguration.useFission());
- }
linkActionBuilder.setLTOIndexing(false);
}
@@ -444,7 +437,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
private static CppLinkActionBuilder determineLinkerArguments(
RuleContext context,
CcToolchainProvider toolchain,
- FdoSupport fdoSupport,
+ FdoSupportProvider fdoSupport,
CcCommon common,
PrecompiledFiles precompiledFiles,
CcLibraryHelper.Info info,
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 9af79a77a4..22201abdc4 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
@@ -145,7 +145,7 @@ public class CppLinkActionBuilder {
// can be null for CppLinkAction.createTestBuilder()
@Nullable private final CcToolchainProvider toolchain;
- private final FdoSupport fdoSupport;
+ private final FdoSupportProvider fdoSupport;
private Artifact interfaceOutput;
private Artifact symbolCounts;
private PathFragment runtimeSolibDir;
@@ -178,6 +178,8 @@ public class CppLinkActionBuilder {
private LinkArtifactFactory linkArtifactFactory = CppLinkAction.DEFAULT_ARTIFACT_FACTORY;
private boolean isLTOIndexing = false;
+ private boolean usePicForLTOBackendActions = false;
+ private boolean useFissionForLTOBackendActions = false;
private Iterable<LTOBackendArtifacts> allLTOArtifacts = null;
private final List<VariablesExtension> variablesExtensions = new ArrayList<>();
@@ -191,8 +193,11 @@ public class CppLinkActionBuilder {
* @param toolchain the C++ toolchain provider
* @param fdoSupport the C++ FDO optimization support
*/
- public CppLinkActionBuilder(RuleContext ruleContext, Artifact output,
- CcToolchainProvider toolchain, FdoSupport fdoSupport) {
+ public CppLinkActionBuilder(
+ RuleContext ruleContext,
+ Artifact output,
+ CcToolchainProvider toolchain,
+ FdoSupportProvider fdoSupport) {
this(
ruleContext,
output,
@@ -216,7 +221,7 @@ public class CppLinkActionBuilder {
Artifact output,
BuildConfiguration configuration,
CcToolchainProvider toolchain,
- FdoSupport fdoSupport) {
+ FdoSupportProvider fdoSupport) {
this(ruleContext, output, configuration, ruleContext.getAnalysisEnvironment(), toolchain,
fdoSupport);
}
@@ -237,7 +242,7 @@ public class CppLinkActionBuilder {
BuildConfiguration configuration,
AnalysisEnvironment analysisEnvironment,
CcToolchainProvider toolchain,
- FdoSupport fdoSupport) {
+ FdoSupportProvider fdoSupport) {
this.ruleContext = ruleContext;
this.analysisEnvironment = Preconditions.checkNotNull(analysisEnvironment);
this.output = Preconditions.checkNotNull(output);
@@ -267,7 +272,7 @@ public class CppLinkActionBuilder {
Context linkContext,
BuildConfiguration configuration,
CcToolchainProvider toolchain,
- FdoSupport fdoSupport) {
+ FdoSupportProvider fdoSupport) {
// These Builder-only fields get set in the constructor:
// ruleContext, analysisEnvironment, outputPath, configuration, runtimeSolibDir
this(
@@ -666,7 +671,7 @@ public class CppLinkActionBuilder {
.setUseTestOnlyFlags(useTestOnlyFlags)
.setParamFile(paramFile)
.setToolchain(toolchain)
- .setFdoSupport(fdoSupport)
+ .setFdoSupport(fdoSupport.getFdoSupport())
.setBuildVariables(buildVariables)
.setToolPath(getToolPath())
.setFeatureConfiguration(featureConfiguration);
@@ -736,6 +741,14 @@ public class CppLinkActionBuilder {
argv.addAll(cppConfiguration.getLinkOptions());
argv.addAll(cppConfiguration.getCompilerOptions(features));
a.setCommandLine(argv);
+
+ a.scheduleLTOBackendAction(
+ ruleContext,
+ featureConfiguration,
+ toolchain,
+ fdoSupport,
+ usePicForLTOBackendActions,
+ useFissionForLTOBackendActions);
}
}
@@ -913,6 +926,18 @@ public class CppLinkActionBuilder {
return this;
}
+ /** Sets flag for using PIC in any scheduled LTO Backend actions. */
+ public CppLinkActionBuilder setUsePicForLTOBackendActions(boolean usePic) {
+ this.usePicForLTOBackendActions = usePic;
+ return this;
+ }
+
+ /** Sets flag for using Fission in any scheduled LTO Backend actions. */
+ public CppLinkActionBuilder setUseFissionForLTOBackendActions(boolean useFission) {
+ this.useFissionForLTOBackendActions = useFission;
+ return this;
+ }
+
/** Sets the C++ runtime library inputs for the action. */
public CppLinkActionBuilder setRuntimeInputs(
ArtifactCategory runtimeType, Artifact middleman, NestedSet<Artifact> inputs) {
@@ -1398,7 +1423,7 @@ public class CppLinkActionBuilder {
buildVariables
.addAllStringVariables(toolchain.getBuildVariables())
.build();
- fdoSupport.getLinkOptions(featureConfiguration, buildVariables);
+ fdoSupport.getFdoSupport().getLinkOptions(featureConfiguration, buildVariables);
}
private boolean isLTOIndexing() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index e520f33743..3d27459a85 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -1146,24 +1146,16 @@ public final class CppModel {
if (!ccOutputs.getLtoBitcodeFiles().isEmpty()
&& featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO)) {
linkActionBuilder.setLTOIndexing(true);
+ linkActionBuilder.setUsePicForLTOBackendActions(usePicForSharedLibs);
+ // If support is ever added for generating a dwp file for shared
+ // library targets (e.g. when linkstatic=0), then this should change
+ // to generate dwo files when cppConfiguration.useFission(),
+ // and the dwp generating action for the shared library should
+ // include all of the resulting dwo files.
+ linkActionBuilder.setUseFissionForLTOBackendActions(false);
CppLinkAction indexAction = linkActionBuilder.build();
env.registerAction(indexAction);
- for (LTOBackendArtifacts ltoArtifacts : indexAction.getAllLTOBackendArtifacts()) {
- ltoArtifacts.scheduleLTOBackendAction(
- ruleContext,
- featureConfiguration,
- ccToolchain,
- fdoSupport,
- usePicForSharedLibs,
- // If support is ever added for generating a dwp file for shared
- // library targets (e.g. when linkstatic=0), then this should change
- // to generate dwo files when cppConfiguration.useFission(),
- // and the dwp generating action for the shared library should
- // include all of the resulting dwo files.
- /*generateDwo=*/ false);
- }
-
linkActionBuilder.setLTOIndexing(false);
}
@@ -1202,8 +1194,7 @@ public final class CppModel {
}
private CppLinkActionBuilder newLinkActionBuilder(Artifact outputArtifact) {
- return new CppLinkActionBuilder(
- ruleContext, outputArtifact, ccToolchain, fdoSupport.getFdoSupport())
+ return new CppLinkActionBuilder(ruleContext, outputArtifact, ccToolchain, fdoSupport)
.setCrosstoolInputs(ccToolchain.getLink())
.addNonCodeInputs(context.getTransitiveCompilationPrerequisites());
}
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 ee1bc426ce..6ec5120849 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
@@ -29,7 +29,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.FdoSupport;
+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;
import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
@@ -198,7 +198,7 @@ public abstract class NativeDepsHelper {
} else {
sharedLibrary = nativeDeps;
}
- FdoSupport fdoSupport = CppHelper.getFdoSupport(ruleContext, ":cc_toolchain").getFdoSupport();
+ FdoSupportProvider fdoSupport = CppHelper.getFdoSupport(ruleContext, ":cc_toolchain");
CppLinkActionBuilder builder =
new CppLinkActionBuilder(ruleContext, sharedLibrary, configuration, toolchain, fdoSupport);
if (useDynamicRuntime) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
index 612d81d285..f87e24e8d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -184,8 +184,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
.addVariableCategory(VariableCategory.FULLY_LINK_VARIABLES)
.build();
CppLinkAction fullyLinkAction =
- new CppLinkActionBuilder(
- ruleContext, outputArchive, ccToolchain, fdoSupport.getFdoSupport())
+ new CppLinkActionBuilder(ruleContext, outputArchive, ccToolchain, fdoSupport)
.addActionInputs(objcProvider.getObjcLibraries())
.addActionInputs(objcProvider.getCcLibraries())
.addActionInputs(objcProvider.get(IMPORTED_LIBRARY).toSet())
@@ -249,7 +248,7 @@ public class CrosstoolCompilationSupport extends CompilationSupport {
CcToolchainProvider ccToolchain = CppHelper.getToolchain(ruleContext, ":cc_toolchain");
FdoSupportProvider fdoSupport = CppHelper.getFdoSupport(ruleContext, ":cc_toolchain");
CppLinkAction executableLinkAction =
- new CppLinkActionBuilder(ruleContext, binaryToLink, ccToolchain, fdoSupport.getFdoSupport())
+ new CppLinkActionBuilder(ruleContext, binaryToLink, ccToolchain, fdoSupport)
.setMnemonic("ObjcLink")
.addActionInputs(bazelBuiltLibraries)
.addActionInputs(objcProvider.getCcLibraries())