Jim Stichnoth | 5bc2b1d | 2014-05-22 13:38:48 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python2 |
| 2 | |
| 3 | import argparse |
| 4 | import os |
| 5 | import sys |
| 6 | import tempfile |
| 7 | from utils import shellcmd |
| 8 | |
| 9 | if __name__ == '__main__': |
| 10 | argparser = argparse.ArgumentParser() |
| 11 | argparser.add_argument('cfile', nargs='+', type=str, |
| 12 | help='C file(s) to convert') |
| 13 | argparser.add_argument('--nacl_sdk_root', nargs='?', type=str, |
| 14 | help='Path to NACL_SDK_ROOT') |
| 15 | argparser.add_argument('--dir', nargs='?', type=str, default='.', |
| 16 | help='Output directory') |
| 17 | argparser.add_argument('--disable-verify', action='store_true') |
| 18 | args = argparser.parse_args() |
| 19 | |
| 20 | nacl_sdk_root = os.environ.get('NACL_SDK_ROOT', None) |
| 21 | if args.nacl_sdk_root: |
| 22 | nacl_sdk_root = os.path.expanduser(args.nacl_sdk_root) |
| 23 | |
| 24 | if not nacl_sdk_root or not os.path.exists(nacl_sdk_root): |
| 25 | print '''\ |
| 26 | Please set the NACL_SDK_ROOT environment variable or pass the path through |
| 27 | --nacl_sdk_root to point to a valid Native Client SDK installation.''' |
| 28 | sys.exit(1) |
| 29 | |
| 30 | includes_path = os.path.join(nacl_sdk_root, 'include') |
| 31 | toolchain_path = os.path.join(nacl_sdk_root, 'toolchain', 'linux_pnacl') |
| 32 | clang_path = os.path.join(toolchain_path, 'bin64', 'pnacl-clang') |
| 33 | opt_path = os.path.join(toolchain_path, 'host_x86_64', 'bin', 'opt') |
| 34 | |
| 35 | tempdir = tempfile.mkdtemp() |
| 36 | |
| 37 | for cname in args.cfile: |
| 38 | basename = os.path.splitext(cname)[0] |
| 39 | llname = os.path.join(tempdir, basename + '.ll') |
| 40 | pnaclname = basename + '.pnacl.ll' |
| 41 | pnaclname = os.path.join(args.dir, pnaclname) |
| 42 | |
Jan Voung | 1248a6d | 2014-06-06 08:47:54 -0700 | [diff] [blame] | 43 | shellcmd(clang_path + ' -O2 -I{0} -c {1} -o {2}'.format( |
Jim Stichnoth | 5bc2b1d | 2014-05-22 13:38:48 -0700 | [diff] [blame] | 44 | includes_path, cname, llname)) |
| 45 | shellcmd(opt_path + |
Jan Voung | 1248a6d | 2014-06-06 08:47:54 -0700 | [diff] [blame] | 46 | ' -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' + |
Jim Stichnoth | 5bc2b1d | 2014-05-22 13:38:48 -0700 | [diff] [blame] | 47 | ('' if args.disable_verify else |
| 48 | ' -verify-pnaclabi-module -verify-pnaclabi-functions') + |
| 49 | ' -pnaclabi-allow-debug-metadata -disable-simplify-libcalls' |
| 50 | ' {0} -S -o {1}'.format(llname, pnaclname)) |