mirror of
https://github.com/esphome/esphome.git
synced 2026-08-22 22:26:21 +00:00
[ci] Add LibreTiny clang-tidy environments (#17491)
This commit is contained in:
@@ -508,6 +508,11 @@ jobs:
|
||||
name: Run script/clang-tidy for RP2
|
||||
options: --environment rp2-tidy --grep USE_RP2
|
||||
pio_cache_key: tidyrp2
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for LibreTiny
|
||||
environments: bk72xx-tidy ln882h-tidy rtl87xxb-tidy rtl87xxc-tidy
|
||||
options: --grep USE_LIBRETINY --grep USE_BK72XX --grep USE_RTL87XX --grep USE_LN882X
|
||||
pio_cache_key: tidylibretiny
|
||||
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
@@ -571,10 +576,21 @@ jobs:
|
||||
. venv/bin/activate
|
||||
if [ "${{ steps.check_full_scan.outputs.full_scan }}" = "true" ]; then
|
||||
echo "Running FULL clang-tidy scan (reason: ${{ steps.check_full_scan.outputs.reason }})"
|
||||
script/clang-tidy --all-headers --fix ${{ matrix.options }} ${{ matrix.ignore_errors && '|| true' || '' }}
|
||||
changed=""
|
||||
else
|
||||
echo "Running clang-tidy on changed files only"
|
||||
script/clang-tidy --all-headers --fix --changed ${{ matrix.options }} ${{ matrix.ignore_errors && '|| true' || '' }}
|
||||
changed="--changed"
|
||||
fi
|
||||
if [ -n "${{ matrix.environments }}" ]; then
|
||||
rc=0
|
||||
for env in ${{ matrix.environments }}; do
|
||||
echo "::group::clang-tidy $env"
|
||||
script/clang-tidy --all-headers --fix $changed --environment "$env" ${{ matrix.options }} ${{ matrix.ignore_errors && '|| true' || '' }} || rc=1
|
||||
echo "::endgroup::"
|
||||
done
|
||||
exit $rc
|
||||
else
|
||||
script/clang-tidy --all-headers --fix $changed ${{ matrix.options }} ${{ matrix.ignore_errors && '|| true' || '' }}
|
||||
fi
|
||||
env:
|
||||
# Also cache libdeps, store them in a ~/.platformio subfolder
|
||||
|
||||
@@ -19,9 +19,6 @@ FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
||||
},
|
||||
"nextion_upload_arduino.cpp": {
|
||||
PlatformFramework.ESP8266_ARDUINO,
|
||||
PlatformFramework.BK72XX_ARDUINO,
|
||||
PlatformFramework.RTL87XX_ARDUINO,
|
||||
PlatformFramework.LN882X_ARDUINO,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -9,11 +9,8 @@ from esphome.const import (
|
||||
CONF_ID,
|
||||
CONF_LAMBDA,
|
||||
CONF_ON_TOUCH,
|
||||
PLATFORM_BK72XX,
|
||||
PLATFORM_ESP32,
|
||||
PLATFORM_ESP8266,
|
||||
PLATFORM_LN882X,
|
||||
PLATFORM_RTL87XX,
|
||||
)
|
||||
from esphome.core import CORE, TimePeriod
|
||||
|
||||
@@ -153,9 +150,6 @@ CONFIG_SCHEMA = cv.All(
|
||||
[
|
||||
PLATFORM_ESP32,
|
||||
PLATFORM_ESP8266,
|
||||
PLATFORM_BK72XX,
|
||||
PLATFORM_RTL87XX,
|
||||
PLATFORM_LN882X,
|
||||
]
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "nextion.h"
|
||||
|
||||
#ifdef USE_NEXTION_TFT_UPLOAD
|
||||
#if defined(USE_ESP8266) || defined(USE_LIBRETINY)
|
||||
#ifdef USE_ESP8266
|
||||
|
||||
#include <cinttypes>
|
||||
#include "esphome/components/network/util.h"
|
||||
@@ -209,7 +209,6 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
||||
http_client.setTimeout(this->tft_upload_http_timeout_);
|
||||
|
||||
bool begin_status = false;
|
||||
#ifdef USE_ESP8266
|
||||
#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0)
|
||||
http_client.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
||||
#elif USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0)
|
||||
@@ -219,7 +218,6 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
||||
http_client.setRedirectLimit(3);
|
||||
#endif
|
||||
begin_status = http_client.begin(*this->get_wifi_client_(), this->tft_url_.c_str());
|
||||
#endif // USE_ESP8266
|
||||
if (!begin_status) {
|
||||
this->connection_state_.is_updating_ = false;
|
||||
ESP_LOGD(TAG, "Connection failed");
|
||||
@@ -356,7 +354,6 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
||||
return upload_end_(true);
|
||||
}
|
||||
|
||||
#ifdef USE_ESP8266
|
||||
WiFiClient *Nextion::get_wifi_client_() {
|
||||
if (this->tft_url_.starts_with("https:")) {
|
||||
if (this->wifi_client_secure_ == nullptr) {
|
||||
@@ -374,9 +371,8 @@ WiFiClient *Nextion::get_wifi_client_() {
|
||||
}
|
||||
return this->wifi_client_;
|
||||
}
|
||||
#endif // USE_ESP8266
|
||||
|
||||
} // namespace esphome::nextion
|
||||
|
||||
#endif // USE_ESP8266 || USE_LIBRETINY
|
||||
#endif // USE_ESP8266
|
||||
#endif // USE_NEXTION_TFT_UPLOAD
|
||||
|
||||
@@ -239,9 +239,17 @@ platform = https://github.com/libretiny-eu/libretiny.git#v1.13.0
|
||||
framework = arduino
|
||||
lib_compat_mode = soft
|
||||
lib_deps =
|
||||
${common.lib_deps_base}
|
||||
${common:idf-component-libs.lib_deps}
|
||||
ESP32Async/ESPAsyncWebServer@3.9.6 ; web_server_base
|
||||
droscy/esp_wireguard@0.4.5 ; wireguard
|
||||
esphome/noise-c@0.1.11 ; api
|
||||
ESP32Async/AsyncTCP@3.4.5 ; async_tcp
|
||||
DNSServer ; captive_portal
|
||||
heman/AsyncMqttClient-esphome@2.0.0 ; mqtt
|
||||
improv/Improv@1.2.6 ; improv_serial
|
||||
kikuchan98/pngle@1.1.0 ; online_image
|
||||
https://github.com/bitbank2/JPEGDEC.git#1.8.4 ; online_image
|
||||
build_flags =
|
||||
${common:arduino.build_flags}
|
||||
-DUSE_LIBRETINY
|
||||
@@ -578,6 +586,54 @@ build_flags =
|
||||
build_unflags =
|
||||
${common.build_unflags}
|
||||
|
||||
[env:bk72xx-tidy]
|
||||
extends = common:libretiny-arduino
|
||||
board = generic-bk7231n-qfn32-tuya
|
||||
build_flags =
|
||||
${common:libretiny-arduino.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
-DUSE_BK72XX
|
||||
-DUSE_LIBRETINY_VARIANT_BK7231N
|
||||
build_unflags =
|
||||
${common.build_unflags}
|
||||
|
||||
[env:ln882h-tidy]
|
||||
extends = common:libretiny-arduino
|
||||
board = generic-ln882h
|
||||
build_flags =
|
||||
${common:libretiny-arduino.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
-DUSE_LN882X
|
||||
-DUSE_LIBRETINY_VARIANT_LN882H
|
||||
; the SDK lwip port dir is missing from pio idedata; lwipopts.h include_next needs it
|
||||
-I${platformio.packages_dir}/framework-lightning-ln882h/components/net/lwip-2.1.3/src/port/ln_osal/include
|
||||
build_unflags =
|
||||
${common.build_unflags}
|
||||
|
||||
[env:rtl87xxb-tidy]
|
||||
extends = common:libretiny-arduino
|
||||
board = generic-rtl8710bn-2mb-788k
|
||||
; mirror the libretiny codegen pin: RTL8710B needs 8.2.3+ for task notifications
|
||||
custom_versions.freertos = 8.2.3
|
||||
build_flags =
|
||||
${common:libretiny-arduino.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
-DUSE_RTL87XX
|
||||
-DUSE_LIBRETINY_VARIANT_RTL8710B
|
||||
build_unflags =
|
||||
${common.build_unflags}
|
||||
|
||||
[env:rtl87xxc-tidy]
|
||||
extends = common:libretiny-arduino
|
||||
board = generic-rtl8720cf-2mb-992k
|
||||
build_flags =
|
||||
${common:libretiny-arduino.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
-DUSE_RTL87XX
|
||||
-DUSE_LIBRETINY_VARIANT_RTL8720C
|
||||
build_unflags =
|
||||
${common.build_unflags}
|
||||
|
||||
;;;;;;;; Host ;;;;;;;;
|
||||
|
||||
[env:host]
|
||||
|
||||
+50
-4
@@ -74,6 +74,8 @@ def clang_options(idedata, environment):
|
||||
"-fno-jump-tables",
|
||||
"-fno-shrink-wrap",
|
||||
"-mno-target-align",
|
||||
# GCC-only flag emitted by the LibreTiny build
|
||||
"-mthumb-interwork",
|
||||
)
|
||||
|
||||
if "zephyr" in triplet:
|
||||
@@ -109,6 +111,23 @@ def clang_options(idedata, environment):
|
||||
if environment.startswith("rp2"):
|
||||
# clang's ARM backend doesn't know GCC's long_call attribute (IRAM_ATTR)
|
||||
cmd.append("-Wno-unknown-attributes")
|
||||
elif environment.startswith(("bk72xx", "ln882h", "rtl87xx")):
|
||||
cmd.extend(
|
||||
[
|
||||
# GCC on arm-none-eabi types (u)int32_t as (unsigned) long; clang
|
||||
# types it as (unsigned) int, clashing with LibreTiny's lwip
|
||||
# port typedefs. Match the GCC type model.
|
||||
"-U__UINT32_TYPE__",
|
||||
"-D__UINT32_TYPE__=long unsigned int",
|
||||
"-U__INT32_TYPE__",
|
||||
"-D__INT32_TYPE__=long int",
|
||||
# newlib's machine/endian.h macroizes __bswap16 into
|
||||
# __builtin_bswap16; the beken BDK then defines __bswap16 as a
|
||||
# function, which GCC tolerates as a builtin redeclaration but
|
||||
# clang rejects
|
||||
"-D__MACHINE_ENDIAN_H__",
|
||||
]
|
||||
)
|
||||
else:
|
||||
# replace pgmspace.h, as it uses GNU extensions clang doesn't support
|
||||
# https://github.com/earlephilhower/newlib-xtensa/pull/18
|
||||
@@ -154,7 +173,31 @@ def clang_options(idedata, environment):
|
||||
)
|
||||
cmd.append("-std=gnu++20")
|
||||
|
||||
# defines
|
||||
if environment.startswith(("bk72xx", "ln882h", "rtl87xx")):
|
||||
# LibreTiny leaves function-like macro values unparenthesized
|
||||
# (bugprone-macro-parentheses); its SDK-internal FAL_PART_TABLE macro trips the same
|
||||
# check. Assumes define values are always expressions (never type- or char-literal),
|
||||
# which holds for the current LibreTiny idedata.
|
||||
def sanitize_define(define):
|
||||
name, sep, value = define.partition("=")
|
||||
if (
|
||||
sep
|
||||
and value
|
||||
and not value.startswith(("(", '"'))
|
||||
and ("(" in name or not re.fullmatch(r"[\w.]+", value))
|
||||
):
|
||||
value = f"({value})"
|
||||
return f"-D{name}{sep}{value}"
|
||||
|
||||
# FAL_PART_TABLE and the delay() remap are library-scope LibreTiny flags that the real
|
||||
# build never applies to esphome sources. Strip LibreTiny's shell quoting from define
|
||||
# names first so the skip list matches regardless of which names it happens to quote.
|
||||
for define in idedata["defines"]:
|
||||
define = define.replace("'", "")
|
||||
if define.startswith(("FAL_PART_TABLE", "delay(")):
|
||||
continue
|
||||
cmd.append(sanitize_define(define))
|
||||
else:
|
||||
cmd.extend(f"-D{define}" for define in idedata["defines"])
|
||||
|
||||
# toolchain include directories, using -isystem to suppress their errors
|
||||
@@ -219,8 +262,9 @@ def run_tidy(executable, args, options, tmpdir, path_queue, lock, failed_files):
|
||||
if sys.stdout.isatty():
|
||||
invocation.append("--use-color")
|
||||
|
||||
if args.environment.startswith("rp2"):
|
||||
# MMIO peripheral access on bare-metal RP2 is all fixed-address.
|
||||
if args.environment.startswith(("rp2", "bk72xx", "ln882h", "rtl87xx")):
|
||||
# MMIO peripheral access on these bare-metal platforms is all
|
||||
# fixed-address.
|
||||
# bugprone-pointer-arithmetic-on-polymorphic-object (and its
|
||||
# cert-ctr56-cpp alias) crashes clang-tidy 22 with infinite matcher
|
||||
# recursion on lvgl_esphome.h under the RP2 defines.
|
||||
@@ -439,7 +483,9 @@ def main():
|
||||
print("Error applying fixes.\n", file=sys.stderr)
|
||||
raise
|
||||
|
||||
return len(failed_files)
|
||||
# Cap at 255: shells truncate exit codes to one byte, so 256 failures
|
||||
# would otherwise report success
|
||||
return min(len(failed_files), 255)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user