diff options
author | 2018-02-02 02:19:58 -0800 | |
---|---|---|
committer | 2018-02-02 02:22:00 -0800 | |
commit | 6d24ca921bb987155c201bbcfae641a6180c23d2 (patch) | |
tree | 2ebd7fb5f1e9e88b5772dd826540efa52ddf9454 /src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java | |
parent | 46cd4fd2e120fe3c5f08f44422bc5d3ddaecde42 (diff) |
Change how the libraries_to_link are expanded for archiver
This makes object_file_group work correctly for archiving (So far
object_file_group was only possible for linking, but with the introduction of
tree artifact support, it can appear also for archiving).
RELNOTES: Fix how libraries_to_link are expanded in the archiver command line.
PiperOrigin-RevId: 184258745
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java index 36c2daa8ae..a6bda43c08 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java @@ -728,4 +728,56 @@ public class CppLinkActionTest extends BuildViewTestCase { verifyArguments( linkAction.getCommandLine(expander), treeFileArtifactsPaths, treeArtifactsPaths); } + + @Test + public void testStaticLinking() throws Exception { + ImmutableList<LinkTargetType> targetTypesToTest = + ImmutableList.of( + LinkTargetType.STATIC_LIBRARY, + LinkTargetType.PIC_STATIC_LIBRARY, + LinkTargetType.ALWAYS_LINK_STATIC_LIBRARY, + LinkTargetType.ALWAYS_LINK_PIC_STATIC_LIBRARY); + + Artifact testTreeArtifact = createTreeArtifact("library_directory"); + + TreeFileArtifact library0 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library0.o"); + TreeFileArtifact library1 = ActionInputHelper.treeFileArtifact(testTreeArtifact, "library1.o"); + + ArtifactExpander expander = + (artifact, output) -> { + if (artifact.equals(testTreeArtifact)) { + output.add(library0); + output.add(library1); + } + }; + + Artifact objectFile = scratchArtifact("objectFile.o"); + + for (LinkTargetType linkType : targetTypesToTest) { + + scratch.deleteFile("dummyRuleContext/BUILD"); + Artifact output = scratchArtifact("output." + linkType.getExtension()); + + CppLinkActionBuilder builder = + createLinkBuilder( + linkType, + output.getExecPathString(), + ImmutableList.<Artifact>of(), + ImmutableList.<LibraryToLink>of(), + getMockFeatureConfiguration()) + .setLibraryIdentifier("foo") + .addObjectFiles(ImmutableList.of(testTreeArtifact)) + .addObjectFile(objectFile) + // Makes sure this doesn't use a params file. + .setFake(true); + + CppLinkAction linkAction = builder.build(); + assertThat(linkAction.getCommandLine(expander)) + .containsAllOf( + library0.getExecPathString(), + library1.getExecPathString(), + objectFile.getExecPathString()) + .inOrder(); + } + } } |