Do not use cgcc; instead, extract compilation commands from compile_commands.json and invoke sparse directly. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			26 lines
		
	
	
		
			695 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			695 B
		
	
	
	
		
			Python
		
	
	
	
	
	
#! /usr/bin/env python3
 | 
						|
 | 
						|
# Invoke sparse based on the contents of compile_commands.json
 | 
						|
 | 
						|
import json
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import shlex
 | 
						|
 | 
						|
def extract_cflags(shcmd):
 | 
						|
    cflags = shlex.split(shcmd)
 | 
						|
    return [x for x in cflags
 | 
						|
            if x.startswith('-D') or x.startswith('-I') or x.startswith('-W')
 | 
						|
               or x.startswith('-std=')]
 | 
						|
 | 
						|
cflags = sys.argv[1:-1]
 | 
						|
with open(sys.argv[-1], 'r') as fd:
 | 
						|
    compile_commands = json.load(fd)
 | 
						|
 | 
						|
for cmd in compile_commands:
 | 
						|
    cmd = ['sparse'] + cflags + extract_cflags(cmd['command']) + [cmd['file']]
 | 
						|
    print(' '.join((shlex.quote(x) for x in cmd)))
 | 
						|
    r = subprocess.run(cmd)
 | 
						|
    if r.returncode != 0:
 | 
						|
        sys.exit(r.returncode)
 |