28 lines
2.0 KiB
Python
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)
|