mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
tweak
This commit is contained in:
@@ -1,21 +1,28 @@
|
|||||||
# pylint: disable=E0602
|
# pylint: disable=E0602
|
||||||
Import("env") # noqa
|
Import("env") # noqa
|
||||||
|
|
||||||
# Remove float scanf support from linker flags
|
# Remove forced scanf linkage to allow garbage collection of unused code
|
||||||
# The Arduino ESP8266 framework unconditionally adds:
|
|
||||||
# -u _printf_float -u _scanf_float
|
|
||||||
# ESPHome doesn't use scanf with %f, so _scanf_float is not needed.
|
|
||||||
#
|
#
|
||||||
# Savings:
|
# The ESP8266 Arduino framework unconditionally adds:
|
||||||
# - _scanf_float: ~1.3KB
|
# -u _printf_float -u _scanf_float
|
||||||
# - _strtod_l: ~3.7KB (string-to-double, only needed by scanf float)
|
#
|
||||||
# - Related float parsing helpers
|
# The -u flag forces symbols to be linked even if unreferenced, which pulls
|
||||||
|
# in the entire scanf family (~7-8KB). ESPHome doesn't use scanf at all
|
||||||
|
# (verified by CI check in PR #13657), so this is pure dead weight.
|
||||||
|
#
|
||||||
|
# By removing -u _scanf_float, --gc-sections can eliminate:
|
||||||
|
# - scanf family functions (~7KB)
|
||||||
|
# - _strtod_l (~3.7KB)
|
||||||
|
# - Related parsing infrastructure
|
||||||
|
#
|
||||||
|
# We keep -u _printf_float because components still use %f in logging.
|
||||||
|
|
||||||
|
|
||||||
def remove_scanf_float_flag(source, target, env):
|
def remove_scanf_float_flag(source, target, env):
|
||||||
"""Remove -u _scanf_float from linker flags.
|
"""Remove -u _scanf_float from linker flags.
|
||||||
|
|
||||||
This is called as a pre-action before the link step.
|
This is called as a pre-action before the link step, after the
|
||||||
|
Arduino framework has added its default flags.
|
||||||
"""
|
"""
|
||||||
linkflags = env.get("LINKFLAGS", [])
|
linkflags = env.get("LINKFLAGS", [])
|
||||||
new_linkflags = []
|
new_linkflags = []
|
||||||
@@ -26,7 +33,7 @@ def remove_scanf_float_flag(source, target, env):
|
|||||||
if flag == "-u" and i + 1 < len(linkflags):
|
if flag == "-u" and i + 1 < len(linkflags):
|
||||||
next_flag = linkflags[i + 1]
|
next_flag = linkflags[i + 1]
|
||||||
if next_flag == "_scanf_float":
|
if next_flag == "_scanf_float":
|
||||||
print("ESPHome: Removing float scanf support (_scanf_float)")
|
print("ESPHome: Removing _scanf_float (saves ~8KB flash)")
|
||||||
i += 2 # Skip both -u and the symbol
|
i += 2 # Skip both -u and the symbol
|
||||||
continue
|
continue
|
||||||
new_linkflags.append(flag)
|
new_linkflags.append(flag)
|
||||||
|
|||||||
Reference in New Issue
Block a user