* fbt: split sdk management code * scripts: fixed import handling * fbt: sdk: reformatted paths * scrips: dist: bundling libs as a build artifact * fbt: sdk: better path management * typo fix * fbt: sdk: minor path handling fixes * toolchain: fixed windows toolchain download * fbt: minor refactorin * fbt: moved sdk management code to extapps.scons * fbt: fixed sdk symbols header path; disabled -fstack-usage * fbt: changed pathing for .py scripts * fbt: changed SDK_HEADERS pathing; added libusb to SDK; added icon_i.h to SDK; added hw target to SDK meta * fbt: added libusb headers to SDK * picopass: include cleanup; api: added subghz/registry.h; api: added mbedtls to exported headers * picopass: fixed formatting * fbt: fixed COPRO_ASSETS_SCRIPT * sdk: added basic infrared apis * toolchain: added ufbt to list of legal fbtenv callers; updated error messages * fbt: changed manifest collection & icon processing code * fbt: simpler srcdir lookup * toolchain: path management fixes; fbt: fixes for fap private libs paths * scripts: toolchain: reworked download on Windows * toolchain: v17 * scripts: added colorlog for logging * Github: fix unit tests Co-authored-by: あく <alleteam@gmail.com>
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from SCons.Errors import StopError
 | 
						|
from SCons.Tool import asm
 | 
						|
from SCons.Tool import gcc
 | 
						|
from SCons.Tool import gxx
 | 
						|
from SCons.Tool import ar
 | 
						|
from SCons.Tool import gnulink
 | 
						|
import strip
 | 
						|
import gdb
 | 
						|
import objdump
 | 
						|
 | 
						|
from SCons.Action import _subproc
 | 
						|
import subprocess
 | 
						|
 | 
						|
 | 
						|
def prefix_commands(env, command_prefix, cmd_list):
 | 
						|
    for command in cmd_list:
 | 
						|
        if command in env:
 | 
						|
            env[command] = command_prefix + env[command]
 | 
						|
 | 
						|
 | 
						|
def _get_tool_version(env, tool):
 | 
						|
    verstr = "version unknown"
 | 
						|
    proc = _subproc(
 | 
						|
        env,
 | 
						|
        env.subst("${%s} --version" % tool),
 | 
						|
        stdout=subprocess.PIPE,
 | 
						|
        stderr="devnull",
 | 
						|
        stdin="devnull",
 | 
						|
        universal_newlines=True,
 | 
						|
        error="raise",
 | 
						|
        shell=True,
 | 
						|
    )
 | 
						|
    if proc:
 | 
						|
        verstr = proc.stdout.readline()
 | 
						|
        proc.communicate()
 | 
						|
    return verstr
 | 
						|
 | 
						|
 | 
						|
def generate(env, **kw):
 | 
						|
    if not env.get("VERBOSE", False):
 | 
						|
        env.SetDefault(
 | 
						|
            CCCOMSTR="\tCC\t${SOURCE}",
 | 
						|
            CXXCOMSTR="\tCPP\t${SOURCE}",
 | 
						|
            ASCOMSTR="\tASM\t${SOURCE}",
 | 
						|
            ARCOMSTR="\tAR\t${TARGET}",
 | 
						|
            RANLIBCOMSTR="\tRANLIB\t${TARGET}",
 | 
						|
            LINKCOMSTR="\tLINK\t${TARGET}",
 | 
						|
            INSTALLSTR="\tINSTALL\t${TARGET}",
 | 
						|
            APPSCOMSTR="\tAPPS\t${TARGET}",
 | 
						|
            VERSIONCOMSTR="\tVERSION\t${TARGET}",
 | 
						|
            STRIPCOMSTR="\tSTRIP\t${TARGET}",
 | 
						|
            OBJDUMPCOMSTR="\tOBJDUMP\t${TARGET}",
 | 
						|
        )
 | 
						|
 | 
						|
    for orig_tool in (asm, gcc, gxx, ar, gnulink, strip, gdb, objdump):
 | 
						|
        orig_tool.generate(env)
 | 
						|
    env.SetDefault(
 | 
						|
        TOOLCHAIN_PREFIX=kw.get("toolchain_prefix"),
 | 
						|
    )
 | 
						|
    prefix_commands(
 | 
						|
        env,
 | 
						|
        env.subst("$TOOLCHAIN_PREFIX"),
 | 
						|
        [
 | 
						|
            "AR",
 | 
						|
            "AS",
 | 
						|
            "CC",
 | 
						|
            "CXX",
 | 
						|
            "OBJCOPY",
 | 
						|
            "RANLIB",
 | 
						|
            "STRIP",
 | 
						|
            "GDB",
 | 
						|
            "GDBPY",
 | 
						|
            "OBJDUMP",
 | 
						|
        ],
 | 
						|
    )
 | 
						|
    # Call CC to check version
 | 
						|
    if whitelisted_versions := kw.get("versions", ()):
 | 
						|
        cc_version = _get_tool_version(env, "CC")
 | 
						|
        # print("CC version =", cc_version)
 | 
						|
        # print(list(filter(lambda v: v in cc_version, whitelisted_versions)))
 | 
						|
        if not any(filter(lambda v: v in cc_version, whitelisted_versions)):
 | 
						|
            raise StopError(
 | 
						|
                f"Toolchain version is not supported. Allowed: {whitelisted_versions}, toolchain: {cc_version} "
 | 
						|
            )
 | 
						|
 | 
						|
 | 
						|
def exists(env):
 | 
						|
    return True
 |