mirror of https://github.com/zeldaret/botw.git
tools: Update common
This commit is contained in:
parent
6b88a1cebe
commit
6f09be56cc
|
@ -1 +1 @@
|
||||||
Subproject commit ce7f20a2f44f5c8abf75c107fdbec1ea0d9aead4
|
Subproject commit 87c60a17865e0af99c8ea06609b7a24d330d8a06
|
|
@ -10,6 +10,10 @@ from typing import Optional
|
||||||
from common import setup_common as setup
|
from common import setup_common as setup
|
||||||
|
|
||||||
|
|
||||||
|
TARGET_PATH = setup.get_target_path()
|
||||||
|
TARGET_ELF_PATH = setup.get_target_elf_path()
|
||||||
|
|
||||||
|
|
||||||
def _download_v160_to_v150_patch(dest: Path):
|
def _download_v160_to_v150_patch(dest: Path):
|
||||||
print(">>>> downloading patch...")
|
print(">>>> downloading patch...")
|
||||||
urllib.request.urlretrieve("https://s.botw.link/v150_downgrade/v160_to_v150.patch", dest)
|
urllib.request.urlretrieve("https://s.botw.link/v150_downgrade/v160_to_v150.patch", dest)
|
||||||
|
@ -24,7 +28,7 @@ def prepare_executable(original_nso: Optional[Path]):
|
||||||
# The uncompressed v1.5.0 main NSO.
|
# The uncompressed v1.5.0 main NSO.
|
||||||
TARGET_HASH = UNCOMPRESSED_V150_HASH
|
TARGET_HASH = UNCOMPRESSED_V150_HASH
|
||||||
|
|
||||||
if setup.TARGET_PATH.is_file() and hashlib.sha256(setup.TARGET_PATH.read_bytes()).hexdigest() == TARGET_HASH and setup.TARGET_ELF_PATH.is_file():
|
if TARGET_PATH.is_file() and hashlib.sha256(TARGET_PATH.read_bytes()).hexdigest() == TARGET_HASH and TARGET_ELF_PATH.is_file():
|
||||||
print(">>> NSO is already set up")
|
print(">>> NSO is already set up")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -39,11 +43,11 @@ def prepare_executable(original_nso: Optional[Path]):
|
||||||
|
|
||||||
if nso_hash == UNCOMPRESSED_V150_HASH:
|
if nso_hash == UNCOMPRESSED_V150_HASH:
|
||||||
print(">>> found uncompressed 1.5.0 NSO")
|
print(">>> found uncompressed 1.5.0 NSO")
|
||||||
setup.TARGET_PATH.write_bytes(nso_data)
|
TARGET_PATH.write_bytes(nso_data)
|
||||||
|
|
||||||
elif nso_hash == COMPRESSED_V150_HASH:
|
elif nso_hash == COMPRESSED_V150_HASH:
|
||||||
print(">>> found compressed 1.5.0 NSO")
|
print(">>> found compressed 1.5.0 NSO")
|
||||||
setup._decompress_nso(original_nso, setup.TARGET_PATH)
|
setup._decompress_nso(original_nso, TARGET_PATH)
|
||||||
|
|
||||||
elif nso_hash == UNCOMPRESSED_V160_HASH:
|
elif nso_hash == UNCOMPRESSED_V160_HASH:
|
||||||
print(">>> found uncompressed 1.6.0 NSO")
|
print(">>> found uncompressed 1.6.0 NSO")
|
||||||
|
@ -51,7 +55,7 @@ def prepare_executable(original_nso: Optional[Path]):
|
||||||
with tempfile.TemporaryDirectory() as tmpdir:
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
patch_path = Path(tmpdir) / "patch"
|
patch_path = Path(tmpdir) / "patch"
|
||||||
_download_v160_to_v150_patch(patch_path)
|
_download_v160_to_v150_patch(patch_path)
|
||||||
setup._apply_xdelta3_patch(original_nso, patch_path, setup.TARGET_PATH)
|
setup._apply_xdelta3_patch(original_nso, patch_path, TARGET_PATH)
|
||||||
|
|
||||||
elif nso_hash == COMPRESSED_V160_HASH:
|
elif nso_hash == COMPRESSED_V160_HASH:
|
||||||
print(">>> found compressed 1.6.0 NSO")
|
print(">>> found compressed 1.6.0 NSO")
|
||||||
|
@ -62,19 +66,19 @@ def prepare_executable(original_nso: Optional[Path]):
|
||||||
|
|
||||||
setup._decompress_nso(original_nso, decompressed_nso_path)
|
setup._decompress_nso(original_nso, decompressed_nso_path)
|
||||||
_download_v160_to_v150_patch(patch_path)
|
_download_v160_to_v150_patch(patch_path)
|
||||||
setup._apply_xdelta3_patch(decompressed_nso_path, patch_path, setup.TARGET_PATH)
|
setup._apply_xdelta3_patch(decompressed_nso_path, patch_path, TARGET_PATH)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
setup.fail(f"unknown executable: {nso_hash}")
|
setup.fail(f"unknown executable: {nso_hash}")
|
||||||
|
|
||||||
if not setup.TARGET_PATH.is_file():
|
if not TARGET_PATH.is_file():
|
||||||
setup.fail("internal error while preparing executable (missing NSO); please report")
|
setup.fail("internal error while preparing executable (missing NSO); please report")
|
||||||
if hashlib.sha256(setup.TARGET_PATH.read_bytes()).hexdigest() != TARGET_HASH:
|
if hashlib.sha256(TARGET_PATH.read_bytes()).hexdigest() != TARGET_HASH:
|
||||||
setup.fail("internal error while preparing executable (wrong NSO hash); please report")
|
setup.fail("internal error while preparing executable (wrong NSO hash); please report")
|
||||||
|
|
||||||
setup._convert_nso_to_elf(setup.TARGET_PATH)
|
setup._convert_nso_to_elf(TARGET_PATH)
|
||||||
|
|
||||||
if not setup.TARGET_ELF_PATH.is_file():
|
if not TARGET_ELF_PATH.is_file():
|
||||||
setup.fail("internal error while preparing executable (missing ELF); please report")
|
setup.fail("internal error while preparing executable (missing ELF); please report")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue