mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-06-19 22:00:00 +10:00
wxPython GUI: Initial Commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
name: CI - Build wxPython
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build wxPython
|
||||||
|
runs-on: x86_64_mojave
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- run: /Library/Frameworks/Python.framework/Versions/3.9/bin/pyinstaller OpenCore-Patcher-GUI.spec
|
||||||
|
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements ./payloads/entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||||
|
- run: cd dist; zip -r ../OpenCore-Patcher-wxPython.app.zip OpenCore-Patcher.app
|
||||||
|
- run: ./../sign-wxpython.sh
|
||||||
|
- name: Upload App to Artifacts
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: OpenCore-Patcher-wxPython.app
|
||||||
|
path: OpenCore-Patcher-wxPython.app.zip
|
||||||
|
|
||||||
|
- name: Upload to Release
|
||||||
|
if: github.event_name == 'release'
|
||||||
|
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
file: OpenCore-Patcher-wxPython.app.zip
|
||||||
|
tag: ${{ github.ref }}
|
||||||
|
file_glob: true
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (C) 2020-2021, Dhinak G, Mykola Grymalyuk
|
||||||
|
from resources import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main.OpenCoreLegacyPatcher(True)
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
sys.path.append(os.path.abspath(os.getcwd()))
|
||||||
|
from resources import constants
|
||||||
|
block_cipher = None
|
||||||
|
|
||||||
|
|
||||||
|
a = Analysis(['OpenCore-Patcher-GUI.command'],
|
||||||
|
pathex=['resources', 'data', 'gui'],
|
||||||
|
binaries=[],
|
||||||
|
datas=[('payloads', 'payloads')],
|
||||||
|
hiddenimports=[],
|
||||||
|
hookspath=[],
|
||||||
|
hooksconfig={},
|
||||||
|
runtime_hooks=[],
|
||||||
|
excludes=[],
|
||||||
|
win_no_prefer_redirects=False,
|
||||||
|
win_private_assemblies=False,
|
||||||
|
cipher=block_cipher,
|
||||||
|
noarchive=False)
|
||||||
|
pyz = PYZ(a.pure, a.zipped_data,
|
||||||
|
cipher=block_cipher)
|
||||||
|
|
||||||
|
exe = EXE(pyz,
|
||||||
|
a.scripts,
|
||||||
|
a.binaries,
|
||||||
|
a.zipfiles,
|
||||||
|
a.datas,
|
||||||
|
[],
|
||||||
|
name='OpenCore-Patcher',
|
||||||
|
debug=False,
|
||||||
|
bootloader_ignore_signals=False,
|
||||||
|
strip=False,
|
||||||
|
upx=True,
|
||||||
|
upx_exclude=[],
|
||||||
|
runtime_tmpdir=None,
|
||||||
|
console=False,
|
||||||
|
disable_windowed_traceback=False,
|
||||||
|
target_arch=None,
|
||||||
|
codesign_identity=None,
|
||||||
|
entitlements_file=None )
|
||||||
|
app = BUNDLE(exe,
|
||||||
|
name='OpenCore-Patcher.app',
|
||||||
|
icon="payloads/OC-Patcher.icns",
|
||||||
|
bundle_identifier=None,
|
||||||
|
info_plist={
|
||||||
|
"CFBundleShortVersionString": constants.Constants().patcher_version,
|
||||||
|
"NSHumanReadableCopyright": "Copyright 2020-2021 Dortania"
|
||||||
|
})
|
||||||
+1754
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,34 @@
|
|||||||
|
import wx
|
||||||
|
|
||||||
|
class RedirectText(object):
|
||||||
|
def __init__(self,aWxTextCtrl):
|
||||||
|
self.out=aWxTextCtrl
|
||||||
|
|
||||||
|
def write(self,string):
|
||||||
|
self.out.WriteText(string)
|
||||||
|
wx.GetApp().Yield()
|
||||||
|
|
||||||
|
def fileno(self):
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class RedirectLabel(object):
|
||||||
|
def __init__(self,aWxTextCtrl):
|
||||||
|
self.out=aWxTextCtrl
|
||||||
|
|
||||||
|
def write(self,string):
|
||||||
|
if string.endswith("MB/s"):
|
||||||
|
self.out.SetLabel(string)
|
||||||
|
self.out.Centre(wx.HORIZONTAL)
|
||||||
|
wx.GetApp().Yield()
|
||||||
|
|
||||||
|
class RedirectLabelAll(object):
|
||||||
|
def __init__(self,aWxTextCtrl):
|
||||||
|
self.out=aWxTextCtrl
|
||||||
|
|
||||||
|
def write(self,string):
|
||||||
|
self.out.SetLabel(string)
|
||||||
|
self.out.Centre(wx.HORIZONTAL)
|
||||||
|
wx.GetApp().Yield()
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
from resources import constants, device_probe, utilities
|
||||||
|
from data import model_array, os_data, smbios_data, cpu_data
|
||||||
|
|
||||||
|
class detect_root_patch:
|
||||||
|
def __init__(self, model, versions):
|
||||||
|
self.model = model
|
||||||
|
self.constants: constants.Constants() = versions
|
||||||
|
self.computer = self.constants.computer
|
||||||
|
|
||||||
|
# GPU Patch Detection
|
||||||
|
self.nvidia_legacy= False
|
||||||
|
self.kepler_gpu= False
|
||||||
|
self.amd_ts1= False
|
||||||
|
self.amd_ts2= False
|
||||||
|
self.iron_gpu= False
|
||||||
|
self.sandy_gpu= False
|
||||||
|
self.ivy_gpu= False
|
||||||
|
|
||||||
|
# Misc Patch Detection
|
||||||
|
self.brightness_legacy= False
|
||||||
|
self.legacy_audio= False
|
||||||
|
self.legacy_wifi= False
|
||||||
|
self.legacy_gmux= False
|
||||||
|
self.legacy_keyboard_backlight= False
|
||||||
|
|
||||||
|
# Patch Requirements
|
||||||
|
self.amfi_must_disable= False
|
||||||
|
self.check_board_id= False
|
||||||
|
self.supports_metal= False
|
||||||
|
|
||||||
|
self.root_patch_dict = {
|
||||||
|
"Graphics: Nvidia Tesla": self.nvidia_legacy,
|
||||||
|
"Graphics: Nvidia Kepler": self.kepler_gpu,
|
||||||
|
"Graphics: AMD TeraScale 1": self.amd_ts1,
|
||||||
|
"Graphics: AMD TeraScale 2": self.amd_ts2,
|
||||||
|
"Graphics: Intel Ironlake": self.iron_gpu,
|
||||||
|
"Graphics: Intel Sandy Bridge": self.sandy_gpu,
|
||||||
|
"Graphics: Intel Ivy Bridge": self.ivy_gpu,
|
||||||
|
"Brightness: Legacy Backlight Control": self.brightness_legacy,
|
||||||
|
"Audio: Legacy Realtek": self.legacy_audio,
|
||||||
|
"Networking: Legacy Wireless": self.legacy_wifi,
|
||||||
|
"Miscellaneous: Legacy GMUX": self.legacy_gmux,
|
||||||
|
"Miscellaneous: Legacy Keyboard Backlight": self.legacy_keyboard_backlight,
|
||||||
|
"Settings: Requires AMFI exemption": self.amfi_must_disable,
|
||||||
|
"Settings: Requires Board ID validation": self.check_board_id,
|
||||||
|
}
|
||||||
|
|
||||||
|
def detect_gpus(self):
|
||||||
|
gpus = self.constants.computer.gpus
|
||||||
|
if self.constants.moj_cat_accel is True:
|
||||||
|
non_metal_os = os_data.os_data.high_sierra
|
||||||
|
else:
|
||||||
|
non_metal_os = os_data.os_data.catalina
|
||||||
|
for i, gpu in enumerate(gpus):
|
||||||
|
if gpu.class_code and gpu.class_code != 0xFFFFFFFF:
|
||||||
|
print(f"- Found GPU ({i}): {utilities.friendly_hex(gpu.vendor_id)}:{utilities.friendly_hex(gpu.device_id)}")
|
||||||
|
if gpu.arch in [device_probe.NVIDIA.Archs.Tesla, device_probe.NVIDIA.Archs.Fermi]:
|
||||||
|
if self.constants.detected_os > non_metal_os:
|
||||||
|
self.nvidia_legacy = True
|
||||||
|
self.amfi_must_disable = True
|
||||||
|
# self.legacy_keyboard_backlight = self.check_legacy_keyboard_backlight()
|
||||||
|
elif gpu.arch == device_probe.NVIDIA.Archs.Kepler:
|
||||||
|
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||||
|
# Kepler drivers were dropped with Beta 7
|
||||||
|
# 12.0 Beta 5: 21.0.0 - 21A5304g
|
||||||
|
# 12.0 Beta 6: 21.1.0 - 21A5506j
|
||||||
|
# 12.0 Beta 7: 21.1.0 - 21A5522h
|
||||||
|
if self.constants.detected_os == os_data.os_data.monterey and self.constants.detected_os_minor > 0:
|
||||||
|
if "21A5506j" not in self.constants.detected_os_build:
|
||||||
|
self.kepler_gpu = True
|
||||||
|
self.supports_metal = True
|
||||||
|
elif gpu.arch == device_probe.AMD.Archs.TeraScale_1:
|
||||||
|
if self.constants.detected_os > non_metal_os:
|
||||||
|
self.amd_ts1 = True
|
||||||
|
self.amfi_must_disable = True
|
||||||
|
elif gpu.arch == device_probe.AMD.Archs.TeraScale_2:
|
||||||
|
if self.constants.detected_os > non_metal_os:
|
||||||
|
self.amd_ts2 = True
|
||||||
|
self.amfi_must_disable = True
|
||||||
|
elif gpu.arch == device_probe.Intel.Archs.Iron_Lake:
|
||||||
|
if self.constants.detected_os > non_metal_os:
|
||||||
|
self.iron_gpu = True
|
||||||
|
self.amfi_must_disable = True
|
||||||
|
elif gpu.arch == device_probe.Intel.Archs.Sandy_Bridge:
|
||||||
|
if self.constants.detected_os > non_metal_os:
|
||||||
|
self.sandy_gpu = True
|
||||||
|
self.amfi_must_disable = True
|
||||||
|
self.check_board_id = True
|
||||||
|
elif gpu.arch == device_probe.Intel.Archs.Ivy_Bridge:
|
||||||
|
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||||
|
self.ivy_gpu = True
|
||||||
|
self.supports_metal = True
|
||||||
|
if self.supports_metal is True:
|
||||||
|
# Avoid patching Metal and non-Metal GPUs if both present, prioritize Metal GPU
|
||||||
|
# Main concerns are for iMac12,x with Sandy iGPU and Kepler dGPU
|
||||||
|
self.nvidia_legacy = False
|
||||||
|
self.amd_ts1 = False
|
||||||
|
self.amd_ts2 = False
|
||||||
|
self.iron_gpu = False
|
||||||
|
self.sandy_gpu = False
|
||||||
|
|
||||||
|
def check_dgpu_status(self):
|
||||||
|
dgpu = self.constants.computer.dgpu
|
||||||
|
if dgpu:
|
||||||
|
if dgpu.class_code and dgpu.class_code == 0xFFFFFFFF:
|
||||||
|
# If dGPU is disabled via class-codes, assume demuxed
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def detect_demux(self):
|
||||||
|
# If GFX0 is missing, assume machine was demuxed
|
||||||
|
# -wegnoegpu would also trigger this, so ensure arg is not present
|
||||||
|
if not "-wegnoegpu" in (utilities.get_nvram("boot-args") or ""):
|
||||||
|
igpu = self.constants.computer.igpu
|
||||||
|
dgpu = self.check_dgpu_status()
|
||||||
|
if igpu and not dgpu:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def check_legacy_keyboard_backlight(self):
|
||||||
|
# With Big Sur and newer, Skylight patch set unfortunately breaks native keyboard backlight
|
||||||
|
# Penryn Macs are able to re-enable the keyboard backlight by simply running '/usr/libexec/TouchBarServer'
|
||||||
|
# For Arrendale and newer, this has no effect.
|
||||||
|
if self.model.startswith("MacBookPro") or self.model.startswith("MacBookAir"):
|
||||||
|
# non-Metal MacBooks never had keyboard backlight
|
||||||
|
if smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.cpu_data.penryn.value:
|
||||||
|
if self.constants.detected_os > os_data.os_data.catalina:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def detect_patch_set(self):
|
||||||
|
self.detect_gpus()
|
||||||
|
if self.model in model_array.LegacyBrightness:
|
||||||
|
if self.constants.detected_os > os_data.os_data.catalina:
|
||||||
|
self.brightness_legacy = True
|
||||||
|
|
||||||
|
if self.model in ["iMac7,1", "iMac8,1"] or (self.model in model_array.LegacyAudio and utilities.check_kext_loaded("AppleALC", self.constants.detected_os) is False):
|
||||||
|
# Special hack for systems with botched GOPs
|
||||||
|
# TL;DR: No Boot Screen breaks Lilu, therefore breaking audio
|
||||||
|
if self.constants.detected_os > os_data.os_data.catalina:
|
||||||
|
self.legacy_audio = True
|
||||||
|
|
||||||
|
if (
|
||||||
|
isinstance(self.constants.computer.wifi, device_probe.Broadcom)
|
||||||
|
and self.constants.computer.wifi.chipset in [device_probe.Broadcom.Chipsets.AirPortBrcm4331, device_probe.Broadcom.Chipsets.AirPortBrcm43224]
|
||||||
|
) or (isinstance(self.constants.computer.wifi, device_probe.Atheros) and self.constants.computer.wifi.chipset == device_probe.Atheros.Chipsets.AirPortAtheros40):
|
||||||
|
if self.constants.detected_os > os_data.os_data.big_sur:
|
||||||
|
self.legacy_wifi = True
|
||||||
|
|
||||||
|
# if self.model in ["MacBookPro5,1", "MacBookPro5,2", "MacBookPro5,3", "MacBookPro8,2", "MacBookPro8,3"]:
|
||||||
|
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||||
|
# Sierra uses a legacy GMUX control method needed for dGPU switching on MacBookPro5,x
|
||||||
|
# Same method is also used for demuxed machines
|
||||||
|
# Note that MacBookPro5,x machines are extremely unstable with this patch set, so disabled until investigated further
|
||||||
|
# Ref: https://github.com/dortania/OpenCore-Legacy-Patcher/files/7360909/KP-b10-030.txt
|
||||||
|
if self.constants.detected_os > os_data.os_data.high_sierra:
|
||||||
|
if self.model in ["MacBookPro8,2", "MacBookPro8,3"]:
|
||||||
|
# Ref: https://doslabelectronics.com/Demux.html
|
||||||
|
if self.detect_demux() is True:
|
||||||
|
self.legacy_gmux = True
|
||||||
|
else:
|
||||||
|
self.legacy_gmux = True
|
||||||
|
|
||||||
|
|
||||||
|
return self.root_patch_dict
|
||||||
Reference in New Issue
Block a user