Build with C++17 (#8603)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Jimmy Hedman 2025-06-14 15:21:39 +02:00 committed by GitHub
parent 92ea697119
commit ee37d2f9c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 103 additions and 1 deletions

View File

@ -22,6 +22,7 @@ from esphome.cpp_generator import ( # noqa: F401
TemplateArguments, TemplateArguments,
add, add,
add_build_flag, add_build_flag,
add_build_unflag,
add_define, add_define,
add_global, add_global,
add_library, add_library,
@ -34,6 +35,7 @@ from esphome.cpp_generator import ( # noqa: F401
process_lambda, process_lambda,
progmem_array, progmem_array,
safe_exp, safe_exp,
set_cpp_standard,
statement, statement,
static_const_array, static_const_array,
templatable, templatable,

View File

@ -695,6 +695,7 @@ FINAL_VALIDATE_SCHEMA = cv.Schema(final_validate)
async def to_code(config): async def to_code(config):
cg.add_platformio_option("board", config[CONF_BOARD]) cg.add_platformio_option("board", config[CONF_BOARD])
cg.add_platformio_option("board_upload.flash_size", config[CONF_FLASH_SIZE]) cg.add_platformio_option("board_upload.flash_size", config[CONF_FLASH_SIZE])
cg.set_cpp_standard("gnu++17")
cg.add_build_flag("-DUSE_ESP32") cg.add_build_flag("-DUSE_ESP32")
cg.add_define("ESPHOME_BOARD", config[CONF_BOARD]) cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
cg.add_build_flag(f"-DUSE_ESP32_VARIANT_{config[CONF_VARIANT]}") cg.add_build_flag(f"-DUSE_ESP32_VARIANT_{config[CONF_VARIANT]}")

View File

@ -183,6 +183,7 @@ async def to_code(config):
cg.add_platformio_option("board", config[CONF_BOARD]) cg.add_platformio_option("board", config[CONF_BOARD])
cg.add_build_flag("-DUSE_ESP8266") cg.add_build_flag("-DUSE_ESP8266")
cg.set_cpp_standard("gnu++17")
cg.add_define("ESPHOME_BOARD", config[CONF_BOARD]) cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
cg.add_define("ESPHOME_VARIANT", "ESP8266") cg.add_define("ESPHOME_VARIANT", "ESP8266")

View File

@ -264,6 +264,7 @@ async def component_to_code(config):
# force using arduino framework # force using arduino framework
cg.add_platformio_option("framework", "arduino") cg.add_platformio_option("framework", "arduino")
cg.add_build_flag("-DUSE_ARDUINO") cg.add_build_flag("-DUSE_ARDUINO")
cg.set_cpp_standard("gnu++17")
# disable library compatibility checks # disable library compatibility checks
cg.add_platformio_option("lib_ldf_mode", "off") cg.add_platformio_option("lib_ldf_mode", "off")

View File

@ -167,6 +167,7 @@ async def to_code(config):
cg.add_platformio_option("lib_ldf_mode", "chain+") cg.add_platformio_option("lib_ldf_mode", "chain+")
cg.add_platformio_option("board", config[CONF_BOARD]) cg.add_platformio_option("board", config[CONF_BOARD])
cg.add_build_flag("-DUSE_RP2040") cg.add_build_flag("-DUSE_RP2040")
cg.set_cpp_standard("gnu++17")
cg.add_define("ESPHOME_BOARD", config[CONF_BOARD]) cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
cg.add_define("ESPHOME_VARIANT", "RP2040") cg.add_define("ESPHOME_VARIANT", "RP2040")

View File

@ -507,6 +507,8 @@ class EsphomeCore:
self.libraries: list[Library] = [] self.libraries: list[Library] = []
# A set of build flags to set in the platformio project # A set of build flags to set in the platformio project
self.build_flags: set[str] = set() self.build_flags: set[str] = set()
# A set of build unflags to set in the platformio project
self.build_unflags: set[str] = set()
# A set of defines to set for the compile process in esphome/core/defines.h # A set of defines to set for the compile process in esphome/core/defines.h
self.defines: set[Define] = set() self.defines: set[Define] = set()
# A map of all platformio options to apply # A map of all platformio options to apply
@ -545,6 +547,7 @@ class EsphomeCore:
self.global_statements = [] self.global_statements = []
self.libraries = [] self.libraries = []
self.build_flags = set() self.build_flags = set()
self.build_unflags = set()
self.defines = set() self.defines = set()
self.platformio_options = {} self.platformio_options = {}
self.loaded_integrations = set() self.loaded_integrations = set()
@ -766,11 +769,15 @@ class EsphomeCore:
self.libraries.append(library) self.libraries.append(library)
return library return library
def add_build_flag(self, build_flag): def add_build_flag(self, build_flag: str) -> str:
self.build_flags.add(build_flag) self.build_flags.add(build_flag)
_LOGGER.debug("Adding build flag: %s", build_flag) _LOGGER.debug("Adding build flag: %s", build_flag)
return build_flag return build_flag
def add_build_unflag(self, build_unflag: str) -> None:
self.build_unflags.add(build_unflag)
_LOGGER.debug("Adding build unflag: %s", build_unflag)
def add_define(self, define): def add_define(self, define):
if isinstance(define, str): if isinstance(define, str):
define = Define(define) define = Define(define)

View File

@ -608,6 +608,17 @@ def add_build_flag(build_flag: str):
CORE.add_build_flag(build_flag) CORE.add_build_flag(build_flag)
def add_build_unflag(build_unflag: str) -> None:
"""Add a global build unflag to the compiler flags."""
CORE.add_build_unflag(build_unflag)
def set_cpp_standard(standard: str) -> None:
"""Set C++ standard with compiler flag `-std={standard}`."""
CORE.add_build_unflag("-std=gnu++11")
CORE.add_build_flag(f"-std={standard}")
def add_define(name: str, value: SafeExpType = None): def add_define(name: str, value: SafeExpType = None):
"""Add a global define to the auto-generated defines.h file. """Add a global define to the auto-generated defines.h file.

View File

@ -153,6 +153,9 @@ def get_ini_content():
# Sort to avoid changing build flags order # Sort to avoid changing build flags order
CORE.add_platformio_option("build_flags", sorted(CORE.build_flags)) CORE.add_platformio_option("build_flags", sorted(CORE.build_flags))
# Sort to avoid changing build unflags order
CORE.add_platformio_option("build_unflags", sorted(CORE.build_unflags))
content = "[platformio]\n" content = "[platformio]\n"
content += f"description = ESPHome {__version__}\n" content += f"description = ESPHome {__version__}\n"

View File

@ -48,6 +48,9 @@ lib_deps =
lvgl/lvgl@8.4.0 ; lvgl lvgl/lvgl@8.4.0 ; lvgl
build_flags = build_flags =
-DESPHOME_LOG_LEVEL=ESPHOME_LOG_LEVEL_VERY_VERBOSE -DESPHOME_LOG_LEVEL=ESPHOME_LOG_LEVEL_VERY_VERBOSE
-std=gnu++17
build_unflags =
-std=gnu++11
src_filter = src_filter =
+<./> +<./>
+<../tests/dummy_main.cpp> +<../tests/dummy_main.cpp>
@ -73,6 +76,8 @@ lib_deps =
build_flags = build_flags =
${common.build_flags} ${common.build_flags}
-DUSE_ARDUINO -DUSE_ARDUINO
build_unflags =
${common.build_unflags}
; This are common settings for all IDF-framework based environments. ; This are common settings for all IDF-framework based environments.
[common:idf] [common:idf]
@ -80,6 +85,8 @@ extends = common
build_flags = build_flags =
${common.build_flags} ${common.build_flags}
-DUSE_ESP_IDF -DUSE_ESP_IDF
build_unflags =
${common.build_unflags}
; This are common settings for the ESP8266 using Arduino. ; This are common settings for the ESP8266 using Arduino.
[common:esp8266-arduino] [common:esp8266-arduino]
@ -104,6 +111,8 @@ build_flags =
-Wno-nonnull-compare -Wno-nonnull-compare
-DUSE_ESP8266 -DUSE_ESP8266
-DUSE_ESP8266_FRAMEWORK_ARDUINO -DUSE_ESP8266_FRAMEWORK_ARDUINO
build_unflags =
${common.build_unflags}
extra_scripts = post:esphome/components/esp8266/post_build.py.script extra_scripts = post:esphome/components/esp8266/post_build.py.script
; This are common settings for the ESP32 (all variants) using Arduino. ; This are common settings for the ESP32 (all variants) using Arduino.
@ -135,6 +144,8 @@ build_flags =
-DUSE_ESP32 -DUSE_ESP32
-DUSE_ESP32_FRAMEWORK_ARDUINO -DUSE_ESP32_FRAMEWORK_ARDUINO
-DAUDIO_NO_SD_FS ; i2s_audio -DAUDIO_NO_SD_FS ; i2s_audio
build_unflags =
${common.build_unflags}
extra_scripts = post:esphome/components/esp32/post_build.py.script extra_scripts = post:esphome/components/esp32/post_build.py.script
; This are common settings for the ESP32 (all variants) using IDF. ; This are common settings for the ESP32 (all variants) using IDF.
@ -155,6 +166,8 @@ build_flags =
-Wno-nonnull-compare -Wno-nonnull-compare
-DUSE_ESP32 -DUSE_ESP32
-DUSE_ESP32_FRAMEWORK_ESP_IDF -DUSE_ESP32_FRAMEWORK_ESP_IDF
build_unflags =
${common.build_unflags}
extra_scripts = post:esphome/components/esp32/post_build.py.script extra_scripts = post:esphome/components/esp32/post_build.py.script
; This are common settings for the ESP32 using the latest ESP-IDF version. ; This are common settings for the ESP32 using the latest ESP-IDF version.
@ -181,6 +194,8 @@ build_flags =
${common:arduino.build_flags} ${common:arduino.build_flags}
-DUSE_RP2040 -DUSE_RP2040
-DUSE_RP2040_FRAMEWORK_ARDUINO -DUSE_RP2040_FRAMEWORK_ARDUINO
build_unflags =
${common.build_unflags}
; This are common settings for the LibreTiny (all variants) using Arduino. ; This are common settings for the LibreTiny (all variants) using Arduino.
[common:libretiny-arduino] [common:libretiny-arduino]
@ -192,6 +207,8 @@ lib_deps =
build_flags = build_flags =
${common:arduino.build_flags} ${common:arduino.build_flags}
-DUSE_LIBRETINY -DUSE_LIBRETINY
build_unflags =
${common.build_unflags}
build_src_flags = -include Arduino.h build_src_flags = -include Arduino.h
; This is the common settings for the nRF52 using Zephyr. ; This is the common settings for the nRF52 using Zephyr.
@ -224,6 +241,8 @@ board = nodemcuv2
build_flags = build_flags =
${common:esp8266-arduino.build_flags} ${common:esp8266-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
build_unflags =
${common.build_unflags}
[env:esp8266-arduino-tidy] [env:esp8266-arduino-tidy]
extends = common:esp8266-arduino extends = common:esp8266-arduino
@ -231,6 +250,8 @@ board = nodemcuv2
build_flags = build_flags =
${common:esp8266-arduino.build_flags} ${common:esp8266-arduino.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
build_unflags =
${common.build_unflags}
;;;;;;;; ESP32 ;;;;;;;; ;;;;;;;; ESP32 ;;;;;;;;
@ -242,6 +263,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32 -DUSE_ESP32_VARIANT_ESP32
build_unflags =
${common.build_unflags}
[env:esp32-arduino-tidy] [env:esp32-arduino-tidy]
extends = common:esp32-arduino extends = common:esp32-arduino
@ -250,6 +273,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32 -DUSE_ESP32_VARIANT_ESP32
build_unflags =
${common.build_unflags}
[env:esp32-idf] [env:esp32-idf]
extends = common:esp32-idf extends = common:esp32-idf
@ -259,6 +284,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32 -DUSE_ESP32_VARIANT_ESP32
build_unflags =
${common.build_unflags}
[env:esp32-idf-5_3] [env:esp32-idf-5_3]
extends = common:esp32-idf-5_3 extends = common:esp32-idf-5_3
@ -268,6 +295,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32 -DUSE_ESP32_VARIANT_ESP32
build_unflags =
${common.build_unflags}
[env:esp32-idf-tidy] [env:esp32-idf-tidy]
extends = common:esp32-idf extends = common:esp32-idf
@ -277,6 +306,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32 -DUSE_ESP32_VARIANT_ESP32
build_unflags =
${common.build_unflags}
;;;;;;;; ESP32-C3 ;;;;;;;; ;;;;;;;; ESP32-C3 ;;;;;;;;
@ -287,6 +318,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32C3 -DUSE_ESP32_VARIANT_ESP32C3
build_unflags =
${common.build_unflags}
[env:esp32c3-arduino-tidy] [env:esp32c3-arduino-tidy]
extends = common:esp32-arduino extends = common:esp32-arduino
@ -295,6 +328,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32C3 -DUSE_ESP32_VARIANT_ESP32C3
build_unflags =
${common.build_unflags}
[env:esp32c3-idf] [env:esp32c3-idf]
extends = common:esp32-idf extends = common:esp32-idf
@ -304,6 +339,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32C3 -DUSE_ESP32_VARIANT_ESP32C3
build_unflags =
${common.build_unflags}
[env:esp32c3-idf-5_3] [env:esp32c3-idf-5_3]
extends = common:esp32-idf-5_3 extends = common:esp32-idf-5_3
@ -313,6 +350,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32C3 -DUSE_ESP32_VARIANT_ESP32C3
build_unflags =
${common.build_unflags}
[env:esp32c3-idf-tidy] [env:esp32c3-idf-tidy]
extends = common:esp32-idf extends = common:esp32-idf
@ -322,6 +361,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32C3 -DUSE_ESP32_VARIANT_ESP32C3
build_unflags =
${common.build_unflags}
;;;;;;;; ESP32-C6 ;;;;;;;; ;;;;;;;; ESP32-C6 ;;;;;;;;
@ -343,6 +384,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S2 -DUSE_ESP32_VARIANT_ESP32S2
build_unflags =
${common.build_unflags}
[env:esp32s2-arduino-tidy] [env:esp32s2-arduino-tidy]
extends = common:esp32-arduino extends = common:esp32-arduino
@ -351,6 +394,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32S2 -DUSE_ESP32_VARIANT_ESP32S2
build_unflags =
${common.build_unflags}
[env:esp32s2-idf] [env:esp32s2-idf]
extends = common:esp32-idf extends = common:esp32-idf
@ -360,6 +405,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S2 -DUSE_ESP32_VARIANT_ESP32S2
build_unflags =
${common.build_unflags}
[env:esp32s2-idf-5_3] [env:esp32s2-idf-5_3]
extends = common:esp32-idf-5_3 extends = common:esp32-idf-5_3
@ -369,6 +416,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S2 -DUSE_ESP32_VARIANT_ESP32S2
build_unflags =
${common.build_unflags}
[env:esp32s2-idf-tidy] [env:esp32s2-idf-tidy]
extends = common:esp32-idf extends = common:esp32-idf
@ -378,6 +427,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32S2 -DUSE_ESP32_VARIANT_ESP32S2
build_unflags =
${common.build_unflags}
;;;;;;;; ESP32-S3 ;;;;;;;; ;;;;;;;; ESP32-S3 ;;;;;;;;
@ -388,6 +439,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S3 -DUSE_ESP32_VARIANT_ESP32S3
build_unflags =
${common.build_unflags}
[env:esp32s3-arduino-tidy] [env:esp32s3-arduino-tidy]
extends = common:esp32-arduino extends = common:esp32-arduino
@ -396,6 +449,8 @@ build_flags =
${common:esp32-arduino.build_flags} ${common:esp32-arduino.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32S3 -DUSE_ESP32_VARIANT_ESP32S3
build_unflags =
${common.build_unflags}
[env:esp32s3-idf] [env:esp32s3-idf]
extends = common:esp32-idf extends = common:esp32-idf
@ -405,6 +460,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S3 -DUSE_ESP32_VARIANT_ESP32S3
build_unflags =
${common.build_unflags}
[env:esp32s3-idf-5_3] [env:esp32s3-idf-5_3]
extends = common:esp32-idf-5_3 extends = common:esp32-idf-5_3
@ -414,6 +471,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_ESP32_VARIANT_ESP32S3 -DUSE_ESP32_VARIANT_ESP32S3
build_unflags =
${common.build_unflags}
[env:esp32s3-idf-tidy] [env:esp32s3-idf-tidy]
extends = common:esp32-idf extends = common:esp32-idf
@ -423,6 +482,8 @@ build_flags =
${common:esp32-idf.build_flags} ${common:esp32-idf.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
-DUSE_ESP32_VARIANT_ESP32S3 -DUSE_ESP32_VARIANT_ESP32S3
build_unflags =
${common.build_unflags}
;;;;;;;; ESP32-P4 ;;;;;;;; ;;;;;;;; ESP32-P4 ;;;;;;;;
@ -444,6 +505,8 @@ board = rpipico
build_flags = build_flags =
${common:rp2040-arduino.build_flags} ${common:rp2040-arduino.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
build_unflags =
${common.build_unflags}
;;;;;;;; LibreTiny ;;;;;;;; ;;;;;;;; LibreTiny ;;;;;;;;
@ -455,6 +518,8 @@ build_flags =
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_BK72XX -DUSE_BK72XX
-DUSE_LIBRETINY_VARIANT_BK7231N -DUSE_LIBRETINY_VARIANT_BK7231N
build_unflags =
${common.build_unflags}
[env:rtl87xxb-arduino] [env:rtl87xxb-arduino]
extends = common:libretiny-arduino extends = common:libretiny-arduino
@ -464,6 +529,8 @@ build_flags =
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_RTL87XX -DUSE_RTL87XX
-DUSE_LIBRETINY_VARIANT_RTL8710B -DUSE_LIBRETINY_VARIANT_RTL8710B
build_unflags =
${common.build_unflags}
[env:rtl87xxc-arduino] [env:rtl87xxc-arduino]
extends = common:libretiny-arduino extends = common:libretiny-arduino
@ -473,6 +540,8 @@ build_flags =
${flags:runtime.build_flags} ${flags:runtime.build_flags}
-DUSE_RTL87XX -DUSE_RTL87XX
-DUSE_LIBRETINY_VARIANT_RTL8720C -DUSE_LIBRETINY_VARIANT_RTL8720C
build_unflags =
${common.build_unflags}
[env:host] [env:host]
extends = common extends = common
@ -483,6 +552,8 @@ build_flags =
${common.build_flags} ${common.build_flags}
-DUSE_HOST -DUSE_HOST
-std=c++17 -std=c++17
build_unflags =
${common.build_unflags}
;;;;;;;; nRF52 ;;;;;;;; ;;;;;;;; nRF52 ;;;;;;;;
@ -492,6 +563,8 @@ board = adafruit_feather_nrf52840
build_flags = build_flags =
${common:nrf52-zephyr.build_flags} ${common:nrf52-zephyr.build_flags}
${flags:runtime.build_flags} ${flags:runtime.build_flags}
build_unflags =
${common.build_unflags}
[env:nrf52-tidy] [env:nrf52-tidy]
extends = common:nrf52-zephyr extends = common:nrf52-zephyr
@ -499,3 +572,5 @@ board = adafruit_feather_nrf52840
build_flags = build_flags =
${common:nrf52-zephyr.build_flags} ${common:nrf52-zephyr.build_flags}
${flags:clangtidy.build_flags} ${flags:clangtidy.build_flags}
build_unflags =
${common.build_unflags}