Merge branch 'esp8266-native-toolchain-plumbing' into esp8266-native-build-infra

This commit is contained in:
J. Nick Koston
2026-08-21 01:05:51 -05:00
4 changed files with 41 additions and 13 deletions
+9 -8
View File
@@ -2734,14 +2734,15 @@ def run_esphome(argv):
# Skipped when -s overrides are passed, since the cache was written
# against the previous substitution set.
config: ConfigType | None = None
cache_eligible = (
args.command in ("upload", "logs")
and not command_line_substitutions
# An explicit CLI toolchain must run the per-platform validators;
# the cache was validated under whatever the last compile used
and args.toolchain is None
cache_write_eligible = (
args.command in ("upload", "logs") and not command_line_substitutions
)
if cache_eligible:
# An explicit CLI toolchain must run the per-platform validators; the
# cache was validated under whatever the last compile used. Only the
# read is gated: the refresh below may still save the freshly
# validated config, and its sidecar records the resolved toolchain.
cache_read_eligible = cache_write_eligible and args.toolchain is None
if cache_read_eligible:
from esphome.compiled_config import load_compiled_config
config = load_compiled_config(conf_path)
@@ -2775,7 +2776,7 @@ def run_esphome(argv):
# Refresh the cache so the next upload/logs hits the fast path
# instead of re-running read_config.
if cache_eligible and cache_missed:
if cache_write_eligible and cache_missed:
from esphome.compiled_config import save_compiled_config_and_sidecar
save_compiled_config_and_sidecar(config)
+7 -4
View File
@@ -2537,7 +2537,7 @@ def platformio_version_constraint(value):
return constraints
def check_supported_toolchain(
def _check_supported_toolchain(
platform_name: str, supported: tuple[Toolchain, ...]
) -> None:
"""Raise when the resolved ``CORE.toolchain`` is not in ``supported``.
@@ -2582,7 +2582,7 @@ def resolve_toolchain(
def validator(config: ConfigType) -> ConfigType:
if CORE.toolchain is None:
CORE.toolchain = config.get(CONF_TOOLCHAIN, default)
check_supported_toolchain(platform_name, supported)
_check_supported_toolchain(platform_name, supported)
return config
return validator
@@ -2593,8 +2593,11 @@ def require_platformio_toolchain(
) -> Callable[[ConfigType], ConfigType]:
"""Reject a CLI-selected toolchain other than PlatformIO.
For platforms with only the PlatformIO backend; without this a
``--toolchain`` they cannot serve would silently build with PlatformIO.
For platforms with only the PlatformIO backend. Without this a
``--toolchain`` they cannot serve would either build with PlatformIO
while claiming another backend, or (for a toolchain another platform
owns, like ``esp-idf``) dispatch to a native backend that cannot
build this platform at all.
"""
return resolve_toolchain(
platform_name, (Toolchain.PLATFORMIO,), Toolchain.PLATFORMIO