blob: 67dbefdbb71d950c8d3efb3d0726337875d062cb [file] [log] [blame]
#!/usr/bin/env python2
import argparse
import os
import sys
import tempfile
from utils import shellcmd
if __name__ == '__main__':
argparser = argparse.ArgumentParser()
argparser.add_argument('cfile', nargs='+', type=str,
help='C file(s) to convert')
argparser.add_argument('--nacl_sdk_root', nargs='?', type=str,
help='Path to NACL_SDK_ROOT')
argparser.add_argument('--dir', nargs='?', type=str, default='.',
help='Output directory')
argparser.add_argument('--disable-verify', action='store_true')
args = argparser.parse_args()
nacl_sdk_root = os.environ.get('NACL_SDK_ROOT', None)
if args.nacl_sdk_root:
nacl_sdk_root = os.path.expanduser(args.nacl_sdk_root)
if not nacl_sdk_root or not os.path.exists(nacl_sdk_root):
print '''\
Please set the NACL_SDK_ROOT environment variable or pass the path through
--nacl_sdk_root to point to a valid Native Client SDK installation.'''
sys.exit(1)
includes_path = os.path.join(nacl_sdk_root, 'include')
toolchain_path = os.path.join(nacl_sdk_root, 'toolchain', 'linux_pnacl')
clang_path = os.path.join(toolchain_path, 'bin64', 'pnacl-clang')
opt_path = os.path.join(toolchain_path, 'host_x86_64', 'bin', 'opt')
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(clang_path + ' -I{0} -c {1} -o {2}'.format(
includes_path, cname, llname))
shellcmd(opt_path +
' -O2 -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt' +
('' if args.disable_verify else
' -verify-pnaclabi-module -verify-pnaclabi-functions') +
' -pnaclabi-allow-debug-metadata -disable-simplify-libcalls'
' {0} -S -o {1}'.format(llname, pnaclname))