| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #!/usr/bin/env python3
- import argparse
- import dataclasses
- import enum
- from pathlib import Path
- import json
- import subprocess
- import sys
- import tempfile
- SDL_ROOT = Path(__file__).resolve().parents[1]
- @dataclasses.dataclass
- class TbdInfo:
- install_name: str
- target_infos: list[dict[str, str]]
- class TbdPlatform(enum.StrEnum):
- MACOS = "macOS"
- IOS = "iOS"
- TBDINFOS = {
- TbdPlatform.MACOS: TbdInfo(
- install_name="@rpath/SDL3.framework/Versions/A/SDL3",
- target_infos=[
- {
- "min_deployment": "10.13",
- "target": "arm64-macos",
- },
- {
- "min_deployment": "10.13",
- "target": "x86_64-macos",
- },
- ]
- ),
- TbdPlatform.IOS: TbdInfo(
- install_name="@rpath/SDL3.framework/SDL3",
- target_infos=[
- {
- "min_deployment": "11.0",
- "target": "arm64-ios",
- },
- {
- "min_deployment": "11.0",
- "target": "arm64-ios-simulator",
- },
- {
- "min_deployment": "11.0",
- "target": "x86_64-ios-simulator",
- },
- {
- "min_deployment": "11.0",
- "target": "arm64-tvos",
- },
- {
- "min_deployment": "11.0",
- "target": "arm64-tvos-simulator",
- },
- {
- "min_deployment": "11.0",
- "target": "x86_64-tvos-simulator",
- },
- {
- "min_deployment": "1.3",
- "target": "arm64-xros",
- },
- {
- "min_deployment": "1.3",
- "target": "arm64-xros-simulator",
- },
- ]
- ),
- }
- def create_sdl3_tbd(symbols: list[str], tbd_info: TbdInfo):
- return {
- "main_library": {
- "compatibility_versions": [
- {
- "version": "201"
- }
- ],
- "current_versions": [
- {
- "version": "201"
- }
- ],
- "exported_symbols": [
- {
- "text": {
- "global": symbols
- }
- }
- ],
- "flags": [
- {
- "attributes": [
- "not_app_extension_safe"
- ]
- }
- ],
- "install_names": [
- {
- "name": tbd_info.install_name
- }
- ],
- "target_info": tbd_info.target_infos
- },
- "tapi_tbd_version": 5
- }
- def main():
- parser = argparse.ArgumentParser(allow_abbrev=False)
- parser.add_argument("--output", "-o", type=Path, help="Output path (default is stdout)")
- parser.add_argument("--platform", type=TbdPlatform, required=True,
- choices=[str(e) for e in TbdPlatform], help="Apple Platform")
- args = parser.parse_args()
- with tempfile.NamedTemporaryFile() as f_temp:
- f_temp.close()
- subprocess.check_call([sys.executable,SDL_ROOT / "src/dynapi/gendynapi.py", "--dump", f_temp.name],
- stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
- with open(f_temp.name) as f_json:
- sdl3_json = json.load(f_json)
- sdl3_macos_symbols = [f"_{symbol_info['name']}" for symbol_info in sdl3_json]
- sdl3_macos_symbols.sort()
- tbd = create_sdl3_tbd(symbols=sdl3_macos_symbols, tbd_info=TBDINFOS[args.platform])
- with (args.output.open("w", newline="") if args.output else sys.stdout) as f_out:
- json.dump(tbd, fp=f_out, indent=2)
- f_out.write("\n")
- if __name__ == "__main__":
- raise SystemExit(main())
|