blob: 9395fc7f5777a5dfc25aabcc5e750efce3f30b08 [file] [log] [blame]
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -07001#!/usr/bin/env python2
2
3import argparse
4import os
5import sys
6import tempfile
7from utils import shellcmd
8
9if __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 '''\
26Please 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 Voung1248a6d2014-06-06 08:47:54 -070043 shellcmd(clang_path + ' -O2 -I{0} -c {1} -o {2}'.format(
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070044 includes_path, cname, llname))
45 shellcmd(opt_path +
Jan Voung1248a6d2014-06-06 08:47:54 -070046 ' -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' +
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070047 ('' 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))