diff options
author | Marcel Hlopko <hlopko@google.com> | 2017-03-27 10:08:40 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2017-03-27 11:38:38 +0000 |
commit | 7d3a0880a8129dfdb987d805af7475b2b035bdd1 (patch) | |
tree | e309e71801ff42d911a7b095e9070ba870ee8e82 | |
parent | 704eb86221174573b3548fcf61b39991896eb8ab (diff) |
Move -Wl,--gdb-index into crosstool
--
PiperOrigin-RevId: 151302418
MOS_MIGRATED_REVID=151302418
4 files changed, 45 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index ac15e13c76..532ad5ed58 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -131,6 +131,12 @@ public class CppLinkActionBuilder { public static final String IS_CC_TEST_LINK_ACTION_VARIABLE = "is_cc_test_link_action"; /** + * A build variable whose presence indicates that files were compiled with fission (debug + * info is in .dwo files instead of .o files and linker needs to know). + */ + public static final String IS_USING_FISSION_VARIABLE = "is_using_fission"; + + /** * A (temporary) build variable whose presence indicates that this action is not a cc_test linking * action. */ @@ -1346,6 +1352,10 @@ public class CppLinkActionBuilder { buildVariables.addStringVariable(STRIP_DEBUG_SYMBOLS_VARIABLE, ""); } + if (getLinkType().staticness().equals(Staticness.DYNAMIC) && cppConfiguration.useFission()) { + buildVariables.addStringVariable(IS_USING_FISSION_VARIABLE, ""); + } + if (useTestOnlyFlags()) { buildVariables.addStringVariable(IS_CC_TEST_LINK_ACTION_VARIABLE, ""); } else { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java index 14a053bb50..7a1c6da7b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionConfigs.java @@ -72,6 +72,7 @@ public class CppLinkActionConfigs { " implies: 'force_pic_flags'", " implies: 'legacy_link_flags'", " implies: 'linker_param_file'", + " implies: 'fission_support'", "}", "action_config {", " config_name: 'c++-link-dynamic-library'", @@ -91,6 +92,7 @@ public class CppLinkActionConfigs { " implies: 'libraries_to_link'", " implies: 'legacy_link_flags'", " implies: 'linker_param_file'", + " implies: 'fission_support'", "}", "action_config {", " config_name: 'c++-link-static-library'", @@ -450,6 +452,18 @@ public class CppLinkActionConfigs { " }", "}", "feature {", + " name: 'fission_support'", + " flag_set {", + " action: 'c++-link-executable'", + " action: 'c++-link-dynamic-library'", + " action: 'c++-link-interface-dynamic-library'", + " flag_group {", + " expand_if_all_available: 'is_using_fission'", + " flag: '-Wl,--gdb-index'", + " }", + " }", + "}", + "feature {", " name: 'strip_debug_symbols'", " flag_set {", " action: 'c++-link-executable'", diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index 82d2e26bc7..bbb3b4ddb8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java @@ -364,11 +364,6 @@ public final class LinkCommandLine extends CommandLine { Iterables.removeIf(toolchainFlags, Predicates.equalTo("-pie")); } - // Fission mode: debug info is in .dwo files instead of .o files. Inform the linker of this. - if (linkTargetType.staticness() == Staticness.DYNAMIC && cppConfiguration.useFission()) { - toolchainFlags.add("-Wl,--gdb-index"); - } - return ImmutableList.copyOf(toolchainFlags); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java index ba5ef20507..004347cdc9 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java @@ -291,4 +291,25 @@ public class LinkBuildVariablesTest extends BuildViewTestCase { assertThat(variables.isAvailable(CppLinkActionBuilder.STRIP_DEBUG_SYMBOLS_VARIABLE)) .isEqualTo(isEnabled); } + + @Test + public void testIsUsingFissionVariable() throws Exception { + scratch.file("x/BUILD", + "cc_binary(name = 'foo', srcs = ['foo.cc'])"); + scratch.file("x/foo.cc"); + + AnalysisMock.get() + .ccSupport() + .setupCrosstool(mockToolsConfig, "supports_fission: true"); + + useConfiguration("--fission=no"); + ConfiguredTarget target = getConfiguredTarget("//x:foo"); + Variables variables = getLinkBuildVariables(target, LinkTargetType.EXECUTABLE); + assertThat(variables.isAvailable(CppLinkActionBuilder.IS_USING_FISSION_VARIABLE)).isFalse(); + + useConfiguration("--fission=yes"); + ConfiguredTarget fissionTarget = getConfiguredTarget("//x:foo"); + Variables fissionVariables = getLinkBuildVariables(fissionTarget, LinkTargetType.EXECUTABLE); + assertThat(fissionVariables.isAvailable(CppLinkActionBuilder.IS_USING_FISSION_VARIABLE)).isTrue(); + } } |