 ebc2b66372
			
		
	
	
		ebc2b66372
		
			
		
	
	
	
	
		
			
			* 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>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import SCons
 | |
| from SCons.Subst import quote_spaces
 | |
| from SCons.Errors import StopError
 | |
| from SCons.Node.FS import _my_normcase
 | |
| 
 | |
| import re
 | |
| import os
 | |
| 
 | |
| 
 | |
| WINPATHSEP_RE = re.compile(r"\\([^\"'\\]|$)")
 | |
| 
 | |
| 
 | |
| def tempfile_arg_esc_func(arg):
 | |
|     arg = quote_spaces(arg)
 | |
|     if SCons.Platform.platform_default() != "win32":
 | |
|         return arg
 | |
|     # GCC requires double Windows slashes, let's use UNIX separator
 | |
|     return WINPATHSEP_RE.sub(r"/\1", arg)
 | |
| 
 | |
| 
 | |
| def wrap_tempfile(env, command):
 | |
|     env[command] = '${TEMPFILE("' + env[command] + '","$' + command + 'STR")}'
 | |
| 
 | |
| 
 | |
| def link_dir(target_path, source_path, is_windows):
 | |
|     # print(f"link_dir: {target_path} -> {source_path}")
 | |
|     if os.path.lexists(target_path) or os.path.exists(target_path):
 | |
|         os.unlink(target_path)
 | |
|     if is_windows:
 | |
|         # Crete junction
 | |
|         import _winapi
 | |
| 
 | |
|         if not os.path.isdir(source_path):
 | |
|             raise StopError(f"Source directory {source_path} is not a directory")
 | |
| 
 | |
|         if not os.path.exists(target_path):
 | |
|             _winapi.CreateJunction(source_path, target_path)
 | |
|     else:
 | |
|         os.symlink(source_path, target_path)
 | |
| 
 | |
| 
 | |
| def single_quote(arg_list):
 | |
|     return " ".join(f"'{arg}'" if " " in arg else str(arg) for arg in arg_list)
 | |
| 
 | |
| 
 | |
| def extract_abs_dir_path(node):
 | |
|     if isinstance(node, SCons.Node.FS.EntryProxy):
 | |
|         node = node.get()
 | |
| 
 | |
|     for repo_dir in node.get_all_rdirs():
 | |
|         if os.path.exists(repo_dir.abspath):
 | |
|             return repo_dir.abspath
 | |
| 
 | |
|     raise StopError(f"Can't find absolute path for {node.name}")
 |