mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 05:24:53 +01:00
Support clang-tidy for ESP32 variants (#3001)
This commit is contained in:
parent
3067e482fc
commit
d8e719d1c4
3 changed files with 91 additions and 40 deletions
20
.github/workflows/ci.yml
vendored
20
.github/workflows/ci.yml
vendored
|
@ -51,26 +51,26 @@ jobs:
|
|||
name: Run script/clang-format
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP8266
|
||||
options: --environment esp8266-tidy --grep USE_ESP8266
|
||||
options: --environment esp8266-arduino-tidy --grep USE_ESP8266
|
||||
pio_cache_key: tidyesp8266
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP32 1/4
|
||||
options: --environment esp32-tidy --split-num 4 --split-at 1
|
||||
name: Run script/clang-tidy for ESP32 Arduino 1/4
|
||||
options: --environment esp32-arduino-tidy --split-num 4 --split-at 1
|
||||
pio_cache_key: tidyesp32
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP32 2/4
|
||||
options: --environment esp32-tidy --split-num 4 --split-at 2
|
||||
name: Run script/clang-tidy for ESP32 Arduino 2/4
|
||||
options: --environment esp32-arduino-tidy --split-num 4 --split-at 2
|
||||
pio_cache_key: tidyesp32
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP32 3/4
|
||||
options: --environment esp32-tidy --split-num 4 --split-at 3
|
||||
name: Run script/clang-tidy for ESP32 Arduino 3/4
|
||||
options: --environment esp32-arduino-tidy --split-num 4 --split-at 3
|
||||
pio_cache_key: tidyesp32
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP32 4/4
|
||||
options: --environment esp32-tidy --split-num 4 --split-at 4
|
||||
name: Run script/clang-tidy for ESP32 Arduino 4/4
|
||||
options: --environment esp32-arduino-tidy --split-num 4 --split-at 4
|
||||
pio_cache_key: tidyesp32
|
||||
- id: clang-tidy
|
||||
name: Run script/clang-tidy for ESP32 esp-idf
|
||||
name: Run script/clang-tidy for ESP32 IDF
|
||||
options: --environment esp32-idf-tidy --grep USE_ESP_IDF
|
||||
pio_cache_key: tidyesp32-idf
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
; It's *not* used during runtime.
|
||||
|
||||
[platformio]
|
||||
default_envs = esp8266, esp32, esp32-idf
|
||||
default_envs = esp8266-arduino, esp32-arduino, esp32-idf
|
||||
; Ideally, we want src_dir to be the root directory of the repository, to mimic the runtime build
|
||||
; environment as best as possible. Unfortunately, the ESP-IDF toolchain really doesn't like this
|
||||
; being the root directory. Instead, set esphome/ as the source directory, all our sources are in
|
||||
|
@ -13,14 +13,14 @@ default_envs = esp8266, esp32, esp32-idf
|
|||
src_dir = esphome
|
||||
include_dir = .
|
||||
|
||||
[runtime]
|
||||
; This are the flags as set by the runtime.
|
||||
; This are just the build flags as set by the runtime.
|
||||
[flags:runtime]
|
||||
build_flags =
|
||||
-Wno-unused-but-set-variable
|
||||
-Wno-sign-compare
|
||||
|
||||
[clangtidy]
|
||||
; This are the flags for clang-tidy.
|
||||
; This are just the build flags for clang-tidy.
|
||||
[flags:clangtidy]
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
|
@ -30,6 +30,7 @@ build_flags =
|
|||
-Wshadow-field-in-constructor
|
||||
-Wshadow-uncaptured-local
|
||||
|
||||
; This are common settings for all environments.
|
||||
[common]
|
||||
lib_deps =
|
||||
esphome/noise-c@0.1.4 ; api
|
||||
|
@ -43,6 +44,7 @@ src_filter =
|
|||
+<../tests/dummy_main.cpp>
|
||||
+<../.temp/all-include.cpp>
|
||||
|
||||
; This are common settings for all Arduino-framework based environments.
|
||||
[common:arduino]
|
||||
extends = common
|
||||
lib_deps =
|
||||
|
@ -62,13 +64,15 @@ build_flags =
|
|||
${common.build_flags}
|
||||
-DUSE_ARDUINO
|
||||
|
||||
; This are common settings for all IDF-framework based environments.
|
||||
[common:idf]
|
||||
extends = common
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
-DUSE_ESP_IDF
|
||||
|
||||
[common:esp8266]
|
||||
; This are common settings for the ESP8266 using Arduino.
|
||||
[common:esp8266-arduino]
|
||||
extends = common:arduino
|
||||
; when changing this also copy it to esphome-docker-base images
|
||||
platform = platformio/espressif8266 @ 3.2.0
|
||||
|
@ -76,7 +80,6 @@ platform_packages =
|
|||
platformio/framework-arduinoespressif8266 @ ~3.30002.0
|
||||
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_deps =
|
||||
${common:arduino.lib_deps}
|
||||
ESP8266WiFi ; wifi (Arduino built-in)
|
||||
|
@ -87,6 +90,7 @@ build_flags =
|
|||
-DUSE_ESP8266
|
||||
-DUSE_ESP8266_FRAMEWORK_ARDUINO
|
||||
|
||||
; This are common settings for the ESP32 (all variants) using Arduino.
|
||||
[common:esp32-arduino]
|
||||
extends = common:arduino
|
||||
; when changing this also copy it to esphome-docker-base images
|
||||
|
@ -104,6 +108,7 @@ build_flags =
|
|||
-DUSE_ESP32
|
||||
-DUSE_ESP32_FRAMEWORK_ARDUINO
|
||||
|
||||
; This are common settings for the ESP32 (all variants) using IDF.
|
||||
[common:esp32-idf]
|
||||
extends = common:idf
|
||||
; when changing this also copy it to esphome-docker-base images
|
||||
|
@ -112,7 +117,6 @@ platform_packages =
|
|||
platformio/framework-espidf @ ~3.40300.0
|
||||
|
||||
framework = espidf
|
||||
board = nodemcu-32s
|
||||
lib_deps =
|
||||
${common:idf.lib_deps}
|
||||
espressif/esp32-camera@1.0.0 ; esp32_camera
|
||||
|
@ -122,40 +126,79 @@ build_flags =
|
|||
-DUSE_ESP32
|
||||
-DUSE_ESP32_FRAMEWORK_ESP_IDF
|
||||
|
||||
[env:esp8266]
|
||||
extends = common:esp8266
|
||||
; All the actual environments are defined below.
|
||||
[env:esp8266-arduino]
|
||||
extends = common:esp8266-arduino
|
||||
board = nodemcuv2
|
||||
build_flags =
|
||||
${common:esp8266.build_flags}
|
||||
${runtime.build_flags}
|
||||
${common:esp8266-arduino.build_flags}
|
||||
${flags:runtime.build_flags}
|
||||
|
||||
[env:esp8266-tidy]
|
||||
extends = common:esp8266
|
||||
[env:esp8266-arduino-tidy]
|
||||
extends = common:esp8266-arduino
|
||||
board = nodemcuv2
|
||||
build_flags =
|
||||
${common:esp8266.build_flags}
|
||||
${clangtidy.build_flags}
|
||||
${common:esp8266-arduino.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
|
||||
[env:esp32]
|
||||
[env:esp32-arduino]
|
||||
extends = common:esp32-arduino
|
||||
board = esp32dev
|
||||
build_flags =
|
||||
${common:esp32-arduino.build_flags}
|
||||
${runtime.build_flags}
|
||||
${flags:runtime.build_flags}
|
||||
|
||||
[env:esp32-tidy]
|
||||
[env:esp32-arduino-tidy]
|
||||
extends = common:esp32-arduino
|
||||
board = esp32dev
|
||||
build_flags =
|
||||
${common:esp32-arduino.build_flags}
|
||||
${clangtidy.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
|
||||
[env:esp32-idf]
|
||||
extends = common:esp32-idf
|
||||
board = esp32dev
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32-idf
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${runtime.build_flags}
|
||||
${flags:runtime.build_flags}
|
||||
|
||||
[env:esp32-idf-tidy]
|
||||
extends = common:esp32-idf
|
||||
board = esp32dev
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32-idf-tidy
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${clangtidy.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
|
||||
[env:esp32c3-idf]
|
||||
extends = common:esp32-idf
|
||||
board = esp32-c3-devkitm-1
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32c3-idf
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${flags:runtime.build_flags}
|
||||
|
||||
[env:esp32c3-idf-tidy]
|
||||
extends = common:esp32-idf
|
||||
board = esp32-c3-devkitm-1
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32c3-idf-tidy
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
|
||||
[env:esp32s2-idf]
|
||||
extends = common:esp32-idf
|
||||
board = esp32-s2-kaluga-1
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32s2-idf
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${flags:runtime.build_flags}
|
||||
|
||||
[env:esp32s2-idf-tidy]
|
||||
extends = common:esp32-idf
|
||||
board = esp32-s2-kaluga-1
|
||||
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32s2-idf-tidy
|
||||
build_flags =
|
||||
${common:esp32-idf.build_flags}
|
||||
${flags:clangtidy.build_flags}
|
||||
|
|
|
@ -17,9 +17,19 @@ import threading
|
|||
|
||||
|
||||
def clang_options(idedata):
|
||||
cmd = [
|
||||
# target 32-bit arch (this prevents size mismatch errors on a 64-bit host)
|
||||
'-m32',
|
||||
cmd = []
|
||||
|
||||
# extract target architecture from triplet in g++ filename
|
||||
triplet = os.path.basename(idedata['cxx_path'])[:-4]
|
||||
if triplet.startswith("xtensa-"):
|
||||
# clang doesn't support Xtensa (yet?), so compile in 32-bit mode and pretend we're the Xtensa compiler
|
||||
cmd.append('-m32')
|
||||
cmd.append('-D__XTENSA__')
|
||||
else:
|
||||
cmd.append(f'--target={triplet}')
|
||||
|
||||
# set flags
|
||||
cmd.extend([
|
||||
# disable built-in include directories from the host
|
||||
'-nostdinc',
|
||||
'-nostdinc++',
|
||||
|
@ -39,15 +49,13 @@ def clang_options(idedata):
|
|||
# suppress warning about attribute cannot be applied to type
|
||||
# https://github.com/esp8266/Arduino/pull/8258
|
||||
'-Ddeprecated(x)=',
|
||||
# pretend we're an Xtensa compiler, which gates some features in the headers
|
||||
'-D__XTENSA__',
|
||||
# allow to condition code on the presence of clang-tidy
|
||||
'-DCLANG_TIDY',
|
||||
# (esp-idf) Disable this header because they use asm with registers clang-tidy doesn't know
|
||||
'-D__XTENSA_API_H__',
|
||||
# (esp-idf) Fix __once_callable in some libstdc++ headers
|
||||
'-D_GLIBCXX_HAVE_TLS',
|
||||
]
|
||||
])
|
||||
|
||||
# copy compiler flags, except those clang doesn't understand.
|
||||
cmd.extend(flag for flag in idedata['cxx_flags'].split(' ')
|
||||
|
@ -126,8 +134,8 @@ def main():
|
|||
parser.add_argument('-j', '--jobs', type=int,
|
||||
default=multiprocessing.cpu_count(),
|
||||
help='number of tidy instances to be run in parallel.')
|
||||
parser.add_argument('-e', '--environment', default='esp32-tidy',
|
||||
help='the PlatformIO environment to run against (esp8266-tidy or esp32-tidy)')
|
||||
parser.add_argument('-e', '--environment', default='esp32-arduino-tidy',
|
||||
help='the PlatformIO environment to use (as defined in platformio.ini)')
|
||||
parser.add_argument('files', nargs='*', default=[],
|
||||
help='files to be processed (regex on path)')
|
||||
parser.add_argument('--fix', action='store_true', help='apply fix-its')
|
||||
|
|
Loading…
Reference in a new issue