diff options
author | 2016-01-28 21:30:14 +0000 | |
---|---|---|
committer | 2016-01-29 14:41:15 +0000 | |
commit | e379f28f464faacc4db21f4fed3a48fa6d4d23f0 (patch) | |
tree | 8145af038e2e21c04834eb4e29b0a71c986000c7 /src | |
parent | 478bf1d5b9ec5f23f75de1ad30fd9571991e37f1 (diff) |
Include .dwp file in the runfiles for cc_test when building with Fission.
--
MOS_MIGRATED_REVID=113295790
Diffstat (limited to 'src')
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", |