1
0
mirror of https://github.com/esphome/esphome.git synced 2025-06-16 15:26:58 +02:00
esphome/script/generate-esp32-boards.py

78 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
import json
import os
import subprocess
import tempfile
from esphome.components.esp32 import ESP_IDF_PLATFORM_VERSION as ver
version_str = f"{ver.major}.{ver.minor:02d}.{ver.patch:02d}"
print(f"ESP32 Platform Version: {version_str}")
def get_boards():
with tempfile.TemporaryDirectory() as tempdir:
subprocess.run(
[
"git",
"clone",
"--depth",
"1",
"--branch",
f"{ver.major}.{ver.minor:02d}.{ver.patch:02d}",
"https://github.com/pioarduino/platform-espressif32",
tempdir,
],
check=True,
)
boards_file = os.path.join(tempdir, "boards")
boards = {}
for fname in os.listdir(boards_file):
if not fname.endswith(".json"):
continue
with open(os.path.join(boards_file, fname), encoding="utf-8") as f:
board_info = json.load(f)
mcu = board_info["build"]["mcu"]
name = board_info["name"]
board = fname[:-5]
variant = mcu.upper()
boards[board] = {
"name": name,
"variant": f"VARIANT_{variant}",
}
return boards
TEMPLATE = """ "%s": {
"name": "%s",
"variant": %s,
},
"""
def main():
boards = get_boards()
# open boards.py, delete existing BOARDS variable and write the new boards dict
boards_file_path = os.path.join(
os.path.dirname(__file__), "..", "esphome", "components", "esp32", "boards.py"
)
with open(boards_file_path, encoding="UTF-8") as f:
lines = f.readlines()
with open(boards_file_path, "w", encoding="UTF-8") as f:
for line in lines:
if line.startswith("BOARDS = {"):
f.write("BOARDS = {\n")
for board, info in sorted(boards.items()):
f.write(TEMPLATE % (board, info["name"], info["variant"]))
f.write("}\n")
break
f.write(line)
if __name__ == "__main__":
main()
print("ESP32 boards updated successfully.")