#!/usr/bin/env python import os, sys import subprocess def isLinkCommand(): # Look for '-Wl,' as a signal that we are calling the linker. What a hack. for arg in sys.argv: if arg.startswith('-Wl,'): return True def main(): llvm_path = subprocess.Popen(["llvm-config", "--bindir"], stdout=subprocess.PIPE).communicate()[0].strip() if not isLinkCommand(): os.execvp(llvm_path+"/clang", ["clang", "-emit-llvm", "-c"] + sys.argv[1:]) return 1 # Otherwise, strip out arguments that llvm-ld doesn't understand. I don't # want my previous explicit declaration of hackyness to imply that this bit # of code here is not also a complete and total hack, it is. args = sys.argv[1:] linkArgs = [] for a in args: if a in ('-g', '-W', '-O', '-D', '-f', '-fnested-functions', '-pthread'): continue elif a.startswith('-Wl,'): continue if a in linkArgs: continue if a.startswith('-l'): continue linkArgs.append(a) os.execvp(llvm_path+"/llvm-link", [llvm_path+"/llvm-link"] + linkArgs) return 1 if __name__ == '__main__': main()