| 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 ucrt_files = glob.glob(os.path.join(ucrt_dll_dirs, 'api-ms-win-*.dll')) | 211 ucrt_files = glob.glob(os.path.join(ucrt_dll_dirs, 'api-ms-win-*.dll')) |
| 212 assert len(ucrt_files) > 0 | 212 assert len(ucrt_files) > 0 |
| 213 for ucrt_src_file in ucrt_files: | 213 for ucrt_src_file in ucrt_files: |
| 214 file_part = os.path.basename(ucrt_src_file) | 214 file_part = os.path.basename(ucrt_src_file) |
| 215 ucrt_dst_file = os.path.join(target_dir, file_part) | 215 ucrt_dst_file = os.path.join(target_dir, file_part) |
| 216 _CopyRuntimeImpl(ucrt_dst_file, ucrt_src_file, False) | 216 _CopyRuntimeImpl(ucrt_dst_file, ucrt_src_file, False) |
| 217 _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbase' + suffix), | 217 _CopyRuntimeImpl(os.path.join(target_dir, 'ucrtbase' + suffix), |
| 218 os.path.join(source_dir, 'ucrtbase' + suffix)) | 218 os.path.join(source_dir, 'ucrtbase' + suffix)) |
| 219 | 219 |
| 220 | 220 |
| 221 def FindVCToolsRoot(): |
| 222 """In VS2017 the PGO runtime dependencies are located in |
| 223 {toolchain_root}/VC/Tools/MSVC/{x.y.z}/bin/Host{target_cpu}/{target_cpu}/, the |
| 224 {version_number} part is likely to change in case of a minor update of the |
| 225 toolchain so we don't hardcode this value here (except for the major number). |
| 226 |
| 227 This returns the '{toolchain_root}/VC/Tools/MSVC/{x.y.z}/bin/' path. |
| 228 |
| 229 This function should only be called when using VS2017. |
| 230 """ |
| 231 assert GetVisualStudioVersion() == '2017' |
| 232 assert ('GYP_MSVS_OVERRIDE_PATH' in os.environ) |
| 233 vc_tools_msvc_root = os.path.join(os.environ['GYP_MSVS_OVERRIDE_PATH'], |
| 234 'VC', 'Tools', 'MSVC') |
| 235 for directory in os.listdir(vc_tools_msvc_root): |
| 236 if not os.path.isdir(os.path.join(vc_tools_msvc_root, directory)): |
| 237 continue |
| 238 if re.match('14\.\d+\.\d+', directory): |
| 239 return os.path.join(vc_tools_msvc_root, directory, 'bin') |
| 240 raise Exception('Unable to find the VC tools directory.') |
| 241 |
| 242 |
| 221 def _CopyPGORuntime(target_dir, target_cpu): | 243 def _CopyPGORuntime(target_dir, target_cpu): |
| 222 """Copy the runtime dependencies required during a PGO build. | 244 """Copy the runtime dependencies required during a PGO build. |
| 223 """ | 245 """ |
| 224 env_version = GetVisualStudioVersion() | 246 env_version = GetVisualStudioVersion() |
| 225 # These dependencies will be in a different location depending on the version | 247 # These dependencies will be in a different location depending on the version |
| 226 # of the toolchain. | 248 # of the toolchain. |
| 227 if env_version == '2015': | 249 if env_version == '2015': |
| 228 pgo_x86_runtime_dir = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'), | 250 pgo_x86_runtime_dir = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'), |
| 229 'VC', 'bin') | 251 'VC', 'bin') |
| 230 pgo_x64_runtime_dir = os.path.join(pgo_x86_runtime_dir, 'amd64') | 252 pgo_x64_runtime_dir = os.path.join(pgo_x86_runtime_dir, 'amd64') |
| 231 elif env_version == '2017': | 253 elif env_version == '2017': |
| 232 # In VS2017 the PGO runtime dependencies are located in | 254 pgo_runtime_root = FindVCToolsRoot() |
| 233 # {toolchain_root}/VC/Tools/MSVC/{x.y.z}/bin/Host{target_cpu}/{target_cpu}/, | |
| 234 # the {version_number} part is likely to change in case of a minor update of | |
| 235 # the toolchain so we don't hardcode this value here (except for the major | |
| 236 # number). | |
| 237 vc_tools_msvc_root = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'), | |
| 238 'VC', 'Tools', 'MSVC') | |
| 239 pgo_runtime_root = None | |
| 240 for directory in os.listdir(vc_tools_msvc_root): | |
| 241 if not os.path.isdir(os.path.join(vc_tools_msvc_root, directory)): | |
| 242 continue | |
| 243 if re.match('14\.\d+\.\d+', directory): | |
| 244 pgo_runtime_root = os.path.join(vc_tools_msvc_root, directory, 'bin') | |
| 245 break | |
| 246 assert pgo_runtime_root | 255 assert pgo_runtime_root |
| 247 # There's no version of pgosweep.exe in HostX64/x86, so we use the copy | 256 # There's no version of pgosweep.exe in HostX64/x86, so we use the copy |
| 248 # from HostX86/x86. | 257 # from HostX86/x86. |
| 249 pgo_x86_runtime_dir = os.path.join(pgo_runtime_root, 'HostX86', 'x86') | 258 pgo_x86_runtime_dir = os.path.join(pgo_runtime_root, 'HostX86', 'x86') |
| 250 pgo_x64_runtime_dir = os.path.join(pgo_runtime_root, 'HostX64', 'x64') | 259 pgo_x64_runtime_dir = os.path.join(pgo_runtime_root, 'HostX64', 'x64') |
| 251 else: | 260 else: |
| 252 raise Exception('Unexpected toolchain version: %s.' % env_version) | 261 raise Exception('Unexpected toolchain version: %s.' % env_version) |
| 253 | 262 |
| 254 # We need to copy 2 runtime dependencies used during the profiling step: | 263 # We need to copy 2 runtime dependencies used during the profiling step: |
| 255 # - pgort140.dll: runtime library required to run the instrumented image. | 264 # - pgort140.dll: runtime library required to run the instrumented image. |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 'copy_dlls': CopyDlls, | 439 'copy_dlls': CopyDlls, |
| 431 } | 440 } |
| 432 if len(sys.argv) < 2 or sys.argv[1] not in commands: | 441 if len(sys.argv) < 2 or sys.argv[1] not in commands: |
| 433 print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands) | 442 print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands) |
| 434 return 1 | 443 return 1 |
| 435 return commands[sys.argv[1]](*sys.argv[2:]) | 444 return commands[sys.argv[1]](*sys.argv[2:]) |
| 436 | 445 |
| 437 | 446 |
| 438 if __name__ == '__main__': | 447 if __name__ == '__main__': |
| 439 sys.exit(main()) | 448 sys.exit(main()) |
| OLD | NEW |