"""Сборка и запуск исходного регистратора с подменой GPIO/IRQ на Windows. Нужны Clang и lld-link в PATH. Проверяется алгоритм, но не ABI и тайминги TI. DLL создаётся во временной папке; исходные .out/.hex прошивки не затрагиваются. """ import ctypes import os from pathlib import Path import subprocess import tempfile root = Path(__file__).resolve().parents[2] with tempfile.TemporaryDirectory(prefix='ump-recorder-') as directory: library = Path(directory) / 'recorder_test.dll' subprocess.run([ 'clang', '-shared', '-nostdlib', '-fuse-ld=lld', '-Wl,/noentry,/nodefaultlib', '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast', '-Itests/ump_logger/stubs', '-ISource/Internal/Include', 'tests/ump_logger/recorder_test.c', '-o', str(library), ], cwd=root, check=True) # Отдельный процесс освобождает DLL до удаления временной папки Windows. subprocess.run([ os.sys.executable, '-c', 'import ctypes,sys; r=ctypes.CDLL(sys.argv[1]).run_tests(); ' 'print("PASS" if r==0 else f"FAIL: C line {r}"); sys.exit(bool(r))', str(library), ], check=True)