Improvements to a few scripts & renamed a couple files.

This commit is contained in:
David Benepe
2021-06-13 14:48:10 -05:00
parent eaafb65603
commit 63b9300dd8
163 changed files with 728 additions and 505 deletions
+1012
View File
File diff suppressed because it is too large Load Diff
+52
View File
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
def add_custom_arguments(parser):
group = parser.add_mutually_exclusive_group(required=False)
# group.add_argument('-j', dest='version', action='store_const', const='jp',
# help="Set version to JP.")
# group.add_argument('-u', dest='version', action='store_const', const='us',
# help="Set version to US.")
# group.add_argument('-e', dest='version', action='store_const', const='eu',
# help="Set version to EU.")
# group.add_argument('-s', dest='version', action='store_const', const='sh',
# help="Set version to SH.")
def apply(config, args):
version = 'us_1.0' # Right now only us_1.0 is supported
config['mapfile'] = f'build/' + version + '/dkr.map'
config['myimg'] = f'build/' + version + '/dkr.z64'
config['baseimg'] = find_baserom(version)
config['makeflags'] = [f'']
config['source_directories'] = ['src']
########################################################################################
from os import listdir
from os.path import isfile, join
CRCS = {
'us_1.0': (0x53D440E7, 0x7519B011)
}
def get_filenames_from_directory(directory, extensions=None):
if extensions is None:
return [f for f in listdir(directory) if isfile(join(directory, f))]
else:
return [f for f in listdir(directory) if isfile(join(directory, f)) and f.endswith(extensions)]
def get_rom_crcs(romPath):
with open(romPath, 'rb') as inFile:
rom = inFile.read()
crc1 = int.from_bytes(rom[0x10:0x14], "big")
crc2 = int.from_bytes(rom[0x14:0x18], "big")
return (crc1, crc2)
def find_baserom(version):
romFiles = get_filenames_from_directory('baseroms/', ('.z64',))
for romFilename in romFiles:
romFilepath = 'baseroms/' + romFilename
if get_rom_crcs(romFilepath) == CRCS[version]:
return romFilepath
raise Exception('Could not find a rom file for the version: "' + version + '"')
########################################################################################
+19 -2
View File
@@ -1,4 +1,4 @@
from os import chdir, listdir, remove
from os import chdir, listdir, remove, rename
from os.path import dirname, isfile, isdir, join, realpath, exists
class FileUtil:
@@ -43,6 +43,19 @@ class FileUtil:
else:
filenames += FileUtil.get_filenames_from_directory_recursive(join(directory, f), extensions, subDirectory + '/' + f)
return filenames
@staticmethod
def get_directories_from_directory_recursive(directory, extensions=None, subDirectory=''):
filenames = []
for f in listdir(directory):
path = join(directory, f)
if isdir(path):
filenames.append(((subDirectory + '/') if subDirectory != '' else '') + f)
if subDirectory == '':
filenames += FileUtil.get_directories_from_directory_recursive(path, extensions, f)
else:
filenames += FileUtil.get_directories_from_directory_recursive(path, extensions, subDirectory + '/' + f)
return filenames
@staticmethod
def get_text_from_file(filename):
@@ -63,7 +76,11 @@ class FileUtil:
def write_bytes_to_file(filename, binary):
with open(filename, 'wb') as outFile:
outFile.write(binary)
@staticmethod
def rename_file(old_filename, new_filename):
rename(old_filename, new_filename)
@staticmethod
def delete_file(filename):
remove(filename)
+37
View File
@@ -0,0 +1,37 @@
import sys
from file_util import FileUtil
ASM_DIR = './asm'
LIB_ASM_DIR = './lib/asm'
SRC_DIR = './src'
LIB_SRC_DIR = './lib/src'
if len(sys.argv) < 2:
print('Usage: rename_file.py old_symbol new_symbol')
oldSymbol = sys.argv[1]
newSymbol = sys.argv[2]
def find_and_rename(directory, paths):
for name in paths:
path = directory + '/' + name
if oldSymbol in path:
newPath = path.replace(oldSymbol, newSymbol)
print('Renamed "' + path + '" to "' + newPath + '"')
try:
FileUtil.rename_file(path, newPath)
except FileNotFoundError:
pass
asmDirectories = FileUtil.get_directories_from_directory_recursive(ASM_DIR)
asmFiles = FileUtil.get_filenames_from_directory_recursive(ASM_DIR)
libAsmDirectories = FileUtil.get_directories_from_directory_recursive(LIB_ASM_DIR)
libAsmFiles = FileUtil.get_filenames_from_directory_recursive(ASM_DIR)
srcFiles = FileUtil.get_filenames_from_directory_recursive(SRC_DIR)
libSrcFiles = FileUtil.get_filenames_from_directory_recursive(LIB_SRC_DIR)
find_and_rename(ASM_DIR, asmDirectories + asmFiles)
find_and_rename(LIB_ASM_DIR, libAsmDirectories + libAsmFiles)
find_and_rename(SRC_DIR, srcFiles)
find_and_rename(LIB_SRC_DIR, libSrcFiles)
+5 -5
View File
@@ -1,6 +1,7 @@
import re
import sys
import argparse
import time
from file_util import FileUtil
from score_display import ScoreDisplay
@@ -29,9 +30,9 @@ for folder in ASM_FOLDERS:
BUILD_DIRECTORY = './build/us_1.0'
SRC_DIRECTORY = './src'
LIB_SRC_DIRECTORY = './lib/src'
FUNCTION_REGEX = r'((?:[\/][*][*]+[\n])(?:[^\n]*\n)*?(?:.*[*][\/]))?(void|s64|s32|s16|s8|u64|u32|u16|u8|f32|f64)(?:\s|[*])*([0-9A-Za-z_]+)\s*[(][^)]*[)]\s*{'
FUNCTION_REGEX = r'(\/[*][*!]+\n(?:.*\n)+?\s*[*]\/\n)?(void|s64|s32|s16|s8|u64|u32|u16|u8|f32|f64)(?:\s|[*])*?([0-9A-Za-z_]+)\s*[(][^)]*[)]\s*{'
GLOBAL_ASM_REGEX = r'GLOBAL_ASM[(]".*(?=\/)\/([^.]+).s"[)]'
WIP_REGEX = r'#if(.|\n)*?(GLOBAL_ASM[(]([^)]*)[)])(.|\n)*?#else(.|\n)*?#endif'
WIP_REGEX = r'#if(?:.|\n)*?(GLOBAL_ASM[(][^)]*[)])(.|\n)*?#endif'
CODE_START = 0x80000400
CODE_END = 0x800D75F4
@@ -83,14 +84,13 @@ class ScoreFile:
def read_file(self):
with open(self.path, "r") as inFile:
self.text = inFile.read()
self.text = re.sub(WIP_REGEX, r"GLOBAL_ASM(\3)", self.text)
self.text = re.sub(WIP_REGEX, r"GLOBAL_ASM(\1)", self.text)
def get_matches(self):
matches = re.finditer(FUNCTION_REGEX, self.text, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
groups = match.groups()
self.functions.append(ScoreFileMatch(groups[0], groups[2]))
matches = re.finditer(GLOBAL_ASM_REGEX, self.text, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
groups = match.groups()
@@ -160,7 +160,7 @@ def main():
scoreFiles.append(scoreFile)
totalNumberOfFunctions = MAP_FILE.numFunctions
totalNumberOfFunctions = totalNumberOfDecompiledFunctions + totalNumberOfGlobalAsms
for asm_function in ASM_LABELS:
if asm_function in MAP_FILE.functionSizes:
totalSizeOfDecompiledFunctions += MAP_FILE.functionSizes[asm_function]