diff options
author | 2018-01-24 10:48:33 -0800 | |
---|---|---|
committer | 2018-01-24 10:50:34 -0800 | |
commit | aa8ce5653f92473b331e500a3614245dae38dfc4 (patch) | |
tree | 714bd5beb18a8d8f51b4ca52cc58375d1f3733f3 /src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java | |
parent | 667e85dcc749adcd8003e64a56d45b22dfbf4856 (diff) |
RELNOTES: Fix how libraries to link is specified to archiver actions.
start-lib/end-lib should not be passed to ar. Fix how the libraries to link are passed to ar by not using the generic feature "libraries_to_link"
PiperOrigin-RevId: 183107904
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 | 56 |
1 files changed, 56 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..da85bfdd2f 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,60 @@ 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 staticLibrary = scratchArtifact("staticLibrary." + linkType.getExtension()); + 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) + .addLibrary( + LinkerInputs.precompiledLibraryToLink(staticLibrary, linkType.getLinkerOutput())) + // 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(), + staticLibrary.getExecPathString()) + .inOrder(); + } + } } |