|  | #!/usr/bin/env python2 | 
|  |  | 
|  | import argparse | 
|  | import errno | 
|  | import os | 
|  | import shutil | 
|  | import tempfile | 
|  | from utils import shellcmd | 
|  | from utils import FindBaseNaCl | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | argparser = argparse.ArgumentParser() | 
|  | argparser.add_argument('cfile', nargs='+', type=str, | 
|  | help='C file(s) to convert') | 
|  | argparser.add_argument('--dir', nargs='?', type=str, default='.', | 
|  | help='Output directory. Default "%(default)s".') | 
|  | argparser.add_argument('--disable-verify', action='store_true') | 
|  | args = argparser.parse_args() | 
|  |  | 
|  | nacl_root = FindBaseNaCl() | 
|  | # Prepend bin to $PATH. | 
|  | os.environ['PATH'] = ( | 
|  | nacl_root + '/toolchain/linux_x86/pnacl_newlib_raw/bin' + os.pathsep + | 
|  | os.pathsep + os.environ['PATH']) | 
|  |  | 
|  | try: | 
|  | tempdir = tempfile.mkdtemp() | 
|  |  | 
|  | for cname in args.cfile: | 
|  | basename = os.path.splitext(cname)[0] | 
|  | llname = os.path.join(tempdir, basename + '.ll') | 
|  | pnaclname = basename + '.pnacl.ll' | 
|  | pnaclname = os.path.join(args.dir, pnaclname) | 
|  |  | 
|  | shellcmd('pnacl-clang -O2 -c {0} -o {1}'.format(cname, llname)) | 
|  | shellcmd('pnacl-opt ' + | 
|  | '-pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' + | 
|  | ('' if args.disable_verify else | 
|  | ' -verify-pnaclabi-module -verify-pnaclabi-functions') + | 
|  | ' -pnaclabi-allow-debug-metadata' | 
|  | ' {0} -S -o {1}'.format(llname, pnaclname)) | 
|  | finally: | 
|  | try: | 
|  | shutil.rmtree(tempdir) | 
|  | except OSError as exc: | 
|  | if exc.errno != errno.ENOENT: # ENOENT - no such file or directory | 
|  | raise # re-raise exception |