Uma coleção de utilitários relacionados à correção de bibliotecas Metal ( .metallib
) no macOS, especificamente com o objetivo de restaurar o suporte para hardware legado (ou seja, GPUs baseadas em Metal 3802 no macOS Sequoia).
MetallibSupportPkg abriga a biblioteca python metal_libraries
, que foi desenvolvida para agilizar a aplicação de patches da Metal Library por meio do seguinte:
aastuff
..metallib
suportados..metallib
para suportar GPUs Metal 3802. Notas sobre correção de arquivos .metallib
individuais:
.metallib
é na verdade uma coleção de arquivos .air
. É necessário extraí-los usando o formato zhouwei._unpack_metallib_to_air()
.metallib
são, na verdade, arquivos FAT Mach-O. Portanto, eles precisam ser afinados manualmente (o utilitário lipo
da Apple não suporta a arquitetura AIR64 que precisamos)._thin_file()
.air
precisam ser descompilados em seguida para .ll
(LLVM IR) usando o utilitário metal-objdump
da Apple._decompile_air_to_ll()
_patch_ll()
.air
, usamos o utilitário metal
da Apple._recompile_ll_to_air()
.air
em uma coleção .metallib
, usamos o utilitário metallib
da Apple._pack_air_to_metallib()
Depois de concluído, os arquivos .metallib
resultantes deverão funcionar com GPUs baseadas em Metal 3802 no macOS Sequoia.
MetallibSupportPkg não se destina a ser usado por usuários em geral, o seguinte é destinado a desenvolvedores.
Instale as dependências necessárias:
python3 -m pip install -r requirements.txt
# Note Xcode is required to be installed for the `metal` and `metal-objdump` utilities
Buscar URL IPSW:
python3 metallib.py -d
# Example result: UniversalMac_15.0_24A5279h_Restore.ipsw
Extraia o volume do sistema do IPSW:
python3 metallib.py -e < path_to_ipsw >
# Example result: 090-49684-056.dmg
Buscar bibliotecas Metal do volume do sistema, irá extrair para 15.x-
:
python3 metallib.py -f < path_to_system_volume >
# Example result: 15.0-24A5279h
Bibliotecas de Patch Metal:
# Directory containing the Metal libraries
python3 metallib.py -p < path_to_metallib_dir >
# Individual Metal library
python3 metallib.py -p < path_to_metallib >
Converta bibliotecas Metal em pacote macOS:
python3 metallib.py -z < path_to_metallib_dir >
# Example result: MetallibSupportPkg-15.0-24A5279h.pkg
usage: metallib.py [-h] [-d] [-e EXTRACT] [-f FETCH] [-p PATCH] [-b BUILD_SYS_PATCH] [-z BUILD_PKG] [-c]
Download, extract, fetch, and patch Metal libraries.
options:
-h, --help show this help message and exit
-d, --download Download the latest IPSW.
-e EXTRACT, --extract EXTRACT
Extract the system volume from an IPSW.
-f FETCH, --fetch FETCH
Fetch Metal libraries from the system volume.
-p PATCH, --patch PATCH
Patch Metal libraries.
-b BUILD_SYS_PATCH, --build-sys-patch BUILD_SYS_PATCH
Build a system patch dictionary.
-z BUILD_PKG, --build-pkg BUILD_PKG
Build a macOS package.
-c, --continuous-integration
Run in continuous integration mode.