flipperzero-firmware/lib/print/SConscript
SG bc34689ed6
Make printf great again (#1438)
* 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>
2022-08-04 01:00:17 +09:00

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