forked from OSchip/llvm-project
55 lines
1.5 KiB
Python
Executable File
55 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import subprocess
|
|
import difflib
|
|
|
|
def capture_2(args0, args1):
|
|
import subprocess
|
|
p0 = subprocess.Popen(args0, stdin=None, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
p1 = subprocess.Popen(args1, stdin=p0.stdout, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
out,_ = p1.communicate()
|
|
return out
|
|
|
|
def normalize_nm(data):
|
|
lines = data.split('\n')
|
|
lines.sort()
|
|
|
|
# FIXME: Ignore common symbols for now.
|
|
lines = [ln for ln in lines
|
|
if not ln.startswith(' C')]
|
|
|
|
return lines
|
|
|
|
def main():
|
|
import sys
|
|
clang = sys.argv[1]
|
|
flags = sys.argv[2:]
|
|
|
|
# FIXME: Relax to include undefined symbols.
|
|
nm_args = ["llvm-nm", "-extern-only", "-defined-only"]
|
|
|
|
llvmgcc_args = ["llvm-gcc"] + flags + ["-emit-llvm","-c","-o","-"]
|
|
clang_args = [clang] + flags + ["-emit-llvm","-c","-o","-"]
|
|
|
|
llvmgcc_nm = capture_2(llvmgcc_args, nm_args)
|
|
clang_nm = capture_2(clang_args, nm_args)
|
|
|
|
llvmgcc_nm = normalize_nm(llvmgcc_nm)
|
|
clang_nm = normalize_nm(clang_nm)
|
|
|
|
if llvmgcc_nm == clang_nm:
|
|
sys.exit(0)
|
|
|
|
print ' '.join(llvmgcc_args), '|', ' '.join(nm_args)
|
|
print ' '.join(clang_args), '|', ' '.join(nm_args)
|
|
for line in difflib.unified_diff(llvmgcc_nm, clang_nm,
|
|
fromfile="llvm-gcc symbols",
|
|
tofile="clang symbols"):
|
|
print line
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|