Files
StaticLink.Avalonia/build/linux-toolchain/package-zig.py
T

28 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""Export verified Zig archives in the layout consumed by the NuGet package."""
import argparse,json,shutil,hashlib
from pathlib import Path
p=argparse.ArgumentParser();p.add_argument('--input',type=Path,required=True);p.add_argument('--output',type=Path,required=True);p.add_argument('--rid',required=True)
a=p.parse_args();manifest=json.loads((a.input/'cross-build.json').read_text())
if manifest['target']!=a.rid or not manifest.get('link_tests','').startswith('passed'):
raise SystemExit('Only successfully linked target archives may be packaged')
names={'libskia.a':'skia.lib','libSkiaSharp.a':'SkiaSharp.lib','libHarfBuzzSharp.a':'libHarfBuzzSharp.lib','libANGLE.a':'libANGLE_static.lib','libGLESv2.a':'libGLESv2_static.lib','libEGL.a':'libEGL_static.lib'} if a.rid.startswith('win') else {'libskia.a':'libskia.a','libSkiaSharp.a':'libSkiaSharp.a','libHarfBuzzSharp.a':'libHarfBuzzSharp.a','libANGLE.a':'libANGLE_static.a','libGLESv2.a':'libGLESv2_static.a','libEGL.a':'libEGL_static.a'}
a.output.mkdir(parents=True,exist_ok=True)
for source,destination in names.items():
path=a.input/source
if hashlib.sha256(path.read_bytes()).hexdigest()!=manifest['archives'][source]:raise SystemExit('Archive checksum mismatch: '+source)
shutil.copy2(path,a.output/destination)
runtime=a.input/'zig-runtime'
if not runtime.is_dir() or not [p for p in runtime.iterdir() if p.suffix in ('.a','.lib')]:raise SystemExit('Zig C++/compiler runtime archives were not captured')
(a.output/'zig-runtime').mkdir(exist_ok=True)
for path in runtime.iterdir():
if path.suffix not in ('.a','.lib'):continue
dest=path.stem+'.lib' if a.rid.startswith('win') else path.name
shutil.copy2(path,a.output/'zig-runtime'/dest)
if a.rid=='win-x86':
path=a.input/'skia_x86_stdcall_thunks.lib'
if not path.is_file():raise SystemExit('x86 stdcall thunks are required')
shutil.copy2(path,a.output/path.name)
shutil.copy2(a.input/'cross-build.json',a.output/'zig-build.json')
print('Packaged',a.rid)