#!/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