Kumpulan utilitas yang terkait dengan patching Metal Libraries ( .metallib
) di macOS, khususnya dengan tujuan memulihkan dukungan untuk perangkat keras lama (yaitu GPU berbasis Metal 3802 di macOS Sequoia).
MetallibSupportPkg menampung pustaka python metal_libraries
, yang dikembangkan untuk menyederhanakan patching Metal Library melalui hal berikut:
aastuff
..metallib
yang didukung..metallib
untuk mendukung GPU Metal 3802. Catatan tentang menambal file .metallib
individual:
.metallib
sebenarnya adalah kumpulan file .air
. Perlu mengekstraknya menggunakan format zhouwei._unpack_metallib_to_air()
.metallib
tertentu sebenarnya adalah file FAT Mach-O. Oleh karena itu, mereka perlu ditipiskan secara manual (utilitas lipo
Apple tidak mendukung arsitektur AIR64 yang kita perlukan)._thin_file()
.air
selanjutnya perlu didekompilasi ke .ll
(LLVM IR) menggunakan utilitas metal-objdump
Apple._decompile_air_to_ll()
_patch_ll()
.air
, kami menggunakan utilitas metal
Apple._recompile_ll_to_air()
.air
ke koleksi .metallib
, kami menggunakan utilitas metallib
Apple._pack_air_to_metallib()
Setelah selesai, file .metallib
yang dihasilkan akan berfungsi dengan GPU berbasis Metal 3802 di macOS Sequoia.
MetallibSupportPkg tidak dimaksudkan untuk digunakan oleh pengguna umum, berikut ini ditujukan untuk pengembang.
Instal dependensi yang diperlukan:
python3 -m pip install -r requirements.txt
# Note Xcode is required to be installed for the `metal` and `metal-objdump` utilities
Ambil URL IPSW:
python3 metallib.py -d
# Example result: UniversalMac_15.0_24A5279h_Restore.ipsw
Ekstrak volume sistem dari IPSW:
python3 metallib.py -e < path_to_ipsw >
# Example result: 090-49684-056.dmg
Ambil perpustakaan Logam dari volume sistem, akan mengekstrak ke 15.x-
:
python3 metallib.py -f < path_to_system_volume >
# Example result: 15.0-24A5279h
Pustaka 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 >
Konversikan perpustakaan Logam ke paket 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.