diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa6fe7c7..dbc681076 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Fix Photos app distortion on legacy GPUs - Fix device tree renaming on Mac Pros and Xserves - Ensure no Acceleration Patches applied when no compatible GPU found +- Allow custom SMBIOS overriding ## 0.1.5 - Fix crashing when Wireless module not present diff --git a/OpenCore-Patcher.command b/OpenCore-Patcher.command index 95a904a83..9e563ec6c 100755 --- a/OpenCore-Patcher.command +++ b/OpenCore-Patcher.command @@ -135,6 +135,7 @@ system_profiler SPHardwareDataType | grep 'Model Identifier' [f"Assume Legacy GPU:\t\t\tCurrently {self.constants.assume_legacy}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).force_accel_setting], #[f"Download more RAM:\t\t\tCurrently {self.constants.download_ram}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).download_more_ram_dot_com], [f"Disable CPU Friend:\t\t\tCurrently {self.constants.disallow_cpufriend}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).disable_cpufriend], + [f"Override SMBIOS Spoof:\t\tCurrently {self.constants.override_smbios}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).set_smbios], [f"Set Custom name {self.constants.custom_cpu_model_value}", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).custom_cpu], [f"Set SeedUtil Status", CliMenu.MenuOptions(self.constants.custom_model or self.current_model, self.constants).set_seedutil], ] diff --git a/Resources/Build.py b/Resources/Build.py index d1c6d6b0c..b489e1758 100644 --- a/Resources/Build.py +++ b/Resources/Build.py @@ -35,6 +35,42 @@ class BuildOpenCore: self.config = None self.constants: Constants.Constants = versions + def smbios_set(self): + if self.model in ModelArray.MacBookAir61: + print("- Spoofing to MacBookAir6,1") + return "MacBookAir6,1" + elif self.model in ModelArray.MacBookAir62: + print("- Spoofing to MacBookAir6,2") + return "MacBookAir6,2" + elif self.model in ModelArray.MacBookPro111: + print("- Spoofing to MacBookPro11,1") + return "MacBookPro11,1" + elif self.model in ModelArray.MacBookPro113: + print("- Spoofing to MacBookPro11,3") + return "MacBookPro11,3" + elif self.model in ModelArray.Macmini71: + print("- Spoofing to Macmini7,1") + return "Macmini7,1" + elif self.model in ModelArray.iMacPro11: + print("- Spoofing to iMacPro1,1") + return "iMacPro1,1" + elif self.model in ModelArray.iMac151: + # Check for upgraded GPUs on iMacs + if self.constants.drm_support is True: + print("- Spoofing to iMacPro1,1") + return "iMacPro1,1" + else: + print("- Spoofing to iMac15,1") + return "iMac15,1" + elif self.model in ModelArray.iMac144: + print("- Spoofing to iMac14,4") + return "iMac14,4" + elif self.model in ModelArray.MacPro71: + print("- Spoofing to MacPro7,1") + return "MacPro7,1" + else: + return self.model + def build_efi(self): Utilities.cls() if not self.constants.custom_model: @@ -283,30 +319,31 @@ class BuildOpenCore: self.get_kext_by_bundle_path("USB-Map.kext")["Enabled"] = True - if self.model == "MacBookPro9,1": - print("- Adding AppleMuxControl Override") - amc_map_path = Path(self.constants.plist_folder_path) / Path("AppleMuxControl/Info.plist") - self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "vit9696"} - Path(self.constants.amc_kext_folder).mkdir() - Path(self.constants.amc_contents_folder).mkdir() - shutil.copy(amc_map_path, self.constants.amc_contents_folder) - self.get_kext_by_bundle_path("AMC-Override.kext")["Enabled"] = True + if self.constants.allow_oc_everywhere is False: + if self.model == "MacBookPro9,1": + print("- Adding AppleMuxControl Override") + amc_map_path = Path(self.constants.plist_folder_path) / Path("AppleMuxControl/Info.plist") + self.config["DeviceProperties"]["Add"]["PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)"] = {"agdpmod": "vit9696"} + Path(self.constants.amc_kext_folder).mkdir() + Path(self.constants.amc_contents_folder).mkdir() + shutil.copy(amc_map_path, self.constants.amc_contents_folder) + self.get_kext_by_bundle_path("AMC-Override.kext")["Enabled"] = True - if self.model not in ModelArray.NoAGPMSupport: - print("- Adding AppleGraphicsPowerManagement Override") - agpm_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsPowerManagement/Info.plist") - Path(self.constants.agpm_kext_folder).mkdir() - Path(self.constants.agpm_contents_folder).mkdir() - shutil.copy(agpm_map_path, self.constants.agpm_contents_folder) - self.get_kext_by_bundle_path("AGPM-Override.kext")["Enabled"] = True + if self.model not in ModelArray.NoAGPMSupport: + print("- Adding AppleGraphicsPowerManagement Override") + agpm_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsPowerManagement/Info.plist") + Path(self.constants.agpm_kext_folder).mkdir() + Path(self.constants.agpm_contents_folder).mkdir() + shutil.copy(agpm_map_path, self.constants.agpm_contents_folder) + self.get_kext_by_bundle_path("AGPM-Override.kext")["Enabled"] = True - if self.model in ModelArray.AGDPSupport: - print("- Adding AppleGraphicsDevicePolicy Override") - agdp_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsDevicePolicy/Info.plist") - Path(self.constants.agdp_kext_folder).mkdir() - Path(self.constants.agdp_contents_folder).mkdir() - shutil.copy(agdp_map_path, self.constants.agdp_contents_folder) - self.get_kext_by_bundle_path("AGDP-Override.kext")["Enabled"] = True + if self.model in ModelArray.AGDPSupport: + print("- Adding AppleGraphicsDevicePolicy Override") + agdp_map_path = Path(self.constants.plist_folder_path) / Path("AppleGraphicsDevicePolicy/Info.plist") + Path(self.constants.agdp_kext_folder).mkdir() + Path(self.constants.agdp_contents_folder).mkdir() + shutil.copy(agdp_map_path, self.constants.agdp_contents_folder) + self.get_kext_by_bundle_path("AGDP-Override.kext")["Enabled"] = True # AGPM Patch if self.model in ModelArray.DualGPUPatch: @@ -502,7 +539,7 @@ class BuildOpenCore: self.config["UEFI"]["Output"]["GopPassThrough"] = "Apple" # ThirdPartDrives Check - if self.model not in ModelArray.NoSATAPatch: + if self.model not in ModelArray.NoSATAPatch and self.constants.allow_oc_everywhere is False: print("- Adding SATA Hibernation Patch") self.config["Kernel"]["Quirks"]["ThirdPartyDrives"] = True @@ -553,51 +590,14 @@ class BuildOpenCore: def set_smbios(self): spoofed_model = self.model - # TODO: Set check as global variable - if self.model in ModelArray.MacBookAir61: - print("- Spoofing to MacBookAir6,1") - spoofed_model = "MacBookAir6,1" - spoofed_board = "Mac-35C1E88140C3E6CF" - elif self.model in ModelArray.MacBookAir62: - print("- Spoofing to MacBookAir6,2") - spoofed_model = "MacBookAir6,2" - spoofed_board = "Mac-7DF21CB3ED6977E5" - elif self.model in ModelArray.MacBookPro111: - print("- Spoofing to MacBookPro11,1") - spoofed_model = "MacBookPro11,1" - spoofed_board = "Mac-189A3D4F975D5FFC" - elif self.model in ModelArray.MacBookPro113: - print("- Spoofing to MacBookPro11,3") - spoofed_model = "MacBookPro11,3" - spoofed_board = "Mac-2BD1B31983FE1663" - elif self.model in ModelArray.Macmini71: - print("- Spoofing to Macmini7,1") - spoofed_model = "Macmini7,1" - spoofed_board = "Mac-35C5E08120C7EEAF" - elif self.model in ModelArray.iMacPro11: - print("- Spoofing to iMacPro1,1") - spoofed_model = "iMacPro1,1" - spoofed_board = "Mac-7BA5B2D9E42DDD94" - elif self.model in ModelArray.iMac151: - # Check for upgraded GPUs on iMacs - if self.constants.drm_support is True: - print("- Spoofing to iMacPro1,1") - spoofed_model = "iMacPro1,1" - spoofed_board = "Mac-7BA5B2D9E42DDD94" - else: - print("- Spoofing to iMac15,1") - spoofed_model = "iMac15,1" - spoofed_board = "Mac-42FD25EABCABB274" - elif self.model in ModelArray.iMac144: - print("- Spoofing to iMac14,4") - spoofed_model = "iMac14,4" - spoofed_board = "Mac-81E3E92DD6088272" - elif self.model in ModelArray.MacPro71: - print("- Spoofing to MacPro7,1") - spoofed_model = "MacPro7,1" - spoofed_board = "Mac-27AD2F918AE68F61" + if self.constants.override_smbios == "Default": + spoofed_model = self.smbios_set() else: - spoofed_model = self.model + spoofed_model = self.constants.override_smbios + try: + spoofed_board = self.constants.board_id[spoofed_model] + print(f"- Using Board ID: {spoofed_board}") + except KeyError: spoofed_board = "" self.spoofed_model = spoofed_model self.spoofed_board = spoofed_board @@ -692,21 +692,22 @@ class BuildOpenCore: plistlib.dump(cpu_config, Path(new_cpu_ls).open("wb"), sort_keys=True) - if self.model == "MacBookPro9,1": - new_amc_ls = Path(self.constants.amc_contents_folder) / Path("Info.plist") - amc_config = plistlib.load(Path(new_amc_ls).open("rb")) - amc_config["IOKitPersonalities"]["AppleMuxControl"]["ConfigMap"][self.spoofed_board] = amc_config["IOKitPersonalities"]["AppleMuxControl"]["ConfigMap"].pop(self.model) - plistlib.dump(amc_config, Path(new_amc_ls).open("wb"), sort_keys=True) - if self.model not in ModelArray.NoAGPMSupport: - new_agpm_ls = Path(self.constants.agpm_contents_folder) / Path("Info.plist") - agpm_config = plistlib.load(Path(new_agpm_ls).open("rb")) - agpm_config["IOKitPersonalities"]["AGPM"]["Machines"][self.spoofed_board] = agpm_config["IOKitPersonalities"]["AGPM"]["Machines"].pop(self.model) - plistlib.dump(agpm_config, Path(new_agpm_ls).open("wb"), sort_keys=True) - if self.model in ModelArray.AGDPSupport: - new_agdp_ls = Path(self.constants.agdp_contents_folder) / Path("Info.plist") - agdp_config = plistlib.load(Path(new_agdp_ls).open("rb")) - agdp_config["IOKitPersonalities"]["AppleGraphicsDevicePolicy"]["ConfigMap"][self.spoofed_board] = agdp_config["IOKitPersonalities"]["AppleGraphicsDevicePolicy"]["ConfigMap"].pop(self.model) - plistlib.dump(agdp_config, Path(new_agdp_ls).open("wb"), sort_keys=True) + if self.constants.allow_oc_everywhere is False: + if self.model == "MacBookPro9,1": + new_amc_ls = Path(self.constants.amc_contents_folder) / Path("Info.plist") + amc_config = plistlib.load(Path(new_amc_ls).open("rb")) + amc_config["IOKitPersonalities"]["AppleMuxControl"]["ConfigMap"][self.spoofed_board] = amc_config["IOKitPersonalities"]["AppleMuxControl"]["ConfigMap"].pop(self.model) + plistlib.dump(amc_config, Path(new_amc_ls).open("wb"), sort_keys=True) + if self.model not in ModelArray.NoAGPMSupport: + new_agpm_ls = Path(self.constants.agpm_contents_folder) / Path("Info.plist") + agpm_config = plistlib.load(Path(new_agpm_ls).open("rb")) + agpm_config["IOKitPersonalities"]["AGPM"]["Machines"][self.spoofed_board] = agpm_config["IOKitPersonalities"]["AGPM"]["Machines"].pop(self.model) + plistlib.dump(agpm_config, Path(new_agpm_ls).open("wb"), sort_keys=True) + if self.model in ModelArray.AGDPSupport: + new_agdp_ls = Path(self.constants.agdp_contents_folder) / Path("Info.plist") + agdp_config = plistlib.load(Path(new_agdp_ls).open("rb")) + agdp_config["IOKitPersonalities"]["AppleGraphicsDevicePolicy"]["ConfigMap"][self.spoofed_board] = agdp_config["IOKitPersonalities"]["AppleGraphicsDevicePolicy"]["ConfigMap"].pop(self.model) + plistlib.dump(agdp_config, Path(new_agdp_ls).open("wb"), sort_keys=True) @staticmethod @@ -949,7 +950,8 @@ Please build OpenCore first!""" print("- Cleaning install location") if self.constants.recovery_status == False: # RecoveryOS doesn't support dot_clean - subprocess.run(["dot_clean", mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode() + # Remove dot_clean, requires full disk access + #subprocess.run(["dot_clean", mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode() print("- Unmounting EFI partition") subprocess.run(["diskutil", "umount", mount_path], stdout=subprocess.PIPE).stdout.decode().strip().encode() print("- OpenCore transfer complete") diff --git a/Resources/CliMenu.py b/Resources/CliMenu.py index be8cd117d..69c0839be 100644 --- a/Resources/CliMenu.py +++ b/Resources/CliMenu.py @@ -409,3 +409,32 @@ Valid options: self.set_seedutil() else: print("Returning to main menu") + + def set_smbios(self): + Utilities.cls() + Utilities.header(["Override SMBIOS Spoof"]) + print("""Change model OpenCore spoofs Mac too + +Valid options: +1. Default set by OpenCore (Default) +2. User Override +3. Disable all spoofing (unsupported configuration) + """) + + change_menu = input("Set SMBIOS status: ") + if change_menu == "1": + print("Setting SMBIOS spoof to default mode") + self.constants.override_smbios = "Default" + elif change_menu == "2": + custom_smbios = input("Set new SMBIOS mode: ") + try: + test = self.constants.board_id[custom_smbios] + self.constants.override_smbios = custom_smbios + except KeyError: + print("Unsupported SMBIOS, defaulting to Default setting") + self.constants.override_smbios = "Default" + elif change_menu == "3": + print("Disabling SMBIOS spoof") + self.constants.override_smbios = self.constants.custom_model or self.current_model + else: + print("Returning to main menu") diff --git a/Resources/Constants.py b/Resources/Constants.py index d58ece170..2b45128b1 100644 --- a/Resources/Constants.py +++ b/Resources/Constants.py @@ -79,6 +79,7 @@ class Constants: self.download_ram = False self.disallow_cpufriend = False self.recovery_status = False + self.override_smbios = "Default" # OS Versions self.tiger = 8 @@ -374,3 +375,130 @@ class Constants: "j185", "j185f", ] + + board_id = { + "MacBook1,1": "Mac-F4208CC8", + "MacBook2,1": "Mac-F4208CA9", + "MacBook3,1": "Mac-F22788C8", + "MacBook4,1": "Mac-F22788A9", + "MacBook5,1": "Mac-F42D89C8", + "MacBook5,2": "Mac-F22788AA", + "MacBook6,1": "Mac-F22C8AC8", + "MacBook7,1": "Mac-F22C89C8", + "MacBook8,1": "Mac-BE0E8AC46FE800CC", + "MacBook9,1": "Mac-9AE82516C7C6B903", + "MacBook10,1": "Mac-EE2EBD4B90B839A8", + "MacBookAir1,1": "Mac-F42C8CC8", + "MacBookAir2,1": "Mac-F42D88C8", + "MacBookAir3,1": "Mac-942452F5819B1C1B", + "MacBookAir3,2": "Mac-942C5DF58193131B", + "MacBookAir4,1": "Mac-C08A6BB70A942AC2", + "MacBookAir4,2": "Mac-742912EFDBEE19B3", + "MacBookAir5,1": "Mac-66F35F19FE2A0D05", + "MacBookAir5,2": "Mac-2E6FAB96566FE58C", + "MacBookAir6,1": "Mac-35C1E88140C3E6CF", + "MacBookAir6,2": "Mac-7DF21CB3ED6977E5", + "MacBookAir7,1": "Mac-9F18E312C5C2BF0B", + "MacBookAir7,2": "Mac-937CB26E2E02BB01", + "MacBookAir8,1": "Mac-827FAC58A8FDFA22", + "MacBookAir8,1": "Mac-226CB3C6A851A671", + "MacBookAir9,1": "Mac-0CFF9C7C2B63DF8D", + "MacBookPro1,1": "Mac-F425BEC8", + "MacBookPro1,2": "Mac-F42DBEC8", + "MacBookPro2,1": "Mac-F42189C8", + "MacBookPro2,2": "Mac-F42187C8", + "MacBookPro3,1": "Mac-F4238BC8", + "MacBookPro4,1": "Mac-F42C89C8", + "MacBookPro5,1": "Mac-F42D86C8", + "MacBookPro5,2": "Mac-F2268EC8", + "MacBookPro5,3": "Mac-F22587C8", + "MacBookPro5,4": "Mac-F22587A1", + "MacBookPro5,5": "Mac-F2268AC8", + "MacBookPro6,1": "Mac-F22589C8", + "MacBookPro6,2": "Mac-F22586C8", + "MacBookPro7,1": "Mac-F222BEC8", + "MacBookPro8,1": "Mac-94245B3640C91C81", + "MacBookPro8,2": "Mac-94245A3940C91C80", + "MacBookPro8,3": "Mac-942459F5819B171B", + "MacBookPro9,1": "Mac-4B7AC7E43945597E", + "MacBookPro9,2": "Mac-6F01561E16C75D06", + "MacBookPro10,1": "Mac-C3EC7CD22292981F", + "MacBookPro10,2": "Mac-AFD8A9D944EA4843", + "MacBookPro11,1": "Mac-189A3D4F975D5FFC", + "MacBookPro11,2": "Mac-3CBD00234E554E41", + "MacBookPro11,3": "Mac-2BD1B31983FE1663", + "MacBookPro11,4": "Mac-06F11FD93F0323C5", + "MacBookPro11,5": "Mac-06F11F11946D27C5", + "MacBookPro12,1": "Mac-E43C1C25D4880AD6", + "MacBookPro13,1": "Mac-473D31EABEB93F9B", + "MacBookPro13,2": "Mac-66E35819EE2D0D05", + "MacBookPro13,3": "Mac-A5C67F76ED83108C", + "MacBookPro14,1": "Mac-B4831CEBD52A0C4C", + "MacBookPro14,2": "Mac-CAD6701F7CEA0921", + "MacBookPro14,3": "Mac-551B86E5744E2388", + "MacBookPro15,1": "Mac-937A206F2EE63C01", + "MacBookPro15,2": "Mac-827FB448E656EC26", + "MacBookPro15,3": "Mac-1E7E29AD0135F9BC", + "MacBookPro15,4": "Mac-53FDB3D8DB8CA971", + "MacBookPro16,1": "Mac-E1008331FDC96864", + "MacBookPro16,2": "Mac-5F9802EFE386AA28", + "MacBookPro16,3": "Mac-E7203C0F68AA0004", + "MacBookPro16,4": "Mac-A61BADE1FDAD7B05", + "Macmini1,1": "Mac-F4208EC8", + "Macmini2,1": "Mac-F4208EAA", + "Macmini3,1": "Mac-F22C86C8", + "Macmini4,1": "Mac-F2208EC8", + "Macmini5,1": "Mac-8ED6AF5B48C039E1", + "Macmini5,2": "Mac-4BC72D62AD45599E", + "Macmini5,3": "Mac-7BA5B2794B2CDB12", + "Macmini6,1": "Mac-031AEE4D24BFF0B1", + "Macmini6,2": "Mac-F65AE981FFA204ED", + "Macmini7,1": "Mac-35C5E08120C7EEAF", + "Macmini8,1": "Mac-7BA5B2DFE22DDD8C", + "iMac4,1": "Mac-F42786C8", + "iMac4,2": "Mac-F4218EC8", + "iMac5,1": "Mac-F4228EC8", + "iMac5,2": "Mac-F4218EC8", + "iMac6,1": "Mac-F4218FC8", + "iMac7,1": "Mac-F42386C8", + "iMac8,1": "Mac-F227BEC8", + "iMac9,1": "Mac-F2218FA9", + "iMac10,1": "Mac-F221DCC8", + "iMac10,1": "Mac-F2268CC8", + "iMac11,1": "Mac-F2268DAE", + "iMac11,2": "Mac-F2238AC8", + "iMac11,3": "Mac-F2238BAE", + "iMac12,1": "Mac-942B5BF58194151B", + "iMac12,2": "Mac-942B59F58194171B", + "iMac13,1": "Mac-00BE6ED71E35EB86", + "iMac13,1": "Mac-00BE6ED71E35EB86", + "iMac13,2": "Mac-FC02E91DDD3FA6A4", + "iMac13,3": "Mac-7DF2A3B5E5D671ED", + "iMac14,1": "Mac-031B6874CF7F642A", + "iMac14,2": "Mac-27ADBB7B4CEE8E61", + "iMac14,3": "Mac-77EB7D7DAF985301", + "iMac14,4": "Mac-81E3E92DD6088272", + "iMac15,1": "Mac-42FD25EABCABB274", + "iMac16,1": "Mac-A369DDC4E67F1C45", + "iMac16,2": "Mac-FFE5EF870D7BA81A", + "iMac17,1": "Mac-DB15BD556843C820", + "iMac18,1": "Mac-4B682C642B45593E", + "iMac18,2": "Mac-77F17D7DA9285301", + "iMac18,3": "Mac-BE088AF8C5EB4FA2", + "iMac19,1": "Mac-AA95B1DDAB278B95", + "iMac19,2": "Mac-63001698E7A34814", + "iMac20,1": "Mac-CFF7D910A743CAAF", + "iMac20,2": "Mac-AF89B6D9451A490B", + "iMacPro1,1": "Mac-7BA5B2D9E42DDD94", + "MacPro1,1": "Mac-F4208DC8", + "MacPro2,1": "Mac-F4208DA9", + "MacPro3,1": "Mac-F42C88C8", + "MacPro4,1": "Mac-F221BEC8", + "MacPro5,1": "Mac-F221BEC8", + "MacPro5,1": "Mac-F221BEC8", + "MacPro6,1": "Mac-F60DEB81FF30ACF6", + "MacPro7,1": "Mac-27AD2F918AE68F61", + "Xserve1,1": "Mac-F4208AC8", + "Xserve2,1": "Mac-F42289C8", + "Xserve3,1": "Mac-F223BEC8", + } \ No newline at end of file