diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/klee-clang | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/scripts/klee-clang b/scripts/klee-clang new file mode 100755 index 00000000..2584024d --- /dev/null +++ b/scripts/klee-clang @@ -0,0 +1,44 @@ +#!/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() + |