blob: 00a69d75de373db3260cdf9fab2b6b911f24e6e9 [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001#!/usr/bin/env python
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
4# found in the LICENSE file.
5
6import glob
7import optparse
8import os
9import shutil
10import subprocess
11import sys
12
13def reorder_imports(input_dir, output_dir, architecture):
14 """Run swapimports.exe on the initial chrome.exe, and write to the output
15 directory. Also copy over any related files that might be needed
16 (pdbs, manifests etc.).
17 """
18
19 input_image = os.path.join(input_dir, 'chrome.exe')
20 output_image = os.path.join(output_dir, 'chrome.exe')
21
22 swap_exe = os.path.join(
23 __file__,
24 '..\\..\\..\\third_party\\syzygy\\binaries\\exe\\swapimport.exe')
25
26 args = [swap_exe, '--input-image=%s' % input_image,
27 '--output-image=%s' % output_image, '--overwrite', '--no-logo']
28
29 if architecture == 'x64':
30 args.append('--x64');
31
32 args.append('chrome_elf.dll');
33
34 subprocess.check_call(args)
35
36 for fname in glob.iglob(os.path.join(input_dir, 'chrome.exe.*')):
37 shutil.copy(fname, os.path.join(output_dir, os.path.basename(fname)))
38 return 0
39
40
41def main(argv):
42 usage = 'reorder_imports.py -i <input_dir> -o <output_dir> -a <target_arch>'
43 parser = optparse.OptionParser(usage=usage)
44 parser.add_option('-i', '--input', help='reorder chrome.exe in DIR',
45 metavar='DIR')
46 parser.add_option('-o', '--output', help='write new chrome.exe to DIR',
47 metavar='DIR')
48 parser.add_option('-a', '--arch', help='architecture of build (optional)',
49 default='ia32')
50 opts, args = parser.parse_args()
51
52 if not opts.input or not opts.output:
53 parser.error('Please provide and input and output directory')
54 return reorder_imports(opts.input, opts.output, opts.arch)
55
56if __name__ == "__main__":
57 sys.exit(main(sys.argv[1:]))