Merge remote-tracking branch 'upstream/master' into develop
This commit is contained in:
		
						commit
						ac80cee9da
					
				
					 20 changed files with 458 additions and 109 deletions
				
			
		| 
						 | 
				
			
			@ -25,7 +25,6 @@ def system_libs(binary: str) -> List[Path]:
 | 
			
		|||
    """Find the system include directory that the given build tool uses.
 | 
			
		||||
    """
 | 
			
		||||
    cli.log.debug("searching for system library directory for binary: %s", binary)
 | 
			
		||||
    bin_path = shutil.which(binary)
 | 
			
		||||
 | 
			
		||||
    # Actually query xxxxxx-gcc to find its include paths.
 | 
			
		||||
    if binary.endswith("gcc") or binary.endswith("g++"):
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +36,31 @@ def system_libs(binary: str) -> List[Path]:
 | 
			
		|||
                paths.append(Path(line.strip()).resolve())
 | 
			
		||||
        return paths
 | 
			
		||||
 | 
			
		||||
    return list(Path(bin_path).resolve().parent.parent.glob("*/include")) if bin_path else []
 | 
			
		||||
    return list(Path(binary).resolve().parent.parent.glob("*/include")) if binary else []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@lru_cache(maxsize=10)
 | 
			
		||||
def cpu_defines(binary: str, compiler_args: str) -> List[str]:
 | 
			
		||||
    cli.log.debug("gathering definitions for compilation: %s %s", binary, compiler_args)
 | 
			
		||||
    if binary.endswith("gcc") or binary.endswith("g++"):
 | 
			
		||||
        invocation = [binary, '-dM', '-E']
 | 
			
		||||
        if binary.endswith("gcc"):
 | 
			
		||||
            invocation.extend(['-x', 'c'])
 | 
			
		||||
        elif binary.endswith("g++"):
 | 
			
		||||
            invocation.extend(['-x', 'c++'])
 | 
			
		||||
        compiler_args = shlex.split(compiler_args)
 | 
			
		||||
        invocation.extend(compiler_args)
 | 
			
		||||
        invocation.append('-')
 | 
			
		||||
        result = cli.run(invocation, capture_output=True, check=True, stdin=None, input='\n')
 | 
			
		||||
        define_args = []
 | 
			
		||||
        for line in result.stdout.splitlines():
 | 
			
		||||
            line_args = line.split(' ', 2)
 | 
			
		||||
            if len(line_args) == 3 and line_args[0] == '#define':
 | 
			
		||||
                define_args.append(f'-D{line_args[1]}={line_args[2]}')
 | 
			
		||||
            elif len(line_args) == 2 and line_args[0] == '#define':
 | 
			
		||||
                define_args.append(f'-D{line_args[1]}')
 | 
			
		||||
        return list(sorted(set(define_args)))
 | 
			
		||||
    return []
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
file_re = re.compile(r'printf "Compiling: ([^"]+)')
 | 
			
		||||
| 
						 | 
				
			
			@ -68,9 +91,12 @@ def parse_make_n(f: Iterator[str]) -> List[Dict[str, str]]:
 | 
			
		|||
                # we have a hit!
 | 
			
		||||
                this_cmd = m.group(1)
 | 
			
		||||
                args = shlex.split(this_cmd)
 | 
			
		||||
                for s in system_libs(args[0]):
 | 
			
		||||
                binary = shutil.which(args[0])
 | 
			
		||||
                compiler_args = set(filter(lambda x: x.startswith('-m') or x.startswith('-f'), args))
 | 
			
		||||
                for s in system_libs(binary):
 | 
			
		||||
                    args += ['-isystem', '%s' % s]
 | 
			
		||||
                new_cmd = ' '.join(shlex.quote(s) for s in args if s != '-mno-thumb-interwork')
 | 
			
		||||
                args.extend(cpu_defines(binary, ' '.join(shlex.quote(s) for s in compiler_args)))
 | 
			
		||||
                new_cmd = ' '.join(shlex.quote(s) for s in args)
 | 
			
		||||
                records.append({"directory": str(QMK_FIRMWARE.resolve()), "command": new_cmd, "file": this_file})
 | 
			
		||||
                state = 'start'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue