diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java | 47 |
1 files changed, 32 insertions, 15 deletions
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 262dd3794e..fdb0b348a0 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 @@ -484,7 +484,12 @@ public final class CppModel { CppCompileAction picAction = picBuilder.build(); env.registerAction(picAction); if (addObject) { - result.addPicObjectFile(picAction.getOutputFile()); + result.addPicObjectFile(picAction.getOutputFile()); + + if (featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO) + && CppFileTypes.LTO_SOURCE.matches(sourceArtifact.getFilename())) { + result.addLTOBitcodeFile(picAction.getOutputFile()); + } } if (picAction.getDwoFile() != null) { // Host targets don't produce .dwo files. @@ -511,8 +516,12 @@ public final class CppModel { if (maySaveTemps) { result.addTemps( - createTempsActions(sourceArtifact, outputName, builder, /*usePic=*/false, - ccRelativeName)); + createTempsActions( + sourceArtifact, + outputName, + builder, + /*usePic=*/ false, + ccRelativeName)); } semantics.finalizeCompileActionBuilder(ruleContext, builder); @@ -521,6 +530,10 @@ public final class CppModel { Artifact objectFile = compileAction.getOutputFile(); if (addObject) { result.addObjectFile(objectFile); + if (featureConfiguration.isEnabled(CppRuleClasses.THIN_LTO) + && CppFileTypes.LTO_SOURCE.matches(sourceArtifact.getFilename())) { + result.addLTOBitcodeFile(objectFile); + } } if (compileAction.getDwoFile() != null) { // Host targets don't produce .dwo files. @@ -603,12 +616,14 @@ public final class CppModel { // Presumably, it is done this way because the .a file is an implicit output of every cc_library // rule, so we can't use ".pic.a" that in the always-PIC case. Artifact linkedArtifact = CppHelper.getLinkedArtifact(ruleContext, linkType); - CppLinkAction maybePicAction = newLinkActionBuilder(linkedArtifact) - .addNonLibraryInputs(ccOutputs.getObjectFiles(usePicForBinaries)) - .addNonLibraryInputs(ccOutputs.getHeaderTokenFiles()) - .setLinkType(linkType) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) - .build(); + CppLinkAction maybePicAction = + newLinkActionBuilder(linkedArtifact) + .addNonLibraryInputs(ccOutputs.getObjectFiles(usePicForBinaries)) + .addNonLibraryInputs(ccOutputs.getHeaderTokenFiles()) + .addLTOBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) + .setLinkType(linkType) + .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .build(); env.registerAction(maybePicAction); result.addStaticLibrary(maybePicAction.getOutputLibrary()); @@ -621,12 +636,14 @@ public final class CppModel { : LinkTargetType.PIC_STATIC_LIBRARY; Artifact picArtifact = CppHelper.getLinkedArtifact(ruleContext, picLinkType); - CppLinkAction picAction = newLinkActionBuilder(picArtifact) - .addNonLibraryInputs(ccOutputs.getObjectFiles(true)) - .addNonLibraryInputs(ccOutputs.getHeaderTokenFiles()) - .setLinkType(picLinkType) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) - .build(); + CppLinkAction picAction = + newLinkActionBuilder(picArtifact) + .addNonLibraryInputs(ccOutputs.getObjectFiles(true)) + .addNonLibraryInputs(ccOutputs.getHeaderTokenFiles()) + .addLTOBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) + .setLinkType(picLinkType) + .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .build(); env.registerAction(picAction); result.addPicStaticLibrary(picAction.getOutputLibrary()); } |