blob: 2ced17afd73b39418323373fb597928be77b30fd [file] [log] [blame]
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -07001#!/usr/bin/env python2
2
3import argparse
Jim Stichnothe8b404b2014-09-16 10:22:26 -07004import errno
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -07005import os
Jim Stichnothe8b404b2014-09-16 10:22:26 -07006import shutil
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -07007import tempfile
8from utils import shellcmd
Jim Stichnoth16178a12014-09-02 14:11:57 -07009from utils import FindBaseNaCl
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070010
11if __name__ == '__main__':
12 argparser = argparse.ArgumentParser()
13 argparser.add_argument('cfile', nargs='+', type=str,
14 help='C file(s) to convert')
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070015 argparser.add_argument('--dir', nargs='?', type=str, default='.',
Jim Stichnoth65d8d532014-09-11 09:47:59 -070016 help='Output directory. Default "%(default)s".')
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070017 argparser.add_argument('--disable-verify', action='store_true')
18 args = argparser.parse_args()
19
Jim Stichnoth16178a12014-09-02 14:11:57 -070020 nacl_root = FindBaseNaCl()
21 # Prepend bin to $PATH.
22 os.environ['PATH'] = (
Jim Stichnothbb9d11a2015-06-03 00:18:14 -070023 nacl_root + '/toolchain/linux_x86/pnacl_newlib_raw/bin' + os.pathsep +
Jim Stichnoth16178a12014-09-02 14:11:57 -070024 os.pathsep + os.environ['PATH'])
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070025
Jim Stichnothe8b404b2014-09-16 10:22:26 -070026 try:
27 tempdir = tempfile.mkdtemp()
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070028
Jim Stichnothe8b404b2014-09-16 10:22:26 -070029 for cname in args.cfile:
30 basename = os.path.splitext(cname)[0]
31 llname = os.path.join(tempdir, basename + '.ll')
32 pnaclname = basename + '.pnacl.ll'
33 pnaclname = os.path.join(args.dir, pnaclname)
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070034
Jim Stichnothe8b404b2014-09-16 10:22:26 -070035 shellcmd('pnacl-clang -O2 -c {0} -o {1}'.format(cname, llname))
36 shellcmd('pnacl-opt ' +
37 '-pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' +
38 ('' if args.disable_verify else
39 ' -verify-pnaclabi-module -verify-pnaclabi-functions') +
40 ' -pnaclabi-allow-debug-metadata'
41 ' {0} -S -o {1}'.format(llname, pnaclname))
42 finally:
43 try:
44 shutil.rmtree(tempdir)
45 except OSError as exc:
46 if exc.errno != errno.ENOENT: # ENOENT - no such file or directory
47 raise # re-raise exception