1 #!/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 6 import glob 7 import optparse 8 import os 9 import shutil 10 import subprocess 11 import sys 12 13 def 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 41 def 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 56 if __name__ == "__main__": 57 sys.exit(main(sys.argv[1:])) 58