Files
UniXNU/scripts/mesa_patch_identity.py
rpone 6c56ecec19 feat(gpu): import the native Adreno and Metal stack
Bring the current NativeAdreno, NativeMetal, AdrenoFirmware, AdrenoPM4,
AirNir and ArmSmmu4K sources, the Mesa pipeline-cache and builtin-shader
patches, and the Turnip host cache tools.
2026-10-20 18:08:40 +08:00

39 lines
2.2 KiB
Python

# SPDX-License-Identifier: MIT
"""Verify overlapping recorded Mesa patches without mutating the source tree."""
from pathlib import Path
import re
import subprocess
import tempfile
def validate_recorded_patches(root, source, pins):
paths = set()
for patch in pins['patches']:
text = (root / patch).read_text()
paths.update(re.findall(r'^diff --git a/(\S+) b/\1$', text, re.M))
changed = set(subprocess.check_output(['git', '-C', source, 'diff', 'HEAD', '--name-only'], text=True).splitlines())
changed.update(subprocess.check_output(['git', '-C', source, 'ls-files', '--others', '--exclude-standard'], text=True).splitlines())
if changed - paths:
raise SystemExit('Unrecorded Mesa source changes: ' + ', '.join(sorted(changed - paths)))
with tempfile.TemporaryDirectory(prefix='mesa-patch-check-', dir=root / '.cache') as name:
stripped = Path(name)
subprocess.run(['git', 'init', '-q', str(stripped)], check=True, capture_output=True, timeout=20)
for path in paths:
actual = source / path
if actual.is_file():
if actual.is_symlink():
raise SystemExit('Unexpected source symlink: ' + path)
destination = stripped / path
destination.parent.mkdir(parents=True, exist_ok=True)
destination.write_bytes(actual.read_bytes())
for patch in reversed(pins['patches']):
result = subprocess.run(['git', 'apply', '--reverse', str(root / patch)], cwd=stripped,
capture_output=True, text=True, timeout=20)
if result.returncode:
raise SystemExit('Recorded Mesa patch sequence differs: ' + patch + '\n' + result.stderr)
for path in paths:
original = subprocess.run(['git', '-C', source, 'show', 'HEAD:' + path], capture_output=True, timeout=20)
actual = stripped / path
if (original.returncode == 0 and (not actual.is_file() or actual.read_bytes() != original.stdout)) or (original.returncode != 0 and actual.exists()):
raise SystemExit('Recorded Mesa patches do not reconstruct pinned source: ' + path)