aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2018-02-02 02:19:58 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-02 02:22:00 -0800
commit6d24ca921bb987155c201bbcfae641a6180c23d2 (patch)
tree2ebd7fb5f1e9e88b5772dd826540efa52ddf9454 /src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
parent46cd4fd2e120fe3c5f08f44422bc5d3ddaecde42 (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.java52
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();
+ }
+ }
}