about summary refs log tree commit diff homepage
path: root/scripts/klee-clang
blob: 2584024d9e785e5c71e6230f5b54dee88ab37915 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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()