From 2dd032475bb21a20e0555e8db3068455fefe3b03 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 1 Dec 2022 12:51:01 +1300 Subject: [PATCH] Allow global setting of compile process limit (#4081) --- docker/ha-addon-rootfs/etc/services.d/esphome/run | 8 ++++++++ esphome/core/config.py | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docker/ha-addon-rootfs/etc/services.d/esphome/run b/docker/ha-addon-rootfs/etc/services.d/esphome/run index 2c821bf4ee..747c64728e 100755 --- a/docker/ha-addon-rootfs/etc/services.d/esphome/run +++ b/docker/ha-addon-rootfs/etc/services.d/esphome/run @@ -22,6 +22,14 @@ if bashio::config.has_value 'relative_url'; then export ESPHOME_DASHBOARD_RELATIVE_URL=$(bashio::config 'relative_url') fi +if bashio::config.has_value 'default_compile_process_limit'; then + export ESPHOME_DEFAULT_COMPILE_PROCESS_LIMIT=$(bashio::config 'default_compile_process_limit') +else + if grep -q 'Raspberry Pi 3' /proc/cpuinfo; then + export ESPHOME_DEFAULT_COMPILE_PROCESS_LIMIT=1; + fi +fi + pio_cache_base=/data/cache/platformio # we can't set core_dir, because the settings file is stored in `core_dir/appstate.json` # setting `core_dir` would therefore prevent pio from accessing diff --git a/esphome/core/config.py b/esphome/core/config.py index a40542c662..bf0beea2ef 100644 --- a/esphome/core/config.py +++ b/esphome/core/config.py @@ -110,6 +110,15 @@ def validate_version(value: str): return value +if "ESPHOME_DEFAULT_COMPILE_PROCESS_LIMIT" in os.environ: + _compile_process_limit_default = min( + int(os.environ["ESPHOME_DEFAULT_COMPILE_PROCESS_LIMIT"]), + multiprocessing.cpu_count(), + ) +else: + _compile_process_limit_default = cv.UNDEFINED + + CONF_ESP8266_RESTORE_FROM_FLASH = "esp8266_restore_from_flash" CONFIG_SCHEMA = cv.All( cv.Schema( @@ -153,9 +162,9 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_MIN_VERSION, default=ESPHOME_VERSION): cv.All( cv.version_number, validate_version ), - cv.Optional(CONF_COMPILE_PROCESS_LIMIT): cv.int_range( - min=1, max=multiprocessing.cpu_count() - ), + cv.Optional( + CONF_COMPILE_PROCESS_LIMIT, default=_compile_process_limit_default + ): cv.int_range(min=1, max=multiprocessing.cpu_count()), } ), validate_hostname,