aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xscripts/klee-clang44
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()
+