Copy the PGO runtime library to the release directory (take 2)

This is a reland of https://codereview.chromium.org/402993002/ with an additional check to make sure that the DLLs exist before trying to copy them.

BUG=395183

Review URL: https://codereview.chromium.org/405983003

git-svn-id: http://src.chromium.org/svn/trunk/src/build@284550 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
sebmarchand@chromium.org 2014-07-22 00:18:32 +00:00
Родитель d2b6e407d7
Коммит 21b38ef160
1 изменённых файлов: 27 добавлений и 9 удалений

Просмотреть файл

@ -71,6 +71,18 @@ def CopyVsRuntimeDlls(output_dir, runtime_dirs):
"""
assert sys.platform.startswith(('win32', 'cygwin'))
def copy_runtime_impl(target, source):
"""Copy |source| to |target| if it doesn't already exist or if it need to be
updated.
"""
if (os.path.isdir(os.path.dirname(target)) and
(not os.path.isfile(target) or
os.stat(target).st_mtime != os.stat(source).st_mtime)):
print 'Copying %s to %s...' % (source, target)
if os.path.exists(target):
os.unlink(target)
shutil.copy2(source, target)
def copy_runtime(target_dir, source_dir, dll_pattern):
"""Copy both the msvcr and msvcp runtime DLLs, only if the target doesn't
exist, but the target directory does exist."""
@ -78,15 +90,7 @@ def CopyVsRuntimeDlls(output_dir, runtime_dirs):
dll = dll_pattern % which
target = os.path.join(target_dir, dll)
source = os.path.join(source_dir, dll)
# If gyp generated to that output dir, and the runtime isn't already
# there, then copy it over.
if (os.path.isdir(target_dir) and
(not os.path.isfile(target) or
os.stat(target).st_mtime != os.stat(source).st_mtime)):
print 'Copying %s to %s...' % (source, target)
if os.path.exists(target):
os.unlink(target)
shutil.copy2(source, target)
copy_runtime_impl(target, source)
x86, x64 = runtime_dirs
out_debug = os.path.join(output_dir, 'Debug')
@ -107,6 +111,20 @@ def CopyVsRuntimeDlls(output_dir, runtime_dirs):
copy_runtime(out_debug_nacl64, x64, 'msvc%s120d.dll')
copy_runtime(out_release_nacl64, x64, 'msvc%s120.dll')
# Copy the PGO runtime library to the release directories.
if os.environ.get('GYP_MSVS_OVERRIDE_PATH'):
pgo_x86_runtime_dir = os.path.join(os.environ.get('GYP_MSVS_OVERRIDE_PATH'),
'VC', 'bin')
pgo_x64_runtime_dir = os.path.join(pgo_x86_runtime_dir, 'amd64')
pgo_runtime_dll = 'pgort120.dll'
source_x86 = os.path.join(pgo_x86_runtime_dir, pgo_runtime_dll)
if os.path.exists(source_x86):
copy_runtime_impl(os.path.join(out_release, pgo_runtime_dll), source_x86)
source_x64 = os.path.join(pgo_x64_runtime_dir, pgo_runtime_dll)
if os.path.exists(source_x64):
copy_runtime_impl(os.path.join(out_release_x64, pgo_runtime_dll),
source_x64)
def _GetDesiredVsToolchainHashes():
"""Load a list of SHA1s corresponding to the toolchains that we want installed