diff options
author | hlopko <hlopko@google.com> | 2018-03-22 07:10:09 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-22 07:11:36 -0700 |
commit | d01e8ad9acb2f30e91a653d3af00bd0302c44ad5 (patch) | |
tree | 23e1d70fef1e458d7844b269bfae4fdd4a41c43c | |
parent | 5655c7fab3a5cdcd149db66d00a9ccda3702de59 (diff) |
Assume toolchain supportsDynamicLinker from presence of "dynamic_linking_mode" feature
Toolchains no longer have to provide linking_mode_flags { mode: DYNAMIC } to
state that they support dynamic linking mode. It is enough to provide a feature.
This is part of ongoing work to get rid of linking_mode_flags from the
CROSSTOOL.
This is rollforward of https://github.com/bazelbuild/bazel/commit/3dab964407a2f1e12feb439d8507079bc06cb769.
RELNOTES: None.
PiperOrigin-RevId: 190059334
5 files changed, 57 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java index 52bbd59450..03a9f9d674 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java @@ -320,7 +320,11 @@ public final class CppToolchainInfo { this.supportsFission = supportsFission; this.supportsStartEndLib = supportsStartEndLib; this.supportsEmbeddedRuntimes = supportsEmbeddedRuntimes; - this.supportsDynamicLinker = supportsDynamicLinker; + this.supportsDynamicLinker = + supportsDynamicLinker + || toolchainFeatures + .getActivatableNames() + .contains(CppRuleClasses.DYNAMIC_LINKING_MODE); this.supportsInterfaceSharedObjects = supportsInterfaceSharedObjects; this.supportsGoldLinker = supportsGoldLinker; this.toolchainNeedsPic = toolchainNeedsPic; diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL b/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL index d6593722cb..eca8122d38 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL +++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/MOCK_CROSSTOOL @@ -310,8 +310,7 @@ toolchain { } toolchain { - toolchain_identifier: "local_darwin-no-dyn-linker" - + toolchain_identifier: "darwin-no-dyn-linker" host_system_name: "local" target_system_name: "local" target_cpu: "darwin" @@ -572,6 +571,7 @@ toolchain { } toolchain { + toolchain_identifier: "windows_msys64-no-dyn-linker" abi_version: "local" abi_libc_version: "local" builtin_sysroot: "" @@ -581,7 +581,6 @@ toolchain { target_libc: "local" target_cpu: "x64_windows" target_system_name: "local" - toolchain_identifier: "local_windows_msys64-no-dyn-linker" tool_path { name: "ar" path: "C:/tools/msys64/usr/bin/ar" } tool_path { name: "compat-ld" path: "C:/tools/msys64/usr/bin/ld" } diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java index 5010faf11d..f9b07d209d 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java @@ -85,11 +85,14 @@ public final class BazelMockCcSupport extends MockCcSupport { " toolchains = {", " 'local|compiler': ':cc-compiler-local',", " 'k8|compiler': ':cc-compiler-k8',", + " 'k8|compiler_no_dyn_linker': ':cc-no-dyn-linker-k8',", " 'piii|compiler': ':cc-compiler-piii',", " 'darwin|compiler': ':cc-compiler-darwin',", + " 'darwin|compiler_no_dyn_linker': ':cc-no-dyn-linker-darwin',", " 'ios_x86_64|compiler': ':cc-compiler-ios_x86_64',", " 'armeabi-v7a|compiler': ':cc-compiler-armeabi-v7a',", " 'x64_windows|windows_msys64': ':cc-compiler-x64_windows',", + " 'x64_windows|compiler_no_dyn_linker': ':cc-no-dyn-linker-x64_windows',", " 'ppc|compiler': ':cc-compiler-ppc',", " })", "cc_toolchain(name = 'cc-compiler-k8', all_files = ':empty', compiler_files = ':empty',", @@ -99,6 +102,13 @@ public final class BazelMockCcSupport extends MockCcSupport { " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", + "cc_toolchain(name = 'cc-no-dyn-linker-k8', all_files = ':empty', ", + " compiler_files = ':empty', cpu = 'k8', compiler = 'compiler_no_dyn_linker', ", + " libc = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " ar_files = ':empty', as_files = ':empty', linker_files = ':empty',", + " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", + " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", + ")", "cc_toolchain(name = 'cc-compiler-ppc', all_files = ':empty', compiler_files = ':empty',", " cpu = 'ppc', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", " dynamic_runtime_libs = [':empty'], ", @@ -122,6 +132,14 @@ public final class BazelMockCcSupport extends MockCcSupport { " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", + "cc_toolchain(name = 'cc-no-dyn-linker-darwin', all_files = ':empty', ", + " compiler_files = ':empty',", + " cpu = 'darwin', compiler = 'compiler_no_dyn_linker', libc = 'macosx', " , + " dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ", + " ar_files = ':empty', as_files = ':empty', linker_files = ':empty',", + " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", + " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", + ")", "cc_toolchain(name = 'cc-compiler-ios_x86_64', all_files = ':empty', ", " compiler_files = ':empty',", " cpu = 'ios_x86_64', compiler = 'compiler', libc = 'local', dwp_files = ':empty',", @@ -148,6 +166,15 @@ public final class BazelMockCcSupport extends MockCcSupport { " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", ")", + "cc_toolchain(name = 'cc-no-dyn-linker-x64_windows', all_files = ':empty', ", + " compiler_files = ':empty',", + " cpu = 'x64_windows', compiler = 'compiler_no_dyn_linker', libc = 'local', ", + " dwp_files = ':empty',", + " dynamic_runtime_libs = [':empty'], ", + " ar_files = ':empty', as_files = ':empty', linker_files = ':empty',", + " module_map = 'crosstool.cppmap', supports_header_parsing = 1,", + " objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',", + ")", "filegroup(", " name = 'interface_library_builder',", " srcs = ['build_interface_so'],", diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java index d55d3b53a6..81c86f9d9a 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.rules.cpp.CppCompileAction; +import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.vfs.PathFragment; @@ -128,6 +129,9 @@ public abstract class MockCcSupport { /** This feature will prevent bazel from patching the crosstool. */ public static final String NO_LEGACY_FEATURES_FEATURE = "feature { name: 'no_legacy_features' }"; + public static final String DYNAMIC_LINKING_MODE_FEATURE = + "feature { name: '" + CppRuleClasses.DYNAMIC_LINKING_MODE + "'}"; + /** Feature expected by the C++ rules when pic build is requested */ public static final String PIC_FEATURE = "" diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java index c4afac299f..f2c7e9c3d4 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java @@ -912,4 +912,23 @@ public class CcToolchainTest extends BuildViewTestCase { (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); assertThat(toolchainProvider.getAbi()).isEqualTo("banana"); } + + @Test + public void testSupportsDynamicLinkerCheckFeatures() throws Exception { + writeDummyCcToolchain(); + + getAnalysisMock() + .ccSupport() + .setupCrosstool(mockToolsConfig, MockCcSupport.DYNAMIC_LINKING_MODE_FEATURE); + + // To make sure the toolchain doesn't define linking_mode_flags { mode: DYNAMIC } as that would + // also result in supportsDynamicLinker returning true + useConfiguration("--compiler=compiler_no_dyn_linker"); + + ConfiguredTarget target = getConfiguredTarget("//a:b"); + CcToolchainProvider toolchainProvider = + (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + + assertThat(toolchainProvider.supportsDynamicLinker()).isTrue(); + } } |