Index: build/vs_toolchain.py |
diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py |
index d2b819793d3f3b4527836b247df3272cd8c3b9e0..b785fc9322f2532d57238213b3f25c7251250926 100755 |
--- a/build/vs_toolchain.py |
+++ b/build/vs_toolchain.py |
@@ -209,7 +209,7 @@ def _CopyRuntime2013(target_dir, source_dir, dll_pattern): |
_CopyRuntimeImpl(target, source) |
-def _CopyUCRTRuntime(target_dir, source_dir, dll_pattern, suffix): |
+def _CopyUCRTRuntime(target_dir, source_dir, target_cpu, dll_pattern, suffix): |
"""Copy both the msvcp and vccorlib runtime DLLs, only if the target doesn't |
exist, but the target directory does exist.""" |
for file_part in ('msvcp', 'vccorlib', 'vcruntime'): |
@@ -217,14 +217,16 @@ def _CopyUCRTRuntime(target_dir, source_dir, dll_pattern, suffix): |
target = os.path.join(target_dir, dll) |
source = os.path.join(source_dir, dll) |
_CopyRuntimeImpl(target, source) |
- # OS installs of Visual Studio (and all installs of Windows 10) put the |
- # universal CRT files in c:\Windows\System32\downlevel - look for them there |
- # to support DEPOT_TOOLS_WIN_TOOLCHAIN=0. |
- if os.path.exists(os.path.join(source_dir, 'downlevel')): |
- ucrt_src_glob = os.path.join(source_dir, 'downlevel', 'api-ms-win-*.dll') |
- else: |
- ucrt_src_glob = os.path.join(source_dir, 'api-ms-win-*.dll') |
- ucrt_files = glob.glob(ucrt_src_glob) |
+ # Copy the UCRT files needed by VS 2015 from the Windows SDK. This location |
+ # includes the api-ms-win-crt-*.dll files that are not found in the Windows |
+ # directory. These files are needed for component builds. |
+ # If WINDOWSSDKDIR is not set use the default SDK path. This will be the case |
+ # when DEPOT_TOOLS_WIN_TOOLCHAIN=0 and vcvarsall.bat has not been run. |
+ win_sdk_dir = os.path.normpath( |
+ os.environ.get('WINDOWSSDKDIR', |
+ 'C:\\Program Files (x86)\\Windows Kits\\10')) |
+ ucrt_dll_dirs = os.path.join(win_sdk_dir, r'Redist\ucrt\DLLs', target_cpu) |
+ ucrt_files = glob.glob(os.path.join(ucrt_dll_dirs, 'api-ms-win-*.dll')) |
assert len(ucrt_files) > 0 |
for ucrt_src_file in ucrt_files: |
file_part = os.path.basename(ucrt_src_file) |
@@ -240,7 +242,8 @@ def _CopyRuntime(target_dir, source_dir, target_cpu, debug): |
suffix = "d.dll" if debug else ".dll" |
if GetVisualStudioVersion() in ['2015', '2017']: |
# VS 2017 uses the same CRT DLLs as VS 2015. |
- _CopyUCRTRuntime(target_dir, source_dir, '%s140' + suffix, suffix) |
+ _CopyUCRTRuntime(target_dir, source_dir, target_cpu, '%s140' + suffix, |
+ suffix) |
else: |
_CopyRuntime2013(target_dir, source_dir, 'msvc%s120' + suffix) |