aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/py
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2017-09-26 10:30:44 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-09-26 12:31:23 +0200
commit1edcd0f32d85686c5616a997b988479d3891d525 (patch)
tree58b079ea08a3983478303cebababb35979e90ef4 /src/test/py
parent56b12b9e60dbfb10b5f114093023054d368e429d (diff)
Windows: Add static_link_msvcrt and related features
This is to replace using USE_DYNAMIC_CRT env variable to configure msvcrt linking in CROSSTOOL. If user applies static_link_msvcrt feature to a specific target, Bazel will choose the correct options for statically linking msvcrt. If static_link_msvcrt is not specified, Bazel uses options for dynamically linking msvcrt by default. https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx Change-Id: Ia078dfb528de9ffdd8a11d392db9eb3f34463b09 PiperOrigin-RevId: 170021927
Diffstat (limited to 'src/test/py')
-rw-r--r--src/test/py/bazel/bazel_windows_dynamic_link_test.py50
1 files changed, 47 insertions, 3 deletions
diff --git a/src/test/py/bazel/bazel_windows_dynamic_link_test.py b/src/test/py/bazel/bazel_windows_dynamic_link_test.py
index e6652ff157..2a148b4f13 100644
--- a/src/test/py/bazel/bazel_windows_dynamic_link_test.py
+++ b/src/test/py/bazel/bazel_windows_dynamic_link_test.py
@@ -217,9 +217,7 @@ class BazelWindowsDynamicLinkTest(test_base.TestBase):
])
bazel_bin = self.getBazelInfo('bazel-bin')
- # We dynamically link to msvcrt by setting USE_DYNAMIC_CRT=1
- exit_code, _, stderr = self.RunBazel(
- ['build', '//main:main', '--action_env=USE_DYNAMIC_CRT=1'])
+ exit_code, _, stderr = self.RunBazel(['build', '//main:main'])
self.AssertExitCode(exit_code, 0, stderr)
# Test if libA.so and libB.so are copied to the directory of main.exe
@@ -289,6 +287,52 @@ class BazelWindowsDynamicLinkTest(test_base.TestBase):
'actions:',
''.join(stderr))
+ def testDynamicLinkingMSVCRT(self):
+ self.createProjectFiles()
+
+ # By default, it should link to msvcrt dynamically.
+ exit_code, _, stderr = self.RunBazel(
+ ['build', '//:A', '--output_groups=dynamic_library', '-s'])
+ self.AssertExitCode(exit_code, 0, stderr)
+ self.assertIn('/MD', ''.join(stderr))
+ self.assertIn('/DEFAULTLIB:msvcrt.lib', ''.join(stderr))
+ self.assertNotIn('/MT', ''.join(stderr))
+ self.assertNotIn('/DEFAULTLIB:libcmt.lib', ''.join(stderr))
+
+ # Test build in debug mode.
+ exit_code, _, stderr = self.RunBazel(
+ ['build', '-c', 'dbg', '//:A', '--output_groups=dynamic_library', '-s'])
+ self.AssertExitCode(exit_code, 0, stderr)
+ self.assertIn('/MDd', ''.join(stderr))
+ self.assertIn('/DEFAULTLIB:msvcrtd.lib', ''.join(stderr))
+ self.assertNotIn('/MTd', ''.join(stderr))
+ self.assertNotIn('/DEFAULTLIB:libcmtd.lib', ''.join(stderr))
+
+ def testStaticLinkingMSVCRT(self):
+ self.createProjectFiles()
+
+ # With static_link_msvcrt feature, it should link to msvcrt statically.
+ exit_code, _, stderr = self.RunBazel([
+ 'build', '//:A', '--output_groups=dynamic_library',
+ '--features=static_link_msvcrt', '-s'
+ ])
+ self.AssertExitCode(exit_code, 0, stderr)
+ self.assertNotIn('/MD', ''.join(stderr))
+ self.assertNotIn('/DEFAULTLIB:msvcrt.lib', ''.join(stderr))
+ self.assertIn('/MT', ''.join(stderr))
+ self.assertIn('/DEFAULTLIB:libcmt.lib', ''.join(stderr))
+
+ # Test build in debug mode.
+ exit_code, _, stderr = self.RunBazel([
+ 'build', '-c', 'dbg', '//:A', '--output_groups=dynamic_library',
+ '--features=static_link_msvcrt', '-s'
+ ])
+ self.AssertExitCode(exit_code, 0, stderr)
+ self.assertNotIn('/MDd', ''.join(stderr))
+ self.assertNotIn('/DEFAULTLIB:msvcrtd.lib', ''.join(stderr))
+ self.assertIn('/MTd', ''.join(stderr))
+ self.assertIn('/DEFAULTLIB:libcmtd.lib', ''.join(stderr))
+
if __name__ == '__main__':
unittest.main()