aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-01-24 10:48:33 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-24 10:50:34 -0800
commitaa8ce5653f92473b331e500a3614245dae38dfc4 (patch)
tree714bd5beb18a8d8f51b4ca52cc58375d1f3733f3 /src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
parent667e85dcc749adcd8003e64a56d45b22dfbf4856 (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.java56
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();
+ }
+ }
}