mirror of
https://github.com/esphome/esphome.git
synced 2026-05-22 18:56:40 +08:00
[api] Compile noise-c and libsodium with -O2 for speed
Crypto libraries are CPU-bound and benefit significantly from speed optimization over the default -Os. Add a post: extra_script that appends -O2 to noise-c and libsodium build flags when API noise encryption is enabled. GCC uses the last -O flag, so this overrides the global -Os for these libraries only.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import base64
|
||||
import logging
|
||||
import pathlib
|
||||
|
||||
from esphome import automation
|
||||
from esphome.automation import Condition
|
||||
@@ -458,6 +459,10 @@ async def to_code(config: ConfigType) -> None:
|
||||
# Enable optimized memzero/memcmp in libsodium instead of volatile byte loops
|
||||
cg.add_build_flag("-DHAVE_WEAK_SYMBOLS=1")
|
||||
cg.add_build_flag("-DHAVE_INLINE_ASM=1")
|
||||
# Compile crypto libraries with -O2 for speed instead of -Os.
|
||||
# Crypto is CPU-bound and benefits significantly from speed optimization.
|
||||
# GCC uses the last -O flag, so appending -O2 overrides the global -Os.
|
||||
_write_crypto_optimize_script()
|
||||
else:
|
||||
cg.add_define("USE_API_PLAINTEXT")
|
||||
|
||||
@@ -465,6 +470,17 @@ async def to_code(config: ConfigType) -> None:
|
||||
cg.add_global(api_ns.using)
|
||||
|
||||
|
||||
_CRYPTO_OPTIMIZE_SCRIPT = "crypto_optimize.py"
|
||||
|
||||
|
||||
def _write_crypto_optimize_script() -> None:
|
||||
from esphome.helpers import copy_file_if_changed
|
||||
|
||||
script_src = pathlib.Path(__file__).parent / f"{_CRYPTO_OPTIMIZE_SCRIPT}.script"
|
||||
copy_file_if_changed(script_src, CORE.relative_build_path(_CRYPTO_OPTIMIZE_SCRIPT))
|
||||
cg.add_platformio_option("extra_scripts", [f"post:{_CRYPTO_OPTIMIZE_SCRIPT}"])
|
||||
|
||||
|
||||
KEY_VALUE_SCHEMA = cv.Schema({cv.string: cv.templatable(cv.string_strict)})
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Compile crypto libraries with -O2 for speed instead of the default -Os.
|
||||
# Crypto is CPU-bound and benefits significantly from speed optimization.
|
||||
# GCC uses the last -O flag, so appending -O2 overrides the global -Os
|
||||
# for these libraries only.
|
||||
Import("env")
|
||||
|
||||
for lb in env.GetLibBuilders():
|
||||
if lb.name in ("noise-c", "libsodium"):
|
||||
lb.env.Append(CCFLAGS=["-O2"])
|
||||
Reference in New Issue
Block a user