aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-01-28 21:30:14 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-01-29 14:41:15 +0000
commite379f28f464faacc4db21f4fed3a48fa6d4d23f0 (patch)
tree8145af038e2e21c04834eb4e29b0a71c986000c7 /src
parent478bf1d5b9ec5f23f75de1ad30fd9571991e37f1 (diff)
Include .dwp file in the runfiles for cc_test when building with Fission.
-- MOS_MIGRATED_REVID=113295790
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonConfiguredTargetTest.java18
4 files changed, 42 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 4e79ea0363..ebcba22a0b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -271,6 +271,14 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
Artifact explicitDwpFile = dwpFile;
if (!cppConfiguration.useFission()) {
explicitDwpFile = null;
+ } else {
+ // For cc_test rules, include the dwp in the runfiles if Fission is enabled and the test was
+ // built statically.
+ if (TargetUtils.isTestRule(ruleContext.getRule())
+ && linkStaticness == LinkStaticness.FULLY_STATIC
+ && cppConfiguration.shouldBuildTestDwp()) {
+ filesToBuild = NestedSetBuilder.fromNestedSet(filesToBuild).add(dwpFile).build();
+ }
}
// TODO(bazel-team): Do we need to put original shared libraries (along with
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 71045e4fd0..61713958dc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -1526,7 +1526,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
public boolean skipStaticOutputs() {
return cppOptions.skipStaticOutputs;
}
-
+
/**
* Returns whether we are processing headers in dependencies of built C++ targets.
*/
@@ -1542,6 +1542,14 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
}
/**
+ * Returns true if Fission is enabled for this build and the user requested automatic building
+ * of .dwp files for C++ test targets.
+ */
+ public boolean shouldBuildTestDwp() {
+ return useFission() && cppOptions.buildTestDwp;
+ }
+
+ /**
* Returns true if all C++ compilations should produce position-independent code, links should
* produce position-independent executables, and dependencies with equivalent pre-built pic and
* nopic versions should apply the pic versions. Returns false if default settings should be
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 683e559a46..12f230f2b9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -211,6 +211,13 @@ public class CppOptions extends FragmentOptions {
+ " to enable all modes and 'no' to disable all modes.")
public List<CompilationMode> fissionModes;
+ @Option(name = "build_test_dwp",
+ defaultValue = "false",
+ category = "semantics",
+ help = "If enabled, when building C++ tests statically and with fission the .dwp file "
+ + " for the test binary will be automatically built as well.")
+ public boolean buildTestDwp;
+
@Option(name = "dynamic_mode",
defaultValue = "default",
converter = DynamicModeConverter.class,
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonConfiguredTargetTest.java
index 7e2c98c5d6..ecd2847d40 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonConfiguredTargetTest.java
@@ -472,6 +472,24 @@ public class CcCommonConfiguredTargetTest extends BuildViewTestCase {
}
@Test
+ public void testCcTestBuiltWithFissionHasDwp() throws Exception {
+ // Tests that cc_tests built statically and with Fission will have the .dwp file
+ // in their runfiles.
+
+ useConfiguration("--build_test_dwp", "--dynamic_mode=off", "--linkopt=-static",
+ "--fission=yes");
+ ConfiguredTarget target =
+ scratchConfiguredTarget(
+ "mypackage",
+ "mytest",
+ "cc_test(name = 'mytest', ",
+ " srcs = ['mytest.cc'])");
+
+ Iterable<Artifact> runfiles = collectRunfiles(target);
+ assertThat(baseArtifactNames(runfiles)).contains("mytest.dwp");
+ }
+
+ @Test
public void testCcLibraryBadIncludesWarnedAndIgnored() throws Exception {
checkWarning(
"badincludes",