Home | History | Annotate | Download | only in win
      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.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