| #!/usr/bin/env python2 |
| |
| from __future__ import with_statement |
| |
| import sys |
| import os |
| import subprocess |
| |
| CC='..LLVM_GCC_DIR../llvm-gcc' |
| CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3'] |
| CC_ADDITIONAL_ARGS = ['-m32', '-U__i386__', '-U__x86_64__', '-UX87_DOUBLE_ROUNDING', '-UHAVE_GCC_ASM_FOR_X87'] |
| |
| #CC='llvm-gcc' |
| #CC_ARG_SKIP = ['-g', '-O1', '-O2', '-O3'] |
| #CC_ADDITIONAL_ARGS = ['-U__i386__', '-U__x86_64__'] |
| |
| LINK='..LLVM_DIR../llvm-link' |
| ALLOWED_LINK_ARGS = ['-f', '-help', '-o', '-print-after', '-print-after-all', '-print-before', |
| '-print-before-all', '-time-passes', '-v', '-verify-dom-info', '-version' ] |
| #LINK_ARG_SKIP = ['-pthread', '-DNDEBUG', '-g', '-O3', '-Wall', '-Wstrict-prototypes', |
| # '-lpthread', '-ldl', '-lutil', '-Xlinker', '-export-dynamic', '-lm', '-shared'] |
| |
| # ---------------- End configs ------------- |
| |
| # no-op if called as ranlibproxy.py |
| if os.path.basename(sys.argv[0])=='ranlibproxy.py': |
| sys.exit(0) |
| |
| |
| use_linker = True |
| #use_linker = False |
| |
| opts = [] |
| files = [] |
| for arg in sys.argv[1:]: |
| if arg.startswith('-'): |
| opts.append(arg) |
| else: |
| files.append(arg) |
| if arg.endswith('.c'): |
| use_linker = False |
| |
| if '--version' in opts: |
| use_linker = False |
| |
| if use_linker: |
| call = LINK |
| newargs = [] |
| found_o = False |
| for arg in sys.argv[1:]: |
| if os.path.basename(sys.argv[0])=='arproxy.py': |
| if arg.endswith('.a'): |
| newargs.append('-o=%s' % arg) |
| elif arg.endswith('.o'): |
| newargs.append(arg) |
| else: |
| pass |
| continue |
| if found_o: |
| newargs.append('-o=%s' % arg) |
| found_o = False |
| continue |
| if arg.startswith('-'): |
| if arg == '-o': |
| found_o = True |
| continue |
| prefix = arg.split('=')[0] |
| if prefix in ALLOWED_LINK_ARGS: |
| newargs.append(arg) |
| else: |
| # not option, so just append |
| newargs.append(arg) |
| else: |
| call = CC |
| newargs = [ arg for arg in sys.argv[1:] if arg not in CC_ARG_SKIP ] + CC_ADDITIONAL_ARGS |
| if 'conftest.c' not in files: |
| newargs.append('-emit-llvm') |
| if CC=='llvm-gcc': |
| newargs.append('-c') |
| |
| with open('ccproxy.log', 'a') as f: |
| f.write('## Called with %s\n' % ' '.join(sys.argv)) |
| f.write('** Calling %s %s\n\n' % (call, ' '.join(newargs))) |
| f.flush() |
| |
| print "Running:", call, newargs |
| |
| subprocess.call([call] + newargs) |