Files
Balsam_167/tests/ump_logger/run_test.py
Andrey f741741cf8 Сохранить русские комментарии и настройки проекта в UTF-8
Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
2026-10-12 12:24:48 +03:00

77 lines
8.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проверка ump_logger на модели пк. Комментарии и исходный текст в UTF-8.
# Продолжает текущий вызов, список или выражение: """Сборка и запуск исходного регистратора с подменой GPIO/IRQ на Windows.; порядок аргументов сохраняется.
"""Сборка и запуск исходного регистратора с подменой GPIO/IRQ на Windows.
Нужны GCC либо Clang и lld-link в PATH. TEMPLATES_ROOT задаёт библиотеку. Проверяется алгоритм, но не ABI и тайминги TI.
DLL создаётся во временной папке; исходные .out/.hex прошивки не затрагиваются.
"""
# Подключает модуль ctypes для этой проверки или подготовки сборки.
import ctypes
# Подключает модуль os для этой проверки или подготовки сборки.
import os
# Импортирует необходимые имена: from pathlib import Path.
from pathlib import Path
# Подключает модуль subprocess для этой проверки или подготовки сборки.
import subprocess
# Подключает модуль shutil для этой проверки или подготовки сборки.
import shutil
# Подключает модуль tempfile для этой проверки или подготовки сборки.
import tempfile
# Задаёт root по выражению справа; значение используется последующими операциями.
root = Path(__file__).resolve().parents[2]
# Задаёт templates по выражению справа; значение используется последующими операциями.
templates = Path(os.environ.get('TEMPLATES_ROOT', root.parent / 'newProject/SETGUI/third_party/templates'))
# Задаёт protocol по выражению справа; значение используется последующими операциями.
protocol = templates / 'c/set-protocol'
# Задаёт compiler по выражению справа; значение используется последующими операциями.
compiler = os.environ.get('CC') or shutil.which('clang') or shutil.which('gcc')
# Проверяет условие if not compiler перед выполнением следующего блока.
if not compiler:
# Останавливает текущую операцию с исключением SystemExit('Clang or GCC is required in PATH').
raise SystemExit('Clang or GCC is required in PATH')
# Задаёт link_flags по выражению справа; значение используется последующими операциями.
link_flags = [] if 'gcc' in Path(compiler).name else ['-nostdlib', '-fuse-ld=lld', '-Wl,/noentry,/nodefaultlib']
# Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix='ump-recorder-') as directory с автоматическим освобождением.
with tempfile.TemporaryDirectory(prefix='ump-recorder-') as directory:
# Exercise the production identity binding too, using a build-local header.
# Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова.
subprocess.run([
# Продолжает текущий вызов, список или выражение: os.sys.executable, str(root / 'UKSSTMS320F28335/prepare_identity.py'),; порядок аргументов сохраняется.
os.sys.executable, str(root / 'UKSSTMS320F28335/prepare_identity.py'),
# Продолжает текущий вызов, список или выражение: '--project', str(root / 'UKSSTMS320F28335'), '--templates', str(templates),; порядок аргументов сохраняется.
'--project', str(root / 'UKSSTMS320F28335'), '--templates', str(templates),
# Продолжает текущий вызов, список или выражение: '--output', directory,; порядок аргументов сохраняется.
'--output', directory,
# Задаёт ], check по выражению справа; значение используется последующими операциями.
], check=True)
# Задаёт library по выражению справа; значение используется последующими операциями.
library = Path(directory) / 'recorder_test.dll'
# Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова.
subprocess.run([
# Продолжает текущий вызов, список или выражение: compiler, '-shared', *link_flags, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast',; порядок аргументов сохраняется.
compiler, '-shared', *link_flags, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast',
# Продолжает текущий вызов, список или выражение: '-Itests/ump_logger/stubs', '-ISource/Internal/Include',; порядок аргументов сохраняется.
'-Itests/ump_logger/stubs', '-ISource/Internal/Include',
# Продолжает текущий вызов, список или выражение: '-I' + str(protocol), '-I' + str(protocol / 'ports/tms320f28335'),; порядок аргументов сохраняется.
'-I' + str(protocol), '-I' + str(protocol / 'ports/tms320f28335'),
# Продолжает текущий вызов, список или выражение: '-I' + str(templates / 'c/firmware-info/include'), '-I' + directory,; порядок аргументов сохраняется.
'-I' + str(templates / 'c/firmware-info/include'), '-I' + directory,
# Продолжает текущий вызов, список или выражение: 'tests/ump_logger/recorder_test.c', 'Source/Internal/shared_ump.c', '-o', str(library),; порядок аргументов сохраняется.
'tests/ump_logger/recorder_test.c', 'Source/Internal/shared_ump.c', '-o', str(library),
# Задаёт ], cwd по выражению справа; значение используется последующими операциями.
], cwd=root, check=True)
# Отдельный процесс освобождает DLL до удаления временной папки Windows.
# Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова.
subprocess.run([
# Продолжает текущий вызов, список или выражение: os.sys.executable, '-c',; порядок аргументов сохраняется.
os.sys.executable, '-c',
# Задаёт 'import ctypes,sys; r по выражению справа; значение используется последующими операциями.
'import ctypes,sys; r=ctypes.CDLL(sys.argv[1]).run_tests(); '
# Задаёт 'print("PASS" if r по выражению справа; значение используется последующими операциями.
'print("PASS" if r==0 else f"FAIL: C line {r}"); sys.exit(bool(r))',
# Продолжает текущий вызов, список или выражение: str(library),; порядок аргументов сохраняется.
str(library),
# Задаёт ], check по выражению справа; значение используется последующими операциями.
], check=True)