mirror of
https://github.com/zeldaret/oot3d.git
synced 2026-10-08 09:42:47 -04:00
Merge pull request #1 from gamestabled/setup_fixes
fix a few pain points in setup
This commit is contained in:
+12
-6
@@ -6,12 +6,18 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
if(NOT DEFINED ENV{ARMCC_PATH})
|
||||
message(FATAL_ERROR "please set ARMCC_PATH")
|
||||
endif()
|
||||
if(NOT DEFINED ENV{RVCT40INC})
|
||||
message(FATAL_ERROR "please set RVCT40INC. Probably to ARMCC_PATH/include/windows")
|
||||
endif()
|
||||
if(NOT DEFINED ENV{RVCT40LIB})
|
||||
message(FATAL_ERROR "please set RVCT40LIB. Probably to ARMCC_PATH/include/lib")
|
||||
endif()
|
||||
|
||||
find_program(ARM_ASM NAMES armasm.exe PATHS $ENV{ARMCC_PATH}/bin REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_AR NAMES armar.exe PATHS $ENV{ARMCC_PATH}/bin REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_CC NAMES armcc.exe PATHS $ENV{ARMCC_PATH}/bin REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_LINK NAMES armlink.exe PATHS $ENV{ARMCC_PATH}/bin REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_FROMELF NAMES fromelf.exe PATHS $ENV{ARMCC_PATH}/bin REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_ASM NAMES armasm.exe PATHS "$ENV{ARMCC_PATH}/win_32-pentium" REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_AR NAMES armar.exe PATHS "$ENV{ARMCC_PATH}/win_32-pentium" REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_CC NAMES armcc.exe PATHS "$ENV{ARMCC_PATH}/win_32-pentium" REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_LINK NAMES armlink.exe PATHS "$ENV{ARMCC_PATH}/win_32-pentium" REQUIRED NO_DEFAULT_PATH)
|
||||
find_program(ARM_FROMELF NAMES fromelf.exe PATHS "$ENV{ARMCC_PATH}/win_32-pentium" REQUIRED NO_DEFAULT_PATH)
|
||||
|
||||
macro (set_compilers)
|
||||
set(CMAKE_CXX_COMPILER_ID ARMCC)
|
||||
@@ -93,7 +99,7 @@ foreach(CPP_FILE ${cxxsourcefiles})
|
||||
get_filename_component(FILE_NAME ${CPP_FILE} NAME_WE)
|
||||
add_custom_command(
|
||||
OUTPUT ${NON_MATCH_ASM_FILES}/${FILE_NAME}.s
|
||||
COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/tools/preproc.py ${CPP_FILE} ${NON_MATCH_ASM_FILES}/${FILE_NAME}.s "${DISASSEMBLY_DIR}/"
|
||||
COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/tools/preproc.py ${CPP_FILE} ${NON_MATCH_ASM_FILES}/${FILE_NAME}.s "${DISASSEMBLY_DIR}/"
|
||||
DEPENDS ${CPP_FILE}
|
||||
)
|
||||
set_source_files_properties(${NON_MATCH_ASM_FILES}/${FILE_NAME}.s PROPERTIES COMPILE_FLAGS "--cpu=MPCore")
|
||||
|
||||
@@ -35,7 +35,7 @@ add_custom_target(
|
||||
|
||||
add_custom_command(
|
||||
DEPENDS extract_baserom
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && py ${TOOLS_DIR}/exefs2elf.py
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && python ${TOOLS_DIR}/exefs2elf.py
|
||||
OUTPUT ${BASEROM_DIR}/baserom.elf
|
||||
COMMENT "Creating baserom.elf..."
|
||||
)
|
||||
@@ -59,7 +59,7 @@ add_custom_target(
|
||||
|
||||
add_custom_command(
|
||||
DEPENDS n3dsdisasm ${BASEROM_DIR}/baserom_before_fixes.s
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && py ./tools/baserom_fixes.py ${BASEROM_DIR}/baserom_before_fixes.s ${BASEROM_DIR}/baserom.s
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && python ./tools/baserom_fixes.py ${BASEROM_DIR}/baserom_before_fixes.s ${BASEROM_DIR}/baserom.s
|
||||
OUTPUT ${BASEROM_DIR}/baserom.s
|
||||
COMMENT "Applying specific fixes to baserom_before_fixes.s to create baserom.s..."
|
||||
)
|
||||
@@ -70,9 +70,9 @@ add_custom_target(
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
DEPENDS n3dsdisasm_post_fixes create_elf
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && py ./tools/gcc_to_arm_asm.py ${BASEROM_DIR}/baserom.s asm
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && py ./tools/split_arm_data_chunks.py
|
||||
DEPENDS n3dsdisasm_post_fixes
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && python ./tools/gcc_to_arm_asm.py ${BASEROM_DIR}/baserom.s asm
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && python ./tools/split_arm_data_chunks.py
|
||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && touch split_asm.txt
|
||||
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/split_asm.txt
|
||||
COMMENT "Splitting baserom.s and data chunks..."
|
||||
|
||||
Binary file not shown.
@@ -1,56 +1,28 @@
|
||||
# convert exefs to elf
|
||||
import os
|
||||
import sys
|
||||
from subprocess import run
|
||||
|
||||
# Ugliness in order to keep the script self-contained
|
||||
try:
|
||||
import tqdm
|
||||
except ImportError:
|
||||
print("Installing tqdm...")
|
||||
def command():
|
||||
return run([sys.executable, '-m', 'pip', 'install', 'tqdm'])
|
||||
|
||||
# Sigh
|
||||
if (command().returncode != 0):
|
||||
# Package managers are cool, I say, as I close my eyes and
|
||||
# ram through software with reckless abandon.
|
||||
if (run([sys.executable, '-m', 'ensurepip']).returncode == 0):
|
||||
# Alright pip is set up, lets give it another shot. If it
|
||||
# doesn't work, then it's left up to the user.
|
||||
command().check_returncode()
|
||||
finally:
|
||||
import tqdm
|
||||
|
||||
BASEROMDIR = 'baserom/'
|
||||
WORKDIR = BASEROMDIR + 'workdir/'
|
||||
CODE_BIN = 'baserom/exefs/code.bin'
|
||||
DATADIR = 'data/'
|
||||
|
||||
DATA_CHUNK_FILE = 'data_chunks.txt'
|
||||
RODATA_CHUNK_FILE = 'rodata_chunks.txt'
|
||||
SHT__INIT_ARRAY_FILE = 'SHT__INIT_ARRAY.txt'
|
||||
|
||||
|
||||
def prepare_dirs():
|
||||
os.makedirs(DATADIR, exist_ok=True)
|
||||
|
||||
def writefile(path, s) -> None:
|
||||
with open(path, "wb") as f:
|
||||
f.write(s)
|
||||
|
||||
def total_file_sizes() -> int:
|
||||
return os.path.getsize(DATA_CHUNK_FILE) + \
|
||||
os.path.getsize(RODATA_CHUNK_FILE) + \
|
||||
os.path.getsize(SHT__INIT_ARRAY_FILE)
|
||||
|
||||
def split_data_chunks_to_asm(progress: tqdm.tqdm) -> None:
|
||||
for (bin_file, chunks_file, offset) in [('rw.bin', DATA_CHUNK_FILE, 0x4F9000), ('ro.bin', RODATA_CHUNK_FILE, 0x4CA000), ('text.bin', SHT__INIT_ARRAY_FILE, 0x100000)]:
|
||||
with open(WORKDIR + bin_file, 'rb') as b:
|
||||
def split_data_chunks_to_asm() -> None:
|
||||
with open(CODE_BIN, 'rb') as b:
|
||||
for chunks_file in [DATA_CHUNK_FILE, RODATA_CHUNK_FILE, SHT__INIT_ARRAY_FILE]:
|
||||
with open(chunks_file) as data:
|
||||
for line in data:
|
||||
splitLine = line.split(',')
|
||||
chunkName = splitLine[0]
|
||||
chunkStart = int(splitLine[1].strip(), 16) - offset
|
||||
chunkEnd = int(splitLine[2].strip(), 16) - offset
|
||||
chunkStart = int(splitLine[1].strip(), 16) - 0x100000
|
||||
chunkEnd = int(splitLine[2].strip(), 16) - 0x100000
|
||||
chunkSize = chunkEnd - chunkStart
|
||||
b.seek(chunkStart)
|
||||
chunkBin = b.read(chunkSize)
|
||||
@@ -64,8 +36,6 @@ def split_data_chunks_to_asm(progress: tqdm.tqdm) -> None:
|
||||
chunkARM.write(f"\tDCD 0x{dataWordString}\n")
|
||||
chunkARM.write("\tEND\n")
|
||||
|
||||
progress.update(len(line))
|
||||
|
||||
with tqdm.tqdm(total=total_file_sizes()) as progress:
|
||||
prepare_dirs()
|
||||
split_data_chunks_to_asm(progress)
|
||||
prepare_dirs()
|
||||
split_data_chunks_to_asm()
|
||||
|
||||
Reference in New Issue
Block a user