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 return | |
scottmg
2017/05/19 22:46:19
This return is a bit weird. raise maybe (and remov
Sébastien Marchand
2017/05/19 23:27:11
raising make sense.
| |
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 |