* Printf lib: wrap *printf* functions * Printf lib, FW: drop sprintf. Dolphin: dump timestamp as is, wo asctime. * FW: remove sniprintf, wrap assert functions * Printf lib: wrap putc, puts, putchar * Printf: a working but not thread-safe concept. * Poorly wrap fflush * stdglue: buffers * Core: thread local buffers * Core: move stdglue to thread api, add ability to get FuriThread instance of current thread. * RPC tests: replace sprintf with snprintf * Applications: use new stdout api * Printf lib: wrap more printf-like and stdout functions * Documentation * Apps: snprintf size fixes Co-authored-by: あく <alleteam@gmail.com>
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
Import("env")
 | 
						|
 | 
						|
wrapped_fn_list = [
 | 
						|
    #
 | 
						|
    # used by our firmware, so we provide their realizations
 | 
						|
    #
 | 
						|
    "fflush",
 | 
						|
    "printf",
 | 
						|
    "putc",  # fallback from printf, thanks gcc
 | 
						|
    "putchar",  # storage cli
 | 
						|
    "puts",  # fallback from printf, thanks gcc
 | 
						|
    "snprintf",
 | 
						|
    "vsnprintf",  # m-string
 | 
						|
    "__assert",  # ???
 | 
						|
    "__assert_func",  # ???
 | 
						|
    #
 | 
						|
    # wrap other functions to make sure they are not called
 | 
						|
    # realization is not provided
 | 
						|
    #
 | 
						|
    "setbuf",
 | 
						|
    "setvbuf",
 | 
						|
    "fprintf",
 | 
						|
    "vfprintf",
 | 
						|
    "vprintf",
 | 
						|
    "fputc",
 | 
						|
    "fputs",
 | 
						|
    "sprintf",  # specially, because this function is dangerous
 | 
						|
    "asprintf",
 | 
						|
    "vasprintf",
 | 
						|
    "asiprintf",
 | 
						|
    "asniprintf",
 | 
						|
    "asnprintf",
 | 
						|
    "diprintf",
 | 
						|
    "fiprintf",
 | 
						|
    "iprintf",
 | 
						|
    "siprintf",
 | 
						|
    "sniprintf",
 | 
						|
    "vasiprintf",
 | 
						|
    "vasniprintf",
 | 
						|
    "vasnprintf",
 | 
						|
    "vdiprintf",
 | 
						|
    "vfiprintf",
 | 
						|
    "viprintf",
 | 
						|
    "vsiprintf",
 | 
						|
    "vsniprintf",
 | 
						|
    #
 | 
						|
    # Scanf is not implemented 4 now
 | 
						|
    #
 | 
						|
    # "fscanf",
 | 
						|
    # "scanf",
 | 
						|
    # "sscanf",
 | 
						|
    # "vsprintf",
 | 
						|
    # "fgetc",
 | 
						|
    # "fgets",
 | 
						|
    # "getc",
 | 
						|
    # "getchar",
 | 
						|
    # "gets",
 | 
						|
    # "ungetc",
 | 
						|
    # "vfscanf",
 | 
						|
    # "vscanf",
 | 
						|
    # "vsscanf",
 | 
						|
    # "fiscanf",
 | 
						|
    # "iscanf",
 | 
						|
    # "siscanf",
 | 
						|
    # "vfiscanf",
 | 
						|
    # "viscanf",
 | 
						|
    # "vsiscanf",
 | 
						|
    #
 | 
						|
    # File management
 | 
						|
    #
 | 
						|
    # "fclose",
 | 
						|
    # "freopen",
 | 
						|
    # "fread",
 | 
						|
    # "fwrite",
 | 
						|
    # "fgetpos",
 | 
						|
    # "fseek",
 | 
						|
    # "fsetpos",
 | 
						|
    # "ftell",
 | 
						|
    # "rewind",
 | 
						|
    # "feof",
 | 
						|
    # "ferror",
 | 
						|
    # "fopen",
 | 
						|
    # "remove",
 | 
						|
    # "rename",
 | 
						|
    # "fseeko",
 | 
						|
    # "ftello",
 | 
						|
]
 | 
						|
 | 
						|
for wrapped_fn in wrapped_fn_list:
 | 
						|
    env.Append(
 | 
						|
        LINKFLAGS=[
 | 
						|
            "-Wl,--wrap," + wrapped_fn,
 | 
						|
            "-Wl,--wrap," + wrapped_fn + "_unlocked",
 | 
						|
            "-Wl,--wrap,_" + wrapped_fn + "_r",
 | 
						|
            "-Wl,--wrap,_" + wrapped_fn + "_unlocked_r",
 | 
						|
        ]
 | 
						|
    )
 | 
						|
 | 
						|
libenv = env.Clone(FW_LIB_NAME="print")
 | 
						|
libenv.ApplyLibFlags()
 | 
						|
libenv.Append(CCFLAGS=["-Wno-double-promotion"])
 | 
						|
 | 
						|
sources = libenv.GlobRecursive("*.c*", ".")
 | 
						|
 | 
						|
lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources)
 | 
						|
libenv.Install("${LIB_DIST_DIR}", lib)
 | 
						|
Return("lib")
 |