about summary refs log tree commit diff homepage
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()
+