From 813e8935088025d31a6f44bc52e6759b398aef2d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 8 Mar 2026 11:54:32 -1000 Subject: [PATCH] [api] Define NATIVE_LITTLE_ENDIAN for libsodium on all targets libsodium's autoconf-generated config normally sets NATIVE_LITTLE_ENDIAN, but PlatformIO skips autoconf. Without this define, libsodium falls back to byte-at-a-time load/store operations in poly1305 and chacha20 instead of optimized 32-bit memcpy. This saves ~340 bytes of flash and improves encryption/decryption throughput on every API noise packet. Co-Authored-By: Claude Opus 4.6 --- esphome/components/api/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/esphome/components/api/__init__.py b/esphome/components/api/__init__.py index 4591b5dddac..966a0aa1003 100644 --- a/esphome/components/api/__init__.py +++ b/esphome/components/api/__init__.py @@ -455,7 +455,8 @@ async def to_code(config: ConfigType) -> None: cg.add_define("USE_API_NOISE") # libsodium uses NATIVE_LITTLE_ENDIAN to enable optimized 32-bit # load/store via memcpy instead of byte-at-a-time operations in - # poly1305 and chacha20. + # poly1305 and chacha20. All current ESPHome targets are + # little-endian (ESP32, ESP8266, RP2040, LibreTiny, host). if ( CORE.is_esp32 or CORE.is_esp8266 @@ -463,6 +464,7 @@ async def to_code(config: ConfigType) -> None: or CORE.is_bk72xx or CORE.is_rtl87xx or CORE.is_ln882x + or CORE.is_host ): cg.add_build_flag("-DNATIVE_LITTLE_ENDIAN") cg.add_library("esphome/noise-c", "0.1.10")