* 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")
 |