Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import glob | 6 import glob |
| 7 import json | 7 import json |
| 8 import os | 8 import os |
| 9 import pipes | 9 import pipes |
| 10 import platform | 10 import platform |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 returns the location of the VS runtime DLLs so they can be copied into | 30 returns the location of the VS runtime DLLs so they can be copied into |
| 31 the output directory after gyp generation. | 31 the output directory after gyp generation. |
| 32 | 32 |
| 33 Return value is [x64path, x86path] or None | 33 Return value is [x64path, x86path] or None |
| 34 """ | 34 """ |
| 35 vs_runtime_dll_dirs = None | 35 vs_runtime_dll_dirs = None |
| 36 depot_tools_win_toolchain = \ | 36 depot_tools_win_toolchain = \ |
| 37 bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) | 37 bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) |
| 38 # When running on a non-Windows host, only do this if the SDK has explicitly | 38 # When running on a non-Windows host, only do this if the SDK has explicitly |
| 39 # been downloaded before (in which case json_data_file will exist). | 39 # been downloaded before (in which case json_data_file will exist). |
| 40 if ((sys.platform in ('win32', 'cygwin') or os.path.exists(json_data_file)) | 40 if (depot_tools_win_toolchain and (sys.platform in ('win32', 'cygwin') |
| 41 and depot_tools_win_toolchain): | 41 or os.path.exists(json_data_file))): |
| 42 if ShouldUpdateToolchain(): | 42 if ShouldUpdateToolchain(): |
| 43 Update() | 43 Update() |
| 44 with open(json_data_file, 'r') as tempf: | 44 with open(json_data_file, 'r') as tempf: |
| 45 toolchain_data = json.load(tempf) | 45 toolchain_data = json.load(tempf) |
| 46 | 46 |
| 47 toolchain = toolchain_data['path'] | 47 toolchain = toolchain_data['path'] |
| 48 version = toolchain_data['version'] | 48 version = toolchain_data['version'] |
| 49 win_sdk = toolchain_data.get('win_sdk') | 49 win_sdk = toolchain_data.get('win_sdk') |
| 50 if not win_sdk: | 50 if not win_sdk: |
| 51 win_sdk = toolchain_data['win8sdk'] | 51 win_sdk = toolchain_data['win8sdk'] |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 65 | 65 |
| 66 # We need to make sure windows_sdk_path is set to the automated | 66 # We need to make sure windows_sdk_path is set to the automated |
| 67 # toolchain values in GYP_DEFINES, but don't want to override any | 67 # toolchain values in GYP_DEFINES, but don't want to override any |
| 68 # otheroptions.express | 68 # otheroptions.express |
| 69 # values there. | 69 # values there. |
| 70 gyp_defines_dict = gyp.NameValueListToDict(gyp.ShlexEnv('GYP_DEFINES')) | 70 gyp_defines_dict = gyp.NameValueListToDict(gyp.ShlexEnv('GYP_DEFINES')) |
| 71 gyp_defines_dict['windows_sdk_path'] = win_sdk | 71 gyp_defines_dict['windows_sdk_path'] = win_sdk |
| 72 os.environ['GYP_DEFINES'] = ' '.join('%s=%s' % (k, pipes.quote(str(v))) | 72 os.environ['GYP_DEFINES'] = ' '.join('%s=%s' % (k, pipes.quote(str(v))) |
| 73 for k, v in gyp_defines_dict.iteritems()) | 73 for k, v in gyp_defines_dict.iteritems()) |
| 74 | 74 |
| 75 os.environ['WINDOWSSDKDIR'] = win_sdk | 75 os.environ['WindowsSdkDir'] = win_sdk |
| 76 os.environ['WDK_DIR'] = wdk | 76 os.environ['WDK_DIR'] = wdk |
| 77 # Include the VS runtime in the PATH in case it's not machine-installed. | 77 # Include the VS runtime in the PATH in case it's not machine-installed. |
| 78 runtime_path = os.path.pathsep.join(vs_runtime_dll_dirs) | 78 runtime_path = os.path.pathsep.join(vs_runtime_dll_dirs) |
| 79 os.environ['PATH'] = runtime_path + os.path.pathsep + os.environ['PATH'] | 79 os.environ['PATH'] = runtime_path + os.path.pathsep + os.environ['PATH'] |
| 80 elif sys.platform == 'win32' and not depot_tools_win_toolchain: | 80 elif sys.platform == 'win32' and not depot_tools_win_toolchain: |
| 81 if not 'GYP_MSVS_OVERRIDE_PATH' in os.environ: | 81 GetVisualStudioVersion() |
| 82 os.environ['GYP_MSVS_OVERRIDE_PATH'] = DetectVisualStudioPath() | 82 DetectVisualStudioPath() |
| 83 if not 'GYP_MSVS_VERSION' in os.environ: | |
| 84 os.environ['GYP_MSVS_VERSION'] = GetVisualStudioVersion() | |
| 85 | 83 |
| 86 # When using an installed toolchain these files aren't needed in the output | 84 # When using an installed toolchain these files aren't needed in the output |
| 87 # directory in order to run binaries locally, but they are needed in order | 85 # directory in order to run binaries locally, but they are needed in order |
| 88 # to create isolates or the mini_installer. Copying them to the output | 86 # to create isolates or the mini_installer. Copying them to the output |
| 89 # directory ensures that they are available when needed. | 87 # directory ensures that they are available when needed. |
| 90 bitness = platform.architecture()[0] | 88 bitness = platform.architecture()[0] |
| 91 # When running 64-bit python the x64 DLLs will be in System32 | 89 # When running 64-bit python the x64 DLLs will be in System32 |
| 92 x64_path = 'System32' if bitness == '64bit' else 'Sysnative' | 90 x64_path = 'System32' if bitness == '64bit' else 'Sysnative' |
| 93 x64_path = os.path.join(r'C:\Windows', x64_path) | 91 x64_path = os.path.join(r'C:\Windows', x64_path) |
| 94 vs_runtime_dll_dirs = [x64_path, r'C:\Windows\SysWOW64'] | 92 vs_runtime_dll_dirs = [x64_path, r'C:\Windows\SysWOW64'] |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 115 except WindowsError: | 113 except WindowsError: |
| 116 return None | 114 return None |
| 117 | 115 |
| 118 | 116 |
| 119 def _RegistryGetValue(key, value): | 117 def _RegistryGetValue(key, value): |
| 120 try: | 118 try: |
| 121 return _RegistryGetValueUsingWinReg(key, value) | 119 return _RegistryGetValueUsingWinReg(key, value) |
| 122 except ImportError: | 120 except ImportError: |
| 123 raise Exception('The python library _winreg not found.') | 121 raise Exception('The python library _winreg not found.') |
| 124 | 122 |
| 125 | 123 year_to_version = { |
| 124 '2013': '12.0', | |
| 125 '2015': '14.0', | |
| 126 '2017': '15.0', | |
| 127 } | |
| 126 def GetVisualStudioVersion(): | 128 def GetVisualStudioVersion(): |
| 127 """Return GYP_MSVS_VERSION of Visual Studio. | 129 """Return GYP_MSVS_VERSION of Visual Studio. |
| 128 """ | 130 """ |
| 129 return os.environ.get('GYP_MSVS_VERSION', CURRENT_DEFAULT_TOOLCHAIN_VERSION) | 131 if 'VisualStudioVersion' not in os.environ: |
| 132 raise ValueError('Please run from within a VS console (with ENV variables)') | |
| 133 | |
| 134 ver = os.environ['VisualStudioVersion'] | |
| 135 year = year_to_version.keys()[year_to_version.values().index(ver)] | |
| 136 | |
| 137 if year not in year_to_version: | |
| 138 years = ', '.join(year_to_version.keys()) | |
| 139 raise ValueError('Visual Studio version %s not supported.' | |
| 140 'Supported versions are: %s' % (year, years)) | |
| 141 | |
| 142 if 'GYP_MSVS_VERSION' in os.environ: | |
| 143 wanted = os.environ.get('GYP_MSVS_VERSION') | |
| 144 if wanted != year: | |
| 145 raise ValueError('GYP_MSVS_VERSION does not match VS console version' | |
| 146 '%s != %s(%s)' % (wanted, year, ver)) | |
| 147 else: | |
| 148 os.environ['GYP_MSVS_VERSION'] = year | |
| 149 | |
| 150 return year | |
| 130 | 151 |
| 131 | 152 |
| 132 def DetectVisualStudioPath(): | 153 def DetectVisualStudioPath(): |
| 133 """Return path to the GYP_MSVS_VERSION of Visual Studio. | 154 """Return path to the GYP_MSVS_VERSION of Visual Studio. |
| 134 """ | 155 """ |
| 135 | 156 |
| 136 # Note that this code is used from | 157 # Note that this code is used from |
| 137 # build/toolchain/win/setup_toolchain.py as well. | 158 # build/toolchain/win/setup_toolchain.py as well. |
| 138 version_as_year = GetVisualStudioVersion() | 159 GetVisualStudioVersion() |
| 139 year_to_version = { | 160 if 'VSINSTALLDIR' not in os.environ: |
| 140 '2013': '12.0', | 161 raise ValueError('Please run from within a VS console (with ENV variables)') |
| 141 '2015': '14.0', | 162 if 'GYP_MSVS_OVERRIDE_PATH' in os.environ: |
| 142 '2017': '15.0', | 163 path = os.environ['GYP_MSVS_OVERRIDE_PATH'] |
| 143 } | |
| 144 if version_as_year not in year_to_version: | |
| 145 raise Exception(('Visual Studio version %s (from GYP_MSVS_VERSION)' | |
| 146 ' not supported. Supported versions are: %s') % ( | |
| 147 version_as_year, ', '.join(year_to_version.keys()))) | |
| 148 version = year_to_version[version_as_year] | |
| 149 if version_as_year == '2017': | |
| 150 # The VC++ 2017 install location needs to be located using COM instead of | |
| 151 # the registry. For details see: | |
| 152 # https://blogs.msdn.microsoft.com/heaths/2016/09/15/changes-to-visual-studi o-15-setup/ | |
| 153 # For now we use a hardcoded default with an environment variable override. | |
| 154 path = r'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional' | |
| 155 path = os.environ.get('vs2017_install', path) | |
| 156 if os.path.exists(path): | |
| 157 return path | |
| 158 else: | 164 else: |
| 159 keys = [r'HKLM\Software\Microsoft\VisualStudio\%s' % version, | 165 path = os.environ['VSINSTALLDIR'] |
| 160 r'HKLM\Software\Wow6432Node\Microsoft\VisualStudio\%s' % version] | 166 os.environ['GYP_MSVS_OVERRIDE_PATH'] = path |
| 161 for key in keys: | |
| 162 path = _RegistryGetValue(key, 'InstallDir') | |
| 163 if not path: | |
| 164 continue | |
| 165 path = os.path.normpath(os.path.join(path, '..', '..')) | |
| 166 return path | |
| 167 | 167 |
| 168 raise Exception(('Visual Studio Version %s (from GYP_MSVS_VERSION)' | 168 return path |
| 169 ' not found.') % (version_as_year)) | |
| 170 | 169 |
| 171 | 170 def _SdkFileSuffix(): |
|
brucedawson
2017/03/27 23:23:52
This needs a larger comment to explain what this n
| |
| 172 def _VersionNumber(): | |
| 173 """Gets the standard version number ('120', '140', etc.) based on | 171 """Gets the standard version number ('120', '140', etc.) based on |
| 174 GYP_MSVS_VERSION.""" | 172 GYP_MSVS_VERSION.""" |
| 175 vs_version = GetVisualStudioVersion() | 173 vs_version = GetVisualStudioVersion() |
| 176 if vs_version == '2013': | 174 if vs_version == '2013': |
| 177 return '120' | 175 return '120' |
| 178 if vs_version == '2015': | 176 if vs_version == '2015': |
| 179 return '140' | 177 return '140' |
| 178 # even on 2017 (a.k.a. vc1410 version of files is 140) | |
| 180 if vs_version == '2017': | 179 if vs_version == '2017': |
| 181 return '150' | 180 return '140' |
| 182 raise ValueError('Unexpected GYP_MSVS_VERSION') | 181 raise ValueError('Unexpected GYP_MSVS_VERSION') |
| 183 | 182 |
| 184 | 183 |
| 185 def _CopyRuntimeImpl(target, source, verbose=True): | 184 def _CopyRuntimeImpl(target, source, verbose=True): |
| 186 """Copy |source| to |target| if it doesn't already exist or if it needs to be | 185 """Copy |source| to |target| if it doesn't already exist or if it needs to be |
| 187 updated (comparing last modified time as an approximate float match as for | 186 updated (comparing last modified time as an approximate float match as for |
| 188 some reason the values tend to differ by ~1e-07 despite being copies of the | 187 some reason the values tend to differ by ~1e-07 despite being copies of the |
| 189 same file... https://crbug.com/603603). | 188 same file... https://crbug.com/603603). |
| 190 """ | 189 """ |
| 191 if (os.path.isdir(os.path.dirname(target)) and | 190 if (os.path.isdir(os.path.dirname(target)) and |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 216 """Copy both the msvcp and vccorlib runtime DLLs, only if the target doesn't | 215 """Copy both the msvcp and vccorlib runtime DLLs, only if the target doesn't |
| 217 exist, but the target directory does exist.""" | 216 exist, but the target directory does exist.""" |
| 218 for file_part in ('msvcp', 'vccorlib', 'vcruntime'): | 217 for file_part in ('msvcp', 'vccorlib', 'vcruntime'): |
| 219 dll = dll_pattern % file_part | 218 dll = dll_pattern % file_part |
| 220 target = os.path.join(target_dir, dll) | 219 target = os.path.join(target_dir, dll) |
| 221 source = os.path.join(source_dir, dll) | 220 source = os.path.join(source_dir, dll) |
| 222 _CopyRuntimeImpl(target, source) | 221 _CopyRuntimeImpl(target, source) |
| 223 # Copy the UCRT files needed by VS 2015 from the Windows SDK. This location | 222 # Copy the UCRT files needed by VS 2015 from the Windows SDK. This location |
| 224 # includes the api-ms-win-crt-*.dll files that are not found in the Windows | 223 # includes the api-ms-win-crt-*.dll files that are not found in the Windows |
| 225 # directory. These files are needed for component builds. | 224 # directory. These files are needed for component builds. |
| 226 # If WINDOWSSDKDIR is not set use the default SDK path. This will be the case | 225 win_sdk_dir = os.path.normpath(os.environ['WindowsSdkDir']) |
| 227 # when DEPOT_TOOLS_WIN_TOOLCHAIN=0 and vcvarsall.bat has not been run. | |
| 228 win_sdk_dir = os.path.normpath( | |
| 229 os.environ.get('WINDOWSSDKDIR', | |
| 230 'C:\\Program Files (x86)\\Windows Kits\\10')) | |
| 231 ucrt_dll_dirs = os.path.join(win_sdk_dir, r'Redist\ucrt\DLLs', target_cpu) | 226 ucrt_dll_dirs = os.path.join(win_sdk_dir, r'Redist\ucrt\DLLs', target_cpu) |
| 232 ucrt_files = glob.glob(os.path.join(ucrt_dll_dirs, 'api-ms-win-*.dll')) | 227 ucrt_files = glob.glob(os.path.join(ucrt_dll_dirs, 'api-ms-win-*.dll')) |
| 233 assert len(ucrt_files) > 0 | 228 assert len(ucrt_files) > 0 |
| 234 for ucrt_src_file in ucrt_files: | 229 for ucrt_src_file in ucrt_files: |
| 235 file_part = os.path.basename(ucrt_src_file) | 230 file_part = os.path.basename(ucrt_src_file) |
| 236 ucrt_dst_file = os.path.join(target_dir, file_part) | 231 ucrt_dst_file = os.path.join(target_dir, file_part) |
| 237 _CopyRuntimeImpl(ucrt_dst_file, ucrt_src_file, False) | 232 _CopyRuntimeImpl(ucrt_dst_file, ucrt_src_file, False) |
| 238 _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbase' + suffix), | 233 _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbase' + suffix), |
| 239 os.path.join(source_dir, 'ucrtbase' + suffix)) | 234 os.path.join(source_dir, 'ucrtbase' + suffix)) |
| 240 | 235 |
| 241 | 236 |
| 242 def _CopyRuntime(target_dir, source_dir, target_cpu, debug): | 237 def _CopyRuntime(target_dir, source_dir, target_cpu, debug): |
| 243 """Copy the VS runtime DLLs, only if the target doesn't exist, but the target | 238 """Copy the VS runtime DLLs, only if the target doesn't exist, but the target |
| 244 directory does exist. Handles VS 2013, VS 2015, and VS 2017.""" | 239 directory does exist. Handles VS 2013, VS 2015, and VS 2017.""" |
| 245 suffix = "d.dll" if debug else ".dll" | 240 suffix = "d.dll" if debug else ".dll" |
| 241 dll_pattern = "%s" + _SdkFileSuffix() + suffix | |
| 246 if GetVisualStudioVersion() in ['2015', '2017']: | 242 if GetVisualStudioVersion() in ['2015', '2017']: |
| 247 # VS 2017 uses the same CRT DLLs as VS 2015. | 243 # VS 2017 uses the same CRT DLLs as VS 2015. |
| 248 _CopyUCRTRuntime(target_dir, source_dir, target_cpu, '%s140' + suffix, | 244 _CopyUCRTRuntime(target_dir, source_dir, target_cpu, dll_pattern, suffix) |
| 249 suffix) | |
| 250 else: | 245 else: |
| 251 _CopyRuntime2013(target_dir, source_dir, 'msvc%s120' + suffix) | 246 _CopyRuntime2013(target_dir, source_dir, 'msvc' + dll_pattern) |
|
brucedawson
2017/03/27 23:23:52
You'll need to rebase as the 2013 support was just
| |
| 252 | 247 |
| 253 # Copy the PGO runtime library to the release directories. | 248 # Copy the PGO runtime library to the release directories. |
| 254 if not debug and os.environ.get('GYP_MSVS_OVERRIDE_PATH'): | 249 if not debug and os.environ.get('GYP_MSVS_OVERRIDE_PATH'): |
| 255 pgo_x86_runtime_dir = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'), | 250 pgo_runtime_dll = 'pgort' + _SdkFileSuffix() + '.dll' |
| 256 'VC', 'bin') | 251 paths = subprocess.check_output(['where.exe', pgo_runtime_dll])\ |
| 257 pgo_x64_runtime_dir = os.path.join(pgo_x86_runtime_dir, 'amd64') | 252 .strip()\ |
| 258 pgo_runtime_dll = 'pgort' + _VersionNumber() + '.dll' | 253 .split('\n') |
| 259 if target_cpu == "x86": | 254 source = paths[-1].strip() |
| 260 source_x86 = os.path.join(pgo_x86_runtime_dir, pgo_runtime_dll) | 255 if os.path.exists(source): |
| 261 if os.path.exists(source_x86): | 256 _CopyRuntimeImpl(os.path.join(target_dir, pgo_runtime_dll), source) |
| 262 _CopyRuntimeImpl(os.path.join(target_dir, pgo_runtime_dll), source_x86) | |
| 263 elif target_cpu == "x64": | |
| 264 source_x64 = os.path.join(pgo_x64_runtime_dir, pgo_runtime_dll) | |
| 265 if os.path.exists(source_x64): | |
| 266 _CopyRuntimeImpl(os.path.join(target_dir, pgo_runtime_dll), | |
| 267 source_x64) | |
| 268 else: | 257 else: |
| 269 raise NotImplementedError("Unexpected target_cpu value:" + target_cpu) | 258 raise NotImplementedError("could not find " + pgo_runtime_dll) |
| 270 | 259 |
| 271 | 260 |
| 272 def CopyVsRuntimeDlls(output_dir, runtime_dirs): | 261 def CopyVsRuntimeDlls(output_dir, runtime_dirs): |
| 273 """Copies the VS runtime DLLs from the given |runtime_dirs| to the output | 262 """Copies the VS runtime DLLs from the given |runtime_dirs| to the output |
| 274 directory so that even if not system-installed, built binaries are likely to | 263 directory so that even if not system-installed, built binaries are likely to |
| 275 be able to run. | 264 be able to run. |
| 276 | 265 |
| 277 This needs to be run after gyp has been run so that the expected target | 266 This needs to be run after gyp has been run so that the expected target |
| 278 output directories are already created. | 267 output directories are already created. |
| 279 | 268 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 force = True | 372 force = True |
| 384 | 373 |
| 385 depot_tools_win_toolchain = \ | 374 depot_tools_win_toolchain = \ |
| 386 bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) | 375 bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))) |
| 387 if ((sys.platform in ('win32', 'cygwin') or force) and | 376 if ((sys.platform in ('win32', 'cygwin') or force) and |
| 388 depot_tools_win_toolchain): | 377 depot_tools_win_toolchain): |
| 389 import find_depot_tools | 378 import find_depot_tools |
| 390 depot_tools_path = find_depot_tools.add_depot_tools_to_path() | 379 depot_tools_path = find_depot_tools.add_depot_tools_to_path() |
| 391 # Necessary so that get_toolchain_if_necessary.py will put the VS toolkit | 380 # Necessary so that get_toolchain_if_necessary.py will put the VS toolkit |
| 392 # in the correct directory. | 381 # in the correct directory. |
| 393 os.environ['GYP_MSVS_VERSION'] = GetVisualStudioVersion() | 382 GetVisualStudioVersion() |
| 394 get_toolchain_args = [ | 383 get_toolchain_args = [ |
| 395 sys.executable, | 384 sys.executable, |
| 396 os.path.join(depot_tools_path, | 385 os.path.join(depot_tools_path, |
| 397 'win_toolchain', | 386 'win_toolchain', |
| 398 'get_toolchain_if_necessary.py'), | 387 'get_toolchain_if_necessary.py'), |
| 399 '--output-json', json_data_file, | 388 '--output-json', json_data_file, |
| 400 ] + _GetDesiredVsToolchainHashes() | 389 ] + _GetDesiredVsToolchainHashes() |
| 401 if force: | 390 if force: |
| 402 get_toolchain_args.append('--force') | 391 get_toolchain_args.append('--force') |
| 403 subprocess.check_call(get_toolchain_args) | 392 subprocess.check_call(get_toolchain_args) |
| 404 | 393 |
| 405 return 0 | 394 return 0 |
| 406 | 395 |
| 407 | 396 |
| 408 def NormalizePath(path): | 397 def NormalizePath(path): |
| 409 while path.endswith("\\"): | 398 while path.endswith("\\"): |
| 410 path = path[:-1] | 399 path = path[:-1] |
| 411 return path | 400 return path |
| 412 | 401 |
| 413 | 402 |
| 414 def SetEnvironmentAndGetSDKDir(): | 403 def SetEnvironmentAndGetSDKDir(): |
| 415 """Gets location information about the current sdk (must have been | 404 """Gets location information about the current sdk (must have been |
| 416 previously updated by 'update'). This is used for the GN build.""" | 405 previously updated by 'update'). This is used for the GN build.""" |
| 417 runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() | 406 runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() |
| 418 | 407 return NormalizePath(os.environ['WindowsSdkDir']) |
| 419 # If WINDOWSSDKDIR is not set, search the default SDK path and set it. | |
| 420 if not 'WINDOWSSDKDIR' in os.environ: | |
| 421 default_sdk_path = 'C:\\Program Files (x86)\\Windows Kits\\10' | |
| 422 if os.path.isdir(default_sdk_path): | |
| 423 os.environ['WINDOWSSDKDIR'] = default_sdk_path | |
| 424 | |
| 425 return NormalizePath(os.environ['WINDOWSSDKDIR']) | |
| 426 | 408 |
| 427 | 409 |
| 428 def GetToolchainDir(): | 410 def GetToolchainDir(): |
| 429 """Gets location information about the current toolchain (must have been | 411 """Gets location information about the current toolchain (must have been |
| 430 previously updated by 'update'). This is used for the GN build.""" | 412 previously updated by 'update'). This is used for the GN build.""" |
| 431 runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() | 413 runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs() |
| 432 win_sdk_dir = SetEnvironmentAndGetSDKDir() | 414 win_sdk_dir = SetEnvironmentAndGetSDKDir() |
| 433 | 415 |
| 434 print '''vs_path = "%s" | 416 print '''vs_path = "%s" |
| 435 sdk_path = "%s" | 417 sdk_path = "%s" |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 451 'copy_dlls': CopyDlls, | 433 'copy_dlls': CopyDlls, |
| 452 } | 434 } |
| 453 if len(sys.argv) < 2 or sys.argv[1] not in commands: | 435 if len(sys.argv) < 2 or sys.argv[1] not in commands: |
| 454 print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands) | 436 print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands) |
| 455 return 1 | 437 return 1 |
| 456 return commands[sys.argv[1]](*sys.argv[2:]) | 438 return commands[sys.argv[1]](*sys.argv[2:]) |
| 457 | 439 |
| 458 | 440 |
| 459 if __name__ == '__main__': | 441 if __name__ == '__main__': |
| 460 sys.exit(main()) | 442 sys.exit(main()) |
| OLD | NEW |