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()
 |