Home | History | Annotate | Download | only in linker-flags
      1 #!/usr/bin/env python
      2 
      3 # Copyright (c) 2013 Google Inc. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 from optparse import OptionParser
      8 import glob
      9 import os
     10 import subprocess
     11 
     12 parser = OptionParser()
     13 parser.add_option('--exe', dest='exe')
     14 parser.add_option('--vcbindir', dest='vcbindir')
     15 parser.add_option('--pgd', dest='pgd')
     16 (options, args) = parser.parse_args()
     17 
     18 # Instrumented binaries fail to run unless the Visual C++'s bin dir is included
     19 # in the PATH environment variable.
     20 os.environ['PATH'] = os.environ['PATH'] + os.pathsep + options.vcbindir
     21 
     22 # Run Instrumented binary.  The profile will be recorded into *.pgc file.
     23 subprocess.call([options.exe])
     24 
     25 # Merge *.pgc files into a *.pgd (Profile-Guided Database) file.
     26 subprocess.call(['pgomgr', '/merge', options.pgd])
     27 
     28 # *.pgc files are no longer necessary. Clear all of them.
     29 pgd_file = os.path.abspath(options.pgd)
     30 pgd_dir = os.path.dirname(pgd_file)
     31 (pgd_basename, _) = os.path.splitext(os.path.basename(pgd_file))
     32 pgc_filepattern = os.path.join(pgd_dir, '%s!*.pgc' % pgd_basename)
     33 pgc_files= glob.glob(pgc_filepattern)
     34 for pgc_file in pgc_files:
     35   os.unlink(pgc_file)
     36