mirror of
https://github.com/outbackdingo/OpCore-Simplify.git
synced 2026-01-27 10:19:49 +00:00
Add loading output for OpenCore EFI build steps
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from Scripts.datasets import os_data
|
||||
from Scripts import acpi_guru
|
||||
from Scripts import compatibility_checker
|
||||
from Scripts import efi_builder
|
||||
from Scripts import config_prodigy
|
||||
from Scripts import gathering_files
|
||||
from Scripts import kext_maestro
|
||||
from Scripts import smbios
|
||||
@@ -10,7 +10,9 @@ import updater
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import shutil
|
||||
import traceback
|
||||
import time
|
||||
|
||||
class OCPE:
|
||||
def __init__(self):
|
||||
@@ -18,7 +20,7 @@ class OCPE:
|
||||
self.o = gathering_files.gatheringFiles()
|
||||
self.ac = acpi_guru.ACPIGuru()
|
||||
self.c = compatibility_checker.CompatibilityChecker()
|
||||
self.b = efi_builder.builder()
|
||||
self.co = config_prodigy.ConfigProdigy()
|
||||
self.k = kext_maestro.KextMaestro()
|
||||
self.s = smbios.SMBIOS()
|
||||
self.u = utils.Utils()
|
||||
@@ -79,6 +81,113 @@ class OCPE:
|
||||
|
||||
if self.u.parse_darwin_version(supported_macos_version[0]) <= self.u.parse_darwin_version(target_version) <= self.u.parse_darwin_version(supported_macos_version[-1]):
|
||||
return target_version
|
||||
|
||||
def build_opencore_efi(self, hardware_report, unsupported_devices, smbios_model, macos_version):
|
||||
self.u.head("Building OpenCore EFI")
|
||||
print("")
|
||||
print("1. Copy EFI base to results folder...", end=" ")
|
||||
self.u.create_folder(self.result_dir, remove_content=True)
|
||||
|
||||
if not os.path.exists(self.k.ock_files_dir):
|
||||
raise Exception("Directory '{}' does not exist.".format(self.k.ock_files_dir))
|
||||
|
||||
source_efi_dir = os.path.join(self.k.ock_files_dir, "OpenCore")
|
||||
shutil.copytree(source_efi_dir, self.result_dir, dirs_exist_ok=True)
|
||||
print("Done")
|
||||
print("2. Generate config.plist...", end=" ")
|
||||
config_file = os.path.join(self.result_dir, "EFI", "OC", "config.plist")
|
||||
config_data = self.u.read_file(config_file)
|
||||
|
||||
if not config_data:
|
||||
raise Exception("Error: The file {} does not exist.".format(config_file))
|
||||
|
||||
self.co.genarate(hardware_report, unsupported_devices, smbios_model, macos_version, self.k.kexts, config_data)
|
||||
print("Done")
|
||||
print("3. Apply ACPI patches...", end=" ")
|
||||
self.ac.hardware_report = hardware_report
|
||||
self.ac.unsupported_devices = unsupported_devices
|
||||
self.ac.acpi_directory = os.path.join(self.result_dir, "EFI", "OC", "ACPI")
|
||||
self.ac.smbios_model = smbios_model
|
||||
self.ac.get_low_pin_count_bus_device()
|
||||
|
||||
for patch in self.ac.patches:
|
||||
if patch.checked:
|
||||
if patch.name == "BATP":
|
||||
patch.checked = getattr(self.ac, patch.function_name)()
|
||||
continue
|
||||
|
||||
acpi_load = getattr(self.ac, patch.function_name)()
|
||||
|
||||
if not isinstance(acpi_load, dict):
|
||||
continue
|
||||
|
||||
config_data["ACPI"]["Add"].extend(acpi_load.get("Add", []))
|
||||
config_data["ACPI"]["Delete"].extend(acpi_load.get("Delete", []))
|
||||
config_data["ACPI"]["Patch"].extend(acpi_load.get("Patch", []))
|
||||
|
||||
config_data["ACPI"]["Patch"] = self.ac.apply_acpi_patches(config_data["ACPI"]["Patch"])
|
||||
print("Done")
|
||||
print("4. Copy kexts and snapshot to config.plist...", end=" ")
|
||||
kexts_directory = os.path.join(self.result_dir, "EFI", "OC", "Kexts")
|
||||
self.k.install_kexts_to_efi(macos_version, kexts_directory)
|
||||
config_data["Kernel"]["Add"] = self.k.load_kexts(macos_version, kexts_directory)
|
||||
|
||||
self.u.write_file(config_file, config_data)
|
||||
print("Done")
|
||||
print("5. Clean up unused drivers, resources, and tools...", end=" ")
|
||||
files_to_remove = []
|
||||
|
||||
drivers_directory = os.path.join(self.result_dir, "EFI", "OC", "Drivers")
|
||||
driver_list = self.u.find_matching_paths(drivers_directory, extension_filter=".efi")
|
||||
driver_loaded = [kext.get("Path") for kext in config_data.get("UEFI").get("Drivers")]
|
||||
for driver_path, type in driver_list:
|
||||
if not driver_path in driver_loaded:
|
||||
files_to_remove.append(os.path.join(drivers_directory, driver_path))
|
||||
|
||||
resources_audio_dir = os.path.join(self.result_dir, "EFI", "OC", "Resources", "Audio")
|
||||
if os.path.exists(resources_audio_dir):
|
||||
files_to_remove.append(resources_audio_dir)
|
||||
|
||||
picker_variant = config_data.get("Misc", {}).get("Boot", {}).get("PickerVariant")
|
||||
if picker_variant in (None, "Auto"):
|
||||
picker_variant = "Acidanthera/GoldenGate"
|
||||
if os.name == "nt":
|
||||
picker_variant = picker_variant.replace("/", "\\")
|
||||
|
||||
resources_image_dir = os.path.join(self.result_dir, "EFI", "OC", "Resources", "Image")
|
||||
available_picker_variants = self.u.find_matching_paths(resources_image_dir, type_filter="dir")
|
||||
|
||||
for variant_name, variant_type in available_picker_variants:
|
||||
variant_path = os.path.join(resources_image_dir, variant_name)
|
||||
if ".icns" in ", ".join(os.listdir(variant_path)):
|
||||
if picker_variant not in variant_name:
|
||||
files_to_remove.append(variant_path)
|
||||
|
||||
tools_directory = os.path.join(self.result_dir, "EFI", "OC", "Tools")
|
||||
tool_list = self.u.find_matching_paths(tools_directory, extension_filter=".efi")
|
||||
tool_loaded = [tool.get("Path") for tool in config_data.get("Misc").get("Tools")]
|
||||
for tool_path, type in tool_list:
|
||||
if not tool_path in tool_loaded:
|
||||
files_to_remove.append(os.path.join(tools_directory, tool_path))
|
||||
|
||||
removal_error = None
|
||||
for file_path in files_to_remove:
|
||||
try:
|
||||
if os.path.isdir(file_path):
|
||||
shutil.rmtree(file_path)
|
||||
else:
|
||||
os.remove(file_path)
|
||||
except Exception as e:
|
||||
removal_error = True
|
||||
print("Failed to remove file: {}".format(e))
|
||||
|
||||
if removal_error:
|
||||
print("")
|
||||
|
||||
print("Done")
|
||||
print("")
|
||||
print("OpenCore EFI build complete.")
|
||||
time.sleep(2)
|
||||
|
||||
def results(self, hardware_report, smbios_model):
|
||||
self.u.head("Results")
|
||||
@@ -176,7 +285,7 @@ class OCPE:
|
||||
self.k.select_required_kexts(hardware_report, smbios_model, macos_version, self.ac.patches)
|
||||
elif option == 6:
|
||||
self.gathering_files()
|
||||
self.b.build_efi(hardware_report, unsupported_devices, smbios_model, macos_version, self.ac, self.k)
|
||||
self.build_opencore_efi(hardware_report, unsupported_devices, smbios_model, macos_version)
|
||||
self.results(hardware_report, smbios_model)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user