mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Build with C++17 (#8603)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
		| @@ -22,6 +22,7 @@ from esphome.cpp_generator import (  # noqa: F401 | ||||
|     TemplateArguments, | ||||
|     add, | ||||
|     add_build_flag, | ||||
|     add_build_unflag, | ||||
|     add_define, | ||||
|     add_global, | ||||
|     add_library, | ||||
| @@ -34,6 +35,7 @@ from esphome.cpp_generator import (  # noqa: F401 | ||||
|     process_lambda, | ||||
|     progmem_array, | ||||
|     safe_exp, | ||||
|     set_cpp_standard, | ||||
|     statement, | ||||
|     static_const_array, | ||||
|     templatable, | ||||
|   | ||||
| @@ -695,6 +695,7 @@ FINAL_VALIDATE_SCHEMA = cv.Schema(final_validate) | ||||
| async def to_code(config): | ||||
|     cg.add_platformio_option("board", config[CONF_BOARD]) | ||||
|     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_define("ESPHOME_BOARD", config[CONF_BOARD]) | ||||
|     cg.add_build_flag(f"-DUSE_ESP32_VARIANT_{config[CONF_VARIANT]}") | ||||
|   | ||||
| @@ -183,6 +183,7 @@ async def to_code(config): | ||||
|  | ||||
|     cg.add_platformio_option("board", config[CONF_BOARD]) | ||||
|     cg.add_build_flag("-DUSE_ESP8266") | ||||
|     cg.set_cpp_standard("gnu++17") | ||||
|     cg.add_define("ESPHOME_BOARD", config[CONF_BOARD]) | ||||
|     cg.add_define("ESPHOME_VARIANT", "ESP8266") | ||||
|  | ||||
|   | ||||
| @@ -264,6 +264,7 @@ async def component_to_code(config): | ||||
|     # force using arduino framework | ||||
|     cg.add_platformio_option("framework", "arduino") | ||||
|     cg.add_build_flag("-DUSE_ARDUINO") | ||||
|     cg.set_cpp_standard("gnu++17") | ||||
|  | ||||
|     # disable library compatibility checks | ||||
|     cg.add_platformio_option("lib_ldf_mode", "off") | ||||
|   | ||||
| @@ -167,6 +167,7 @@ async def to_code(config): | ||||
|     cg.add_platformio_option("lib_ldf_mode", "chain+") | ||||
|     cg.add_platformio_option("board", config[CONF_BOARD]) | ||||
|     cg.add_build_flag("-DUSE_RP2040") | ||||
|     cg.set_cpp_standard("gnu++17") | ||||
|     cg.add_define("ESPHOME_BOARD", config[CONF_BOARD]) | ||||
|     cg.add_define("ESPHOME_VARIANT", "RP2040") | ||||
|  | ||||
|   | ||||
| @@ -507,6 +507,8 @@ class EsphomeCore: | ||||
|         self.libraries: list[Library] = [] | ||||
|         # A set of build flags to set in the platformio project | ||||
|         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 | ||||
|         self.defines: set[Define] = set() | ||||
|         # A map of all platformio options to apply | ||||
| @@ -545,6 +547,7 @@ class EsphomeCore: | ||||
|         self.global_statements = [] | ||||
|         self.libraries = [] | ||||
|         self.build_flags = set() | ||||
|         self.build_unflags = set() | ||||
|         self.defines = set() | ||||
|         self.platformio_options = {} | ||||
|         self.loaded_integrations = set() | ||||
| @@ -766,11 +769,15 @@ class EsphomeCore: | ||||
|             self.libraries.append(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) | ||||
|         _LOGGER.debug("Adding build flag: %s", 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): | ||||
|         if isinstance(define, str): | ||||
|             define = Define(define) | ||||
|   | ||||
| @@ -608,6 +608,17 @@ def add_build_flag(build_flag: str): | ||||
|     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): | ||||
|     """Add a global define to the auto-generated defines.h file. | ||||
|  | ||||
|   | ||||
| @@ -153,6 +153,9 @@ def get_ini_content(): | ||||
|     # Sort to avoid changing build flags order | ||||
|     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 += f"description = ESPHome {__version__}\n" | ||||
|  | ||||
|   | ||||
| @@ -48,6 +48,9 @@ lib_deps = | ||||
|     lvgl/lvgl@8.4.0                                       ; lvgl | ||||
| build_flags = | ||||
|     -DESPHOME_LOG_LEVEL=ESPHOME_LOG_LEVEL_VERY_VERBOSE | ||||
|     -std=gnu++17 | ||||
| build_unflags = | ||||
|     -std=gnu++11 | ||||
| src_filter = | ||||
|     +<./> | ||||
|     +<../tests/dummy_main.cpp> | ||||
| @@ -73,6 +76,8 @@ lib_deps = | ||||
| build_flags = | ||||
|     ${common.build_flags} | ||||
|     -DUSE_ARDUINO | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ; This are common settings for all IDF-framework based environments. | ||||
| [common:idf] | ||||
| @@ -80,6 +85,8 @@ extends = common | ||||
| build_flags = | ||||
|     ${common.build_flags} | ||||
|     -DUSE_ESP_IDF | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ; This are common settings for the ESP8266 using Arduino. | ||||
| [common:esp8266-arduino] | ||||
| @@ -104,6 +111,8 @@ build_flags = | ||||
|     -Wno-nonnull-compare | ||||
|     -DUSE_ESP8266 | ||||
|     -DUSE_ESP8266_FRAMEWORK_ARDUINO | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
| extra_scripts = post:esphome/components/esp8266/post_build.py.script | ||||
|  | ||||
| ; This are common settings for the ESP32 (all variants) using Arduino. | ||||
| @@ -135,6 +144,8 @@ build_flags = | ||||
|     -DUSE_ESP32 | ||||
|     -DUSE_ESP32_FRAMEWORK_ARDUINO | ||||
|     -DAUDIO_NO_SD_FS                ; i2s_audio | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
| extra_scripts = post:esphome/components/esp32/post_build.py.script | ||||
|  | ||||
| ; This are common settings for the ESP32 (all variants) using IDF. | ||||
| @@ -155,6 +166,8 @@ build_flags = | ||||
|     -Wno-nonnull-compare | ||||
|     -DUSE_ESP32 | ||||
|     -DUSE_ESP32_FRAMEWORK_ESP_IDF | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
| extra_scripts = post:esphome/components/esp32/post_build.py.script | ||||
|  | ||||
| ; This are common settings for the ESP32 using the latest ESP-IDF version. | ||||
| @@ -181,6 +194,8 @@ build_flags = | ||||
|     ${common:arduino.build_flags} | ||||
|     -DUSE_RP2040 | ||||
|     -DUSE_RP2040_FRAMEWORK_ARDUINO | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ; This are common settings for the LibreTiny (all variants) using Arduino. | ||||
| [common:libretiny-arduino] | ||||
| @@ -192,6 +207,8 @@ lib_deps = | ||||
| build_flags = | ||||
|     ${common:arduino.build_flags} | ||||
|     -DUSE_LIBRETINY | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
| build_src_flags = -include Arduino.h | ||||
|  | ||||
| ; This is the common settings for the nRF52 using Zephyr. | ||||
| @@ -224,6 +241,8 @@ board = nodemcuv2 | ||||
| build_flags = | ||||
|     ${common:esp8266-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp8266-arduino-tidy] | ||||
| extends = common:esp8266-arduino | ||||
| @@ -231,6 +250,8 @@ board = nodemcuv2 | ||||
| build_flags = | ||||
|     ${common:esp8266-arduino.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; ESP32 ;;;;;;;; | ||||
|  | ||||
| @@ -242,6 +263,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32-arduino-tidy] | ||||
| extends = common:esp32-arduino | ||||
| @@ -250,6 +273,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32-idf] | ||||
| extends = common:esp32-idf | ||||
| @@ -259,6 +284,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32-idf-5_3] | ||||
| extends = common:esp32-idf-5_3 | ||||
| @@ -268,6 +295,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32-idf-tidy] | ||||
| extends = common:esp32-idf | ||||
| @@ -277,6 +306,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; ESP32-C3 ;;;;;;;; | ||||
|  | ||||
| @@ -287,6 +318,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32C3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32c3-arduino-tidy] | ||||
| extends = common:esp32-arduino | ||||
| @@ -295,6 +328,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32C3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32c3-idf] | ||||
| extends = common:esp32-idf | ||||
| @@ -304,6 +339,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32C3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32c3-idf-5_3] | ||||
| extends = common:esp32-idf-5_3 | ||||
| @@ -313,6 +350,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32C3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32c3-idf-tidy] | ||||
| extends = common:esp32-idf | ||||
| @@ -322,6 +361,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32C3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; ESP32-C6 ;;;;;;;; | ||||
|  | ||||
| @@ -343,6 +384,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S2 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s2-arduino-tidy] | ||||
| extends = common:esp32-arduino | ||||
| @@ -351,6 +394,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S2 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s2-idf] | ||||
| extends = common:esp32-idf | ||||
| @@ -360,6 +405,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S2 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s2-idf-5_3] | ||||
| extends = common:esp32-idf-5_3 | ||||
| @@ -369,6 +416,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S2 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s2-idf-tidy] | ||||
| extends = common:esp32-idf | ||||
| @@ -378,6 +427,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S2 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; ESP32-S3 ;;;;;;;; | ||||
|  | ||||
| @@ -388,6 +439,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s3-arduino-tidy] | ||||
| extends = common:esp32-arduino | ||||
| @@ -396,6 +449,8 @@ build_flags = | ||||
|     ${common:esp32-arduino.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s3-idf] | ||||
| extends = common:esp32-idf | ||||
| @@ -405,6 +460,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s3-idf-5_3] | ||||
| extends = common:esp32-idf-5_3 | ||||
| @@ -414,6 +471,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:esp32s3-idf-tidy] | ||||
| extends = common:esp32-idf | ||||
| @@ -423,6 +482,8 @@ build_flags = | ||||
|     ${common:esp32-idf.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
|     -DUSE_ESP32_VARIANT_ESP32S3 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; ESP32-P4 ;;;;;;;; | ||||
|  | ||||
| @@ -444,6 +505,8 @@ board = rpipico | ||||
| build_flags = | ||||
|     ${common:rp2040-arduino.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; LibreTiny ;;;;;;;; | ||||
|  | ||||
| @@ -455,6 +518,8 @@ build_flags = | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_BK72XX | ||||
|     -DUSE_LIBRETINY_VARIANT_BK7231N | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:rtl87xxb-arduino] | ||||
| extends = common:libretiny-arduino | ||||
| @@ -464,6 +529,8 @@ build_flags = | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_RTL87XX | ||||
|     -DUSE_LIBRETINY_VARIANT_RTL8710B | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:rtl87xxc-arduino] | ||||
| extends = common:libretiny-arduino | ||||
| @@ -473,6 +540,8 @@ build_flags = | ||||
|     ${flags:runtime.build_flags} | ||||
|     -DUSE_RTL87XX | ||||
|     -DUSE_LIBRETINY_VARIANT_RTL8720C | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:host] | ||||
| extends = common | ||||
| @@ -483,6 +552,8 @@ build_flags = | ||||
|     ${common.build_flags} | ||||
|     -DUSE_HOST | ||||
|     -std=c++17 | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| ;;;;;;;; nRF52 ;;;;;;;; | ||||
|  | ||||
| @@ -492,6 +563,8 @@ board = adafruit_feather_nrf52840 | ||||
| build_flags = | ||||
|     ${common:nrf52-zephyr.build_flags} | ||||
|     ${flags:runtime.build_flags} | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|  | ||||
| [env:nrf52-tidy] | ||||
| extends = common:nrf52-zephyr | ||||
| @@ -499,3 +572,5 @@ board = adafruit_feather_nrf52840 | ||||
| build_flags = | ||||
|     ${common:nrf52-zephyr.build_flags} | ||||
|     ${flags:clangtidy.build_flags} | ||||
| build_unflags = | ||||
|     ${common.build_unflags} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user