Chromium Code Reviews| Index: build/get_syzygy_binaries.py |
| diff --git a/build/get_syzygy_binaries.py b/build/get_syzygy_binaries.py |
| index 1cab3fcf48dfd21f8c54e6492101f9d5df2e6300..e5f20aed1dfdba4b279dd0c673d3f55ff9fa14c3 100755 |
| --- a/build/get_syzygy_binaries.py |
| +++ b/build/get_syzygy_binaries.py |
| @@ -7,6 +7,7 @@ |
| import hashlib |
| import errno |
| +import fnmatch |
| import json |
| import logging |
| import optparse |
| @@ -48,6 +49,10 @@ _RESOURCES = [ |
| lambda x: x.filename.endswith('.dll.pdb'))] |
| +# Name of the MS DIA dll that we need to copy to the binaries directory. |
| +_DIA_DLL_NAME = "msdia140.dll" |
| + |
| + |
| def _LoadState(output_dir): |
| """Loads the contents of the state file for a given |output_dir|, returning |
| None if it doesn't exist. |
| @@ -282,6 +287,37 @@ def _Download(resource): |
| return tmp[1] |
| +def _MaybeCopyDIABinaries(options, contents): |
| + """Try to copy the DIA DLL to the binaries exe directory. |
| + |
| + This doesn't check if the toolchain version of this DLL is the same as the |
| + one used by the Syzygy binaries, so this will only be useful if Chrome and |
| + Syzygy are using the same revision of the toolchain. |
| + """ |
| + toolchain_data_file = os.path.join(os.path.dirname(__file__), |
| + 'win_toolchain.json') |
| + if not os.path.exists(toolchain_data_file): |
| + _LOGGER.debug('Toolchain JSON data file doesn\'t exist.') |
| + return |
| + _LOGGER.debug('%s exists' % toolchain_data_file) |
| + with open(toolchain_data_file) as temp_f: |
| + toolchain_data = json.load(temp_f) |
| + if not os.path.isdir(toolchain_data['path']): |
| + _LOGGER.error('The toolchain JSON file is invalid.') |
| + return |
| + dia_sdk_binaries_dir = os.path.join(toolchain_data['path'], 'DIA SDK', 'bin') |
| + dia_dll = os.path.join(dia_sdk_binaries_dir, _DIA_DLL_NAME) |
| + if not os.path.exists(dia_dll): |
| + raise Exception('%s is missing.') |
| + dia_dll_dest = os.path.join(options.output_dir, 'exe', binary) |
|
scottmg
2016/10/03 20:49:28
binary -> _DIA_DLL_NAME
|
| + _LOGGER.debug('Copying %s to %s.' % (dia_dll, dia_dll_dest)) |
| + if not options.dry_run: |
| + shutil.copy(dia_dll, dia_dll_dest) |
| + contents[os.path.relpath(dia_dll_dest, options.output_dir)] = ( |
| + _Md5(dia_dll_dest)) |
| + return |
|
scottmg
2016/10/03 20:49:28
Remove 'return'
|
| + |
| + |
| def _InstallBinaries(options, deleted={}): |
| """Installs Syzygy binaries. This assumes that the output directory has |
| already been cleaned, as it will refuse to overwrite existing files.""" |
| @@ -336,6 +372,10 @@ def _InstallBinaries(options, deleted={}): |
| _LOGGER.debug('Removing temporary file "%s".', path) |
| os.remove(path) |
| + if options.copy_dia_binaries: |
| + # Try to copy the DIA binaries to the binaries directory. |
| + _MaybeCopyDIABinaries(options, contents) |
| + |
| return state |
| @@ -367,6 +407,9 @@ def _ParseCommandLine(): |
| option_parser.add_option('--quiet', dest='log_level', action='store_const', |
| default=logging.INFO, const=logging.ERROR, |
| help='Disables all output except for errors.') |
| + option_parser.add_option('--copy-dia-binaries', action='store_true', |
| + default=False, help='If true then the DIA dll will get copied into the ' |
| + 'binaries directory if it\'s available.') |
| options, args = option_parser.parse_args() |
| if args: |
| option_parser.error('Unexpected arguments: %s' % args) |