Files
templates/tools/firmware-build/fpga/ise_bootstrap.py
T
Andrey 62c0492bfd feat(firmware-build): Добавь сборку и паспорта проектов ПЛИС
Подключи ISE, Vivado и Quartus к общему итератору версии и HDL-паспорту. Проверяй новый bit/sof до создания manifest, SHA-256 и архива выпуска.

Добавь установку локальных команд ISE, инструкции переноса и регрессионные проверки успешных и прерванных сборок.
2026-10-23 14:16:21 +03:00

24 lines
2.9 KiB
Python

"""Локальная обвязка ISE: настройки проекта и запуск общего инструмента templates.""" # Установщик копирует файл как firmware_build.py.
import json # Читает только настройки путей, оставляя номер версии отдельному JSON.
from pathlib import Path # Разрешает пути относительно установленной обвязки.
import subprocess # Передаёт аргументы отдельным списком без сборки shell-команды.
import sys # Сохраняет выбранный Python 3 и код возврата общей сборки.
def main(): # Одна локальная команда обращается к алгоритмам общей библиотеки.
config = Path(__file__).resolve().with_name("firmware_build.json") # Не зависит от того, из какой папки запущен BAT.
settings = json.loads(config.read_text(encoding="utf-8-sig")) # Принимает UTF-8, включая JSON, сохранённый редактором с BOM.
templates = (config.parent / settings["templates"]).resolve() # Поддерживает относительное подключение или абсолютный путь библиотеки.
helper = templates / "tools/firmware-build/fpga/ise_project.py" # Хранит реализацию сборки в одном месте для всех проектов.
if not helper.is_file(): # Перемещение библиотеки должно дать понятную причину отказа.
raise ValueError(f"templates not found; edit templates in {config}") # Не запускает сборку с неподходящим инструментом из PATH.
return subprocess.call([sys.executable, str(helper), "build", "--settings", str(config), *sys.argv[1:]]) # Сохраняет пробелы и кириллицу в каждом аргументе.
if __name__ == "__main__": # Импорт для проверки не должен запускать сборку проекта.
try: # Превращает ошибку настройки в короткое сообщение для консоли.
sys.exit(main()) # Сохраняет точный код завершения общего Tcl-flow.
except (OSError, ValueError, KeyError) as error: # Обрабатывает отсутствующие файлы и неверный JSON до запуска САПР.
print(f"[firmware-build] {error}", file=sys.stderr) # Не скрывает путь настройки, которую требуется исправить.
sys.exit(2) # Отличает ошибку настройки от успешной сборки.