diff options
author | 2018-03-21 04:42:02 -0700 | |
---|---|---|
committer | 2018-03-21 04:44:05 -0700 | |
commit | 3dab964407a2f1e12feb439d8507079bc06cb769 (patch) | |
tree | 5defa831bb6e2669bf7ca1308092a8974ed5cc33 /src/test | |
parent | 755d3bec0e7136c34eb9be424c6e1b9a59fbf56c (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.
RELNOTES: None.
PiperOrigin-RevId: 189890583
Diffstat (limited to 'src/test')
3 files changed, 31 insertions, 0 deletions
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..eb613ba2df 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,6 +85,7 @@ 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-compiler-k8',", " 'piii|compiler': ':cc-compiler-piii',", " 'darwin|compiler': ':cc-compiler-darwin',", " 'ios_x86_64|compiler': ':cc-compiler-ios_x86_64',", @@ -99,6 +100,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-compiler-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'], ", 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..cfc288ab48 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", "--cpu=k8"); + + ConfiguredTarget target = getConfiguredTarget("//a:b"); + CcToolchainProvider toolchainProvider = + (CcToolchainProvider) target.get(ToolchainInfo.PROVIDER); + + assertThat(toolchainProvider.supportsDynamicLinker()).isTrue(); + } } |