Files
OpenCore-Legacy-Patcher/opencore_legacy_patcher/constants.py
Gonen 4ce91cad3d [WIP] GUI: Reduce CPU usage by adding sleep intervals to UI wait loops
Fix issue where the GUI main thread was consuming excessive CPU while
waiting for background tasks to complete.
By adding a configurable sleep interval between UI updates,
CPU usage is significantly reduced while maintaining responsiveness.

- Add thread_sleep_interval constant to global Constants class
- Implement wait_for_thread utility function in gui_support
- Update all wxPython event loops to use the new helper
- Test shows approximately 60% CPU usage reduction during waits
2025-04-03 23:18:48 +03:00

867 lines
35 KiB
Python

"""
constants.py: Defines versioning, file paths and other settings for the patcher
"""
from pathlib import Path
from typing import Optional
from packaging import version
from .datasets import os_data
from .detections import device_probe
class Constants:
def __init__(self) -> None:
# Patcher Versioning
self.patcher_version: str = "2.3.2" # OpenCore-Legacy-Patcher
self.patcher_support_pkg_version: str = "1.9.3" # PatcherSupportPkg
self.copyright_date: str = "Copyright © 2020-2025 Dortania"
self.patcher_name: str = "OpenCore Legacy Patcher"
# URLs
self.url_patcher_support_pkg: str = "https://github.com/dortania/PatcherSupportPkg/releases/download/"
self.discord_link: str = "https://discord.gg/rqdPgH8xSN"
self.guide_link: str = "https://dortania.github.io/OpenCore-Legacy-Patcher/"
self.repo_link: str = "https://github.com/dortania/OpenCore-Legacy-Patcher"
self.installer_pkg_url: str = f"{self.repo_link}/releases/download/{self.patcher_version}/AutoPkg-Assets.pkg"
self.installer_pkg_url_nightly: str = "http://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-app-wxpython/main/AutoPkg-Assets.pkg.zip"
# OpenCore Versioning
# https://github.com/acidanthera/OpenCorePkg
self.opencore_version: str = "1.0.4"
# Kext Versioning
## Acidanthera
## https://github.com/acidanthera
self.lilu_version: str = "1.7.0" # Lilu
self.whatevergreen_version: str = "1.6.9" # WhateverGreen
self.whatevergreen_navi_version: str = "1.6.9-Navi" # WhateverGreen (Navi Patch)
self.airportbcrmfixup_version: str = "2.1.9" # AirPortBrcmFixup
self.nvmefix_version: str = "1.1.2" # NVMeFix
self.applealc_version: str = "1.6.3" # AppleALC
self.restrictevents_version: str = "1.1.5" # RestrictEvents
self.featureunlock_version: str = "1.1.7" # FeatureUnlock
self.debugenhancer_version: str = "1.1.0" # DebugEnhancer
self.cpufriend_version: str = "1.2.9" # CPUFriend
self.bluetool_version: str = "2.6.9" # BlueToolFixup (BrcmPatchRAM)
self.cslvfixup_version: str = "2.6.1" # CSLVFixup
self.autopkg_version: str = "1.0.4" # AutoPkgInstaller
self.cryptexfixup_version: str = "1.0.4" # CryptexFixup
## Apple
## https://www.apple.com
self.marvel_version: str = "1.0.1" # MarvelYukonEthernet
self.nforce_version: str = "1.0.1" # nForceEthernet
self.piixata_version: str = "1.0.1" # AppleIntelPIIXATA
self.fw_kext: str = "1.0.1" # IOFireWireFamily
self.apple_trackpad: str = "1.0.1" # AppleUSBTrackpad
self.apple_isight_version: str = "1.0.0" # AppleiSight
self.apple_raid_version: str = "1.0.0" # AppleRAIDCard
self.apfs_zlib_version: str = "12.3.1" # NoAVXFSCompressionTypeZlib
self.apfs_zlib_v2_version: str = "12.6" # NoAVXFSCompressionTypeZlib (patched with AVXpel)
self.multitouch_version: str = "1.0.0" # AppleUSBMultitouch
self.topcase_version: str = "1.0.0" # AppleUSBTopCase
self.topcase_inj_version: str = "1.0.0" # AppleTopCaseInjector
self.intel_82574l_version: str = "1.0.0" # Intel82574L
self.intel_8254x_version: str = "1.0.0" # AppleIntel8254XEthernet
self.apple_usb_11_injector: str = "1.0.0" # AppleUSBUHCI/OHCI
self.aicpupm_version: str = "1.0.0" # AppleIntelCPUPowerManagement/Client
self.s3x_nvme_version: str = "1.0.0" # IONVMeFamily (14.0 Beta 1, S1X and S3X classes)
self.apple_camera_version: str = "1.0.0" # AppleCameraInterface (14.0 Beta 1)
self.t1_sse_version: str = "1.1.0" # AppleSSE (13.6 - T1 support)
self.t1_key_store_version: str = "1.1.0" # AppleKeyStore (13.6 - T1 support)
self.t1_credential_version: str = "1.0.0" # AppleCredentialManager (13.6 - T1 support)
self.t1_corecrypto_version: str = "1.0.1" # corecrypto (13.6 - T1 support)
self.apple_spi_version: str = "1.0.0" # AppleHSSPISupport (14.4 Beta 1)
self.apple_spi_hid_version: str = "1.0.0" # AppleHSSPIHIDDriver (14.4 Beta 1)
self.kernel_relay_version: str = "1.0.0" # KernelRelayHost (15.0 Beta 3)
## Apple - Dortania Modified
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
self.i210_version: str = "1.0.0" # CatalinaIntelI210Ethernet
self.corecaptureelcap_version: str = "1.0.2" # corecaptureElCap
self.io80211elcap_version: str = "2.0.1" # IO80211ElCap
self.io80211legacy_version: str = "1.0.0" # IO80211FamilyLegacy (Ventura)
self.ioskywalk_version: str = "1.2.0" # IOSkywalkFamily (Ventura)
self.bigsursdxc_version: str = "1.0.0" # BigSurSDXC
self.monterey_ahci_version: str = "1.0.0" # CatalinaAHCI
## Apple - Jazzzny Modified
self.aquantia_version: str = "1.1.0" # AppleEthernetAbuantiaAqtion
## Dortania
## https://github.com/dortania
self.backlight_injector_version: str = "1.1.0" # BacklightInjector
self.backlight_injectorA_version: str = "1.0.0" # BacklightInjector (iMac9,1)
self.smcspoof_version: str = "1.0.0" # SMC-Spoof
self.mce_version: str = "1.0.0" # AppleMCEReporterDisabler
self.btspoof_version: str = "1.0.0" # Bluetooth-Spoof
self.aspp_override_version: str = "1.0.1" # ACPI_SMC_PlatformPlugin Override
self.ecm_override_version: str = "1.0.0" # AppleUSBECM Override
self.rsrhelper_version: str = "1.0.2" # RSRHelper
self.amfipass_version: str = "1.4.1" # AMFIPass
self.amfipass_compatibility_version: str = "1.2.1" # Minimum AMFIPass version required
## Syncretic
## https://forums.macrumors.com/members/syncretic.1173816/
## https://github.com/reenigneorcim/latebloom
self.mousse_version: str = "0.95-Dortania" # MouSSE
self.telemetrap_version: str = "1.0.0" # telemetrap
## cdf
## https://github.com/cdf/Innie
self.innie_version: str = "1.3.1" # Innie
## arter97
## https://github.com/arter97/SimpleMSR/
self.simplemsr_version: str = "1.0.0" # SimpleMSR
## blackgate
## https://github.com/blackgate/AMDGPUWakeHandler
self.gpu_wake_version: str = "1.0.0"
## flagersgit
## https://github.com/flagersgit/KDKlessWorkaround
self.kdkless_version: str = "1.0.0"
## Jazzzny
self.legacy_keyboard: str = "1.0.0" # LegacyKeyboardInjector - Jazzzny
# Get resource path
self.current_path: Path = Path(__file__).parent.parent.resolve()
self.original_path: Path = Path(__file__).parent.parent.resolve()
self.payload_path: Path = self.current_path / Path("payloads")
# Patcher Settings
## Internal settings
self.allow_oc_everywhere: bool = False # Set whether Patcher can be run on unsupported Macs
self.gui_mode: bool = False # Determine whether running in a GUI or TUI
self.cli_mode: bool = True # Determine if running in CLI mode
self.validate: bool = False # Enable validation testing for CI
self.recovery_status: bool = False # Detect if booted into RecoveryOS
self.ignore_updates: bool = False # Ignore OCLP updates
self.wxpython_variant: bool = False # Determine if using wxPython variant
self.has_checked_updates: bool = False # Determine if check for updates has been run
self.root_patcher_succeeded: bool = False # Determine if root patcher succeeded
self.start_build_install: bool = False # Determine if build install should be started
self.host_is_non_metal: bool = False # Determine if host is non-metal (ie. enable UI hacks)
self.needs_to_open_preferences: bool = False # Determine if preferences need to be opened
self.host_is_hackintosh: bool = False # Determine if host is Hackintosh
self.should_nuke_kdks: bool = True # Determine if KDKs should be nuked if unused in /L*/D*/KDKs
self.launcher_binary: str = None # Determine launch binary path (ie. Python vs PyInstaller)
self.launcher_script: str = None # Determine launch file path (None if PyInstaller)
self.booted_oc_disk: str = None # Determine current disk OCLP booted from
self.unpack_thread = None # Determine if unpack thread finished (threading.Thread)
self.update_stage: int = 0 # Determine update stage (see gui_support.py)
self.log_filepath: Path = None # Path to log file
self.thread_sleep_interval: float = 0.1 # Sleep interval between UI updates (seconds) - reduce refresh-rate to reduce CPU-usage
self.thread_nap_interval: float = 0.01 # Short Sleep interval between UI updates (seconds) - for faster UI updates of the progress bar
self.commit_info: tuple = (None, None, None) # Commit info (Branch, Commit Date, Commit URL)
## Hardware
self.computer: device_probe.Computer = None # type: ignore
self.custom_model: Optional[str] = None
## OpenCore Settings
self.opencore_debug: bool = False # Enable OpenCore debug
self.boot_efi: bool = False # Use EFI/BOOT/BOOTx64.efi vs boot.efi bootstrap
self.showpicker: bool = True # Show or Hide OpenCore's Boot Picker
self.nvram_write: bool = True # Write to hardware NVRAM
self.oc_timeout: int = 5 # Set OpenCore timeout
## Kext Settings
self.kext_debug: bool = False # Enables Lilu debug and DebugEnhancer
self.kext_variant: str = "RELEASE"
## NVRAM Settings
self.verbose_debug: bool = False # -v
## SMBIOS Settings
self.serial_settings: str = "None" # Set SMBIOS level used
self.override_smbios: str = "Default" # Set SMBIOS model used
self.allow_native_spoofs: bool = False # Allow native models to receive spoofs
### Serial Number Overrides
self.custom_serial_number: str = "" # Set SMBIOS serial number
self.custom_board_serial_number: str = "" # Set SMBIOS board serial number
## FeatureUnlock Settings
self.fu_status: bool = False # Enable FeatureUnlock
self.fu_arguments: str = None # Set FeatureUnlock arguments
## Security Settings
self.sip_status: bool = True # System Integrity Protection
self.secure_status: bool = False # Secure Boot Model
self.vault: bool = False # EFI Vault
self.disable_cs_lv: bool = False # Disable Library validation
self.disable_amfi: bool = False # Disable AMFI
## OS Settings
self.os_support: float = 12.0
self.detected_os: int = 0 # Major Kernel Version
self.detected_os_minor: int = 0 # Minor Kernel Version
self.detected_os_build: str = "" # OS Build
self.detected_os_version: str = "" # OS Version
## Boot Volume Settings
self.firewire_boot: bool = False # Allow macOS FireWire Boot (kernel)
self.nvme_boot: bool = False # Allow UEFI NVMe Boot
self.xhci_boot: bool = False # Allow UEFI XHCI Boot
## Graphics Settings
self.allow_ts2_accel: bool = True # Set TeraScale 2 Acceleration support
self.drm_support: bool = False # Set iMac14,x DRM support
self.force_nv_web: bool = False # Force Nvidia Web Drivers on Tesla and Kepler
self.force_output_support: bool = False # Force Output support for Mac Pros with PC VBIOS
self.amd_gop_injection: bool = False # Set GOP Injection support
self.nvidia_kepler_gop_injection: bool = False # Set Kepler GOP Injection support
### MXM GPU Support
self.metal_build: bool = False # Set MXM Build support
self.imac_vendor: str = "None" # Set MXM GPU vendor
self.imac_model: str = "" # Set MXM GPU model
## Miscellaneous build settings
self.disallow_cpufriend: bool = False # Disable CPUFriend
self.enable_wake_on_wlan: bool = False # Allow Wake on WLAN for modern Broadcom
self.disable_tb: bool = False # Disable Thunderbolt Controller
self.dGPU_switch: bool = False # Set Display GPU Switching for Windows
self.force_surplus: bool = False # Force SurPlus patch in newer OSes
self.force_latest_psp: bool = False # Force latest PatcherSupportPkg
self.disable_fw_throttle: bool = False # Disable MSR Power Control and XCPM
self.software_demux: bool = False # Enable Software Demux patch set
self.force_vmm: bool = False # Force VMM patch
self.disable_connectdrivers: bool = False # Disable ConnectDrivers (hibernation)
self.set_vmm_cpuid: bool = False # Set VMM bit inside CPUID
self.disable_mediaanalysisd: bool = False # Set mediaanalysisd to spawn
self.force_quad_thread: bool = False # Force quad thread mode (cpus=4)
self.set_alc_usage: bool = True # Set AppleALC usage
self.allow_3rd_party_drives: bool = True # Allow ThridPartyDrives quirk
self.allow_nvme_fixing: bool = True # Allow NVMe Kernel Space Patches
self.apfs_trim_timeout: bool = True # Set APFS Trim timeout
self.custom_sip_value: int = None # Set custom SIP value
## Non-Metal OS support
self.legacy_accel_support = [
os_data.os_data.big_sur,
os_data.os_data.monterey,
os_data.os_data.ventura,
os_data.os_data.sonoma,
os_data.os_data.sequoia,
]
@property
def special_build(self):
"""
Special builds are used for testing. They do not get updates through the updater
"""
try:
version.parse(self.patcher_version)
return False
except version.InvalidVersion:
return True
# Payload Location
# Support Disk Images
@property
def payload_path_dmg(self):
return self.original_path / Path("payloads.dmg")
@property
def payload_local_binaries_root_path_dmg(self):
return self.original_path / Path("Universal-Binaries.dmg")
@property
def overlay_psp_path_dmg(self):
return self.original_path / Path("DortaniaInternalResources.dmg")
# OpenCore
@property
def opencore_zip_source(self):
return self.payload_path / Path(f"OpenCore/OpenCore-{'DEBUG' if self.opencore_debug is True else 'RELEASE'}.zip")
@property
def plist_template(self):
return self.payload_path / Path("Config/config.plist")
# Launch Services
@property
def launch_services_path(self):
return self.payload_path / Path("Launch Services")
@property
def auto_patch_launch_agent_path(self):
return self.launch_services_path / Path("com.dortania.opencore-legacy-patcher.auto-patch.plist")
@property
def rsr_monitor_launch_daemon_path(self):
return self.launch_services_path / Path("com.dortania.opencore-legacy-patcher.rsr-monitor.plist")
@property
def update_launch_daemon_path(self):
return self.launch_services_path / Path("com.dortania.opencore-legacy-patcher.macos-update.plist")
@property
def kdk_launch_daemon_path(self):
return self.launch_services_path / Path("com.dortania.opencore-legacy-patcher.os-caching.plist")
# ACPI
@property
def pci_ssdt_path(self):
return self.payload_path / Path("ACPI/SSDT-CPBG.aml")
@property
def windows_ssdt_path(self):
return self.payload_path / Path("ACPI/SSDT-PCI.aml")
@property
def demux_ssdt_path(self):
return self.payload_path / Path("ACPI/SSDT-DGPU.aml")
# Drivers
@property
def nvme_driver_path(self):
return self.payload_path / Path("Drivers/NvmExpressDxe.efi")
@property
def exfat_legacy_driver_path(self):
return self.payload_path / Path("Drivers/ExFatDxeLegacy.efi")
@property
def amd_gop_driver_path(self):
return self.payload_path / Path("Drivers/AMDGOP.efi")
@property
def nvidia_kepler_gop_driver_path(self):
return self.payload_path / Path("Drivers/NVGOP_GK.efi")
@property
def xhci_driver_path(self):
return self.payload_path / Path("Drivers/XhciDxe.efi")
@property
def usb_bus_driver_path(self):
return self.payload_path / Path("Drivers/UsbBusDxe.efi")
@property
def diags_launcher_path(self):
return self.payload_path / Path("Drivers/diags.efi")
@property
def link_rate_driver_path(self):
return self.payload_path / Path("Drivers/FixPCIeLinkRate.efi")
@property
def installer_sh_path(self):
return self.payload_path / Path("Installer.sh")
# Kexts
@property
def payload_kexts_path(self):
return self.payload_path / Path("Kexts")
@property
def lilu_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/Lilu-v{self.lilu_version}-{self.kext_variant}.zip")
@property
def whatevergreen_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/WhateverGreen-v{self.whatevergreen_version}-{self.kext_variant}.zip")
@property
def whatevergreen_navi_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/WhateverGreen-v{self.whatevergreen_navi_version}-{self.kext_variant}.zip")
@property
def airportbcrmfixup_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/AirportBrcmFixup-v{self.airportbcrmfixup_version}-{self.kext_variant}.zip")
@property
def restrictevents_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/RestrictEvents-v{self.restrictevents_version}-{self.kext_variant}.zip")
@property
def efi_disabler_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/EFICheckDisabler.zip")
@property
def bcm570_path(self):
return self.payload_kexts_path / Path(f"Ethernet/CatalinaBCM5701Ethernet-v{self.bcm570_version}.zip")
@property
def aquantia_path(self):
return self.payload_kexts_path / Path(f"Ethernet/AppleEthernetAbuantiaAqtion-v{self.aquantia_version}.zip")
@property
def i210_path(self):
return self.payload_kexts_path / Path(f"Ethernet/CatalinaIntelI210Ethernet-v{self.i210_version}.zip")
@property
def marvel_path(self):
return self.payload_kexts_path / Path(f"Ethernet/MarvelYukonEthernet-v{self.marvel_version}.zip")
@property
def nforce_path(self):
return self.payload_kexts_path / Path(f"Ethernet/nForceEthernet-v{self.nforce_version}.zip")
@property
def intel_82574l_path(self):
return self.payload_kexts_path / Path(f"Ethernet/Intel82574L-v{self.intel_82574l_version}.zip")
@property
def intel_8254x_path(self):
return self.payload_kexts_path / Path(f"Ethernet/AppleIntel8254XEthernet-v{self.intel_8254x_version}.zip")
@property
def apple_usb_11_injector_path(self):
return self.payload_kexts_path / Path(f"USB/USB1.1-Injector-v{self.apple_usb_11_injector}.zip")
@property
def aicpupm_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleIntelCPUPowerManagement-v{self.aicpupm_version}.zip")
@property
def aicpupm_client_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleIntelCPUPowerManagementClient-v{self.aicpupm_version}.zip")
@property
def mce_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleMCEReporterDisabler-v{self.mce_version}.zip")
@property
def bigsursdxc_path(self):
return self.payload_kexts_path / Path(f"Misc/BigSurSDXC-v{self.bigsursdxc_version}.zip")
@property
def monterey_ahci_path(self):
return self.payload_kexts_path / Path(f"Misc/MonteAHCIPort-v{self.monterey_ahci_version}.zip")
@property
def apfs_zlib_path(self):
return self.payload_kexts_path / Path(f"Misc/NoAVXFSCompressionTypeZlib-v{self.apfs_zlib_version}.zip")
@property
def apfs_zlib_v2_path(self):
return self.payload_kexts_path / Path(f"Misc/NoAVXFSCompressionTypeZlib-AVXpel-v{self.apfs_zlib_v2_version}.zip")
@property
def multitouch_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleUSBMultitouch-v{self.multitouch_version}.zip")
@property
def top_case_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleUSBTopCase-v{self.topcase_version}.zip")
@property
def top_case_inj_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleTopCaseInjector-v{self.topcase_inj_version}.zip")
@property
def t1_key_store_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleKeyStore-v{self.t1_key_store_version}.zip")
@property
def t1_credential_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleCredentialManager-v{self.t1_credential_version}.zip")
@property
def t1_sse_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleSSE-v{self.t1_sse_version}.zip")
@property
def t1_corecrypto_path(self):
return self.payload_kexts_path / Path(f"Misc/corecrypto_T1-v{self.t1_corecrypto_version}.zip")
@property
def apple_spi_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleHSSPISupport-v{self.apple_spi_version}.zip")
@property
def apple_spi_hid_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleHSSPIHIDDriver-v{self.apple_spi_hid_version}.zip")
@property
def kernel_relay_path(self):
return self.payload_kexts_path / Path(f"Misc/KernelRelayHost-v{self.kernel_relay_version}.zip")
@property
def mousse_path(self):
return self.payload_kexts_path / Path(f"SSE/AAAMouSSE-v{self.mousse_version}.zip")
@property
def telemetrap_path(self):
return self.payload_kexts_path / Path(f"SSE/telemetrap-v{self.telemetrap_version}.zip")
@property
def corecaptureelcap_path(self):
return self.payload_kexts_path / Path(f"Wifi/corecaptureElCap-v{self.corecaptureelcap_version}.zip")
@property
def io80211elcap_path(self):
return self.payload_kexts_path / Path(f"Wifi/IO80211ElCap-v{self.io80211elcap_version}.zip")
@property
def io80211legacy_path(self):
return self.payload_kexts_path / Path(f"Wifi/IO80211FamilyLegacy-v{self.io80211legacy_version}.zip")
@property
def ioskywalk_path(self):
return self.payload_kexts_path / Path(f"Wifi/IOSkywalkFamily-v{self.ioskywalk_version}.zip")
@property
def applealc_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/AppleALC-v{self.applealc_version}-{self.kext_variant}.zip")
@property
def piixata_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleIntelPIIXATA-v{self.piixata_version}.zip")
@property
def backlight_injector_path(self):
return self.payload_kexts_path / Path(f"Misc/BacklightInjector-v{self.backlight_injector_version}.zip")
@property
def backlight_injectorA_path(self):
return self.payload_kexts_path / Path(f"Misc/BacklightInjectorA-v{self.backlight_injectorA_version}.zip")
@property
def cpufriend_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/CPUFriend-v{self.cpufriend_version}-{self.kext_variant}.zip")
@property
def smcspoof_path(self):
return self.payload_kexts_path / Path(f"Misc/SMC-Spoof-v{self.smcspoof_version}.zip")
@property
def btspoof_path(self):
return self.payload_kexts_path / Path(f"Misc/Bluetooth-Spoof-v{self.btspoof_version}.zip")
@property
def aspp_override_path(self):
return self.payload_kexts_path / Path(f"Misc/ASPP-Override-v{self.aspp_override_version}.zip")
@property
def ecm_override_path(self):
return self.payload_kexts_path / Path(f"Misc/ECM-Override-v{self.ecm_override_version}.zip")
@property
def nvmefix_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/NVMeFix-v{self.nvmefix_version}-{self.kext_variant}.zip")
@property
def featureunlock_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/FeatureUnlock-v{self.featureunlock_version}-{self.kext_variant}.zip")
@property
def debugenhancer_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/DebugEnhancer-v{self.debugenhancer_version}-{self.kext_variant}.zip")
@property
def bluetool_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/BlueToolFixup-v{self.bluetool_version}-{self.kext_variant}.zip")
@property
def cslvfixup_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/CSLVFixup-v{self.cslvfixup_version}.zip")
@property
def autopkg_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/AutoPkgInstaller-v{self.autopkg_version}-{self.kext_variant}.zip")
@property
def cryptexfixup_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/CryptexFixup-v{self.cryptexfixup_version}-{self.kext_variant}.zip")
@property
def rsrhelper_path(self):
return self.payload_kexts_path / Path(f"Acidanthera/RSRHelper-v{self.rsrhelper_version}-{self.kext_variant}.zip")
@property
def amfipass_path(self):
# AMFIPass is release only
return self.payload_kexts_path / Path(f"Acidanthera/AMFIPass-v{self.amfipass_version}-RELEASE.zip")
@property
def innie_path(self):
return self.payload_kexts_path / Path(f"Misc/Innie-v{self.innie_version}-{self.kext_variant}.zip")
@property
def simplemsr_path(self):
return self.payload_kexts_path / Path(f"Misc/SimpleMSR-v{self.simplemsr_version}.zip")
@property
def gpu_wake_path(self):
return self.payload_kexts_path / Path(f"Misc/AMDGPUWakeHandler-v{self.gpu_wake_version}.zip")
@property
def apple_trackpad_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleUSBTrackpad-v{self.apple_trackpad}.zip")
@property
def apple_isight_path(self):
return self.payload_kexts_path / Path(f"Misc/LegacyUSBVideoSupport-v{self.apple_isight_version}.zip")
@property
def legacy_keyboard_path(self):
return self.payload_kexts_path / Path(f"Misc/LegacyKeyboardInjector-v{self.legacy_keyboard}.zip")
@property
def apple_raid_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleRAIDCard-v{self.apple_raid_version}.zip")
@property
def kdkless_path(self):
return self.payload_kexts_path / Path(f"Misc/KDKlessWorkaround-v{self.kdkless_version}-{self.kext_variant}.zip")
@property
def s3x_nvme_path(self):
return self.payload_kexts_path / Path(f"Misc/IOS3XeFamily-v{self.s3x_nvme_version}.zip")
@property
def apple_camera_path(self):
return self.payload_kexts_path / Path(f"Misc/AppleCameraInterface-v{self.apple_camera_version}.zip")
@property
def plist_folder_path(self):
return self.payload_kexts_path / Path("Plists")
@property
def platform_plugin_plist_path(self):
return self.plist_folder_path / Path("PlatformPlugin")
@property
def fw_family_path(self):
return self.payload_kexts_path / Path(f"FireWire/IOFireWireFamily-v{self.fw_kext}.zip")
@property
def fw_sbp2_path(self):
return self.payload_kexts_path / Path(f"FireWire/IOFireWireSBP2-v{self.fw_kext}.zip")
@property
def fw_bus_path(self):
return self.payload_kexts_path / Path(f"FireWire/IOFireWireSerialBusProtocolTransport-v{self.fw_kext}.zip")
# Build Location
@property
def build_path(self):
return self.current_path / Path("Build-Folder/")
@property
def opencore_release_folder(self):
return self.build_path / Path(f"OpenCore-Build")
@property
def opencore_zip_copied(self):
return self.build_path / Path(f"OpenCore-{'DEBUG' if self.opencore_debug is True else 'RELEASE'}.zip")
@property
def oc_folder(self):
return self.opencore_release_folder / Path("EFI/OC/")
@property
def plist_path(self):
return self.oc_folder / Path("config.plist")
@property
def acpi_path(self):
return self.oc_folder / Path("ACPI")
@property
def drivers_path(self):
return self.oc_folder / Path("Drivers")
@property
def kexts_path(self):
return self.oc_folder / Path("Kexts")
@property
def resources_path(self):
return self.oc_folder / Path("Resources")
@property
def map_kext_folder(self):
return self.kexts_path / Path("USB-Map.kext")
@property
def map_contents_folder(self):
return self.map_kext_folder / Path("Contents")
@property
def pp_kext_folder(self):
return self.kexts_path / Path("CPUFriendDataProvider.kext")
@property
def pp_contents_folder(self):
return self.pp_kext_folder / Path("Contents")
@property
def agdp_kext_folder(self):
return self.kexts_path / Path("AGDP-Override.kext")
@property
def agdp_contents_folder(self):
return self.agdp_kext_folder / Path("Contents")
@property
def agpm_kext_folder(self):
return self.kexts_path / Path("AGPM-Override.kext")
@property
def agpm_contents_folder(self):
return self.agpm_kext_folder / Path("Contents")
@property
def amc_kext_folder(self):
return self.kexts_path / Path("AMC-Override.kext")
@property
def amc_contents_folder(self):
return self.amc_kext_folder / Path("Contents")
# Tools
@property
def macserial_path(self):
return self.payload_path / Path("OpenCore/macserial")
@property
def vault_path(self):
return self.payload_path / Path("Tools/CreateVault/sign.command")
@property
def ocvalidate_path(self):
return self.payload_path / Path(f"OpenCore/ocvalidate")
@property
def oclp_helper_path(self):
return self.payload_path / Path("Tools/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher")
@property
def rsrrepair_userspace_path(self):
return self.payload_path / Path("Tools/RSRRepair")
# Icons
@property
def icns_resource_path(self):
if self.launcher_script:
return self.payload_path / Path("Icon/AppIcons")
return Path(self.launcher_binary).parent.parent / Path("Resources")
@property
def app_icon_path(self):
return self.payload_path / Path("Icon/AppIcons/OC-Patcher.icns")
@property
def icon_path_external(self):
return self.payload_path / Path("Icon/DriveIcons/External/.VolumeIcon.icns")
@property
def icon_path_internal(self):
return self.payload_path / Path("Icon/DriveIcons/Internal/.VolumeIcon.icns")
@property
def icon_path_sd(self):
return self.payload_path / Path("Icon/DriveIcons/SD-Card/.VolumeIcon.icns")
@property
def icon_path_ssd(self):
return self.payload_path / Path("Icon/DriveIcons/SSD/.VolumeIcon.icns")
@property
def icon_path_macos_generic(self):
return self.icns_resource_path / Path("Generic.icns")
@property
def icon_path_macos_big_sur(self):
return self.icns_resource_path / Path("BigSur.icns")
@property
def icon_path_macos_monterey(self):
return self.icns_resource_path / Path("Monterey.icns")
@property
def icon_path_macos_ventura(self):
return self.icns_resource_path / Path("Ventura.icns")
@property
def icon_path_macos_sonoma(self):
return self.icns_resource_path / Path("Sonoma.icns")
@property
def icon_path_macos_sequoia(self):
return self.icns_resource_path / Path("Sequoia.icns")
@property
def gui_path(self):
return self.payload_path / Path("Icon/Resources.zip")
@property
def installer_pkg_path(self):
return self.payload_path / Path("AutoPkg-Assets.pkg")
@property
def installer_pkg_zip_path(self):
return self.payload_path / Path("AutoPkg-Assets.pkg.zip")
# Apple Payloads Paths
@property
def payload_local_binaries_root_path(self):
return self.payload_path / Path("Universal-Binaries")
@property
def kdk_download_path(self):
return self.payload_path / Path("KDK.dmg")
@property
def metallib_download_path(self):
return self.payload_path / Path("MetallibSupportPkg.pkg")
@property
def icons_path(self):
return [
str(self.icon_path_macos_generic),
str(self.icon_path_macos_big_sur),
str(self.icon_path_macos_monterey),
str(self.icon_path_macos_ventura),
str(self.icon_path_macos_sonoma),
str(self.icon_path_macos_sequoia),
]
sbm_values = [
"j137ap", # iMacPro1,1
"j680ap", # MacBookPro15,1
"j132ap", # MacBookPro15,2
"j174ap", # Macmini8,1
"j140kap", # MacBookAir8,1
"j780ap", # MacBookPro15,3
"j213ap", # MacBookPro15,4
"j140aap", # MacBookAir8,2
"j152fap", # MacBookPro16,1
"j160ap", # MacPro7,1
"j230kap", # MacBookAir9,1
"j214kap", # MacBookPro16,2
"j223ap", # MacBookPro16,3
"j215ap", # MacBookPro16,4
"j185ap", # iMac20,1
"j185fap", # iMac20,2
# "x86legacy", # non-T2 Macs/VMs, Monterey's boot.efi enforces this on all Macs
]
sandy_board_id_stock = [
"Mac-94245B3640C91C81", # MacBookPro8,1
"Mac-94245A3940C91C80", # MacBookPro8,2
"Mac-942459F5819B171B", # MacBookPro8,3
"Mac-C08A6BB70A942AC2", # MacBookAir4,1
"Mac-742912EFDBEE19B3", # MacBookAir4,2
"Mac-8ED6AF5B48C039E1", # Macmini5,1
"Mac-4BC72D62AD45599E", # Macmini5,2
"Mac-7BA5B2794B2CDB12", # Macmini5,3
"Mac-942B5BF58194151B", # iMac12,1
"Mac-942B59F58194171B", # iMac12,2
"Mac-94245AF5819B141B", # AppleInternal MacBookPro8,3
"Mac-942B5B3A40C91381", # AppleInternal iMac12,2
]