Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
77 lines
8.0 KiB
Python
77 lines
8.0 KiB
Python
# Проверка 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)
|