mirror of
https://github.com/esphome/esphome.git
synced 2026-09-29 07:50:21 +00:00
51 lines
1.8 KiB
Plaintext
51 lines
1.8 KiB
Plaintext
# pylint: disable=E0602
|
|
Import("env") # noqa
|
|
|
|
import os
|
|
|
|
# Filter out waveform/PWM code from the Arduino core build
|
|
# This saves ~596 bytes of RAM and 464 bytes of flash by not
|
|
# instantiating the waveform generator state structures (wvfState + pwmState).
|
|
#
|
|
# The waveform code is used by: analogWrite, Tone, Servo, and direct
|
|
# startWaveform/stopWaveform calls. ESPHome's esp8266_pwm component
|
|
# calls require_waveform() to keep this code when needed.
|
|
#
|
|
# When excluded, we provide stub implementations of stopWaveform() and
|
|
# _stopPWM() since digitalWrite() calls these unconditionally.
|
|
|
|
|
|
def has_define_flag(env, name):
|
|
"""Check if a define exists in the build flags."""
|
|
define_flag = f"-D{name}"
|
|
# Check BUILD_FLAGS (where ESPHome puts its defines)
|
|
for flag in env.get("BUILD_FLAGS", []):
|
|
if flag == define_flag or flag.startswith(f"{define_flag}="):
|
|
return True
|
|
# Also check CPPDEFINES list (parsed defines)
|
|
for define in env.get("CPPDEFINES", []):
|
|
if isinstance(define, tuple):
|
|
if define[0] == name:
|
|
return True
|
|
elif define == name:
|
|
return True
|
|
return False
|
|
|
|
# USE_ESP8266_WAVEFORM_STUBS is defined when no component needs waveform
|
|
if has_define_flag(env, "USE_ESP8266_WAVEFORM_STUBS"):
|
|
|
|
def filter_waveform_from_core(env, node):
|
|
"""Filter callback to exclude waveform files from framework build."""
|
|
path = node.get_path()
|
|
filename = os.path.basename(path)
|
|
if filename in (
|
|
"core_esp8266_waveform_pwm.cpp",
|
|
"core_esp8266_waveform_phase.cpp",
|
|
):
|
|
print(f"ESPHome: Excluding {filename} from build (waveform not required)")
|
|
return None
|
|
return node
|
|
|
|
# Apply the filter to framework sources
|
|
env.AddBuildMiddleware(filter_waveform_from_core, "**/cores/esp8266/*.cpp")
|