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