Подключи ISE, Vivado и Quartus к общему итератору версии и HDL-паспорту. Проверяй новый bit/sof до создания manifest, SHA-256 и архива выпуска. Добавь установку локальных команд ISE, инструкции переноса и регрессионные проверки успешных и прерванных сборок.
24 lines
2.9 KiB
Python
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) # Отличает ошибку настройки от успешной сборки.
|