Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Sicherstellen, dass ein ROM-Dateiname als Argument übergeben wurde
- if [ "$#" -ne 1 ]; then
- echo "Usage: $0 <rom-file>"
- exit 1
- fi
- # Variablen
- ROM="$1"
- BASENAME=$(basename $ROM .z64)
- BUILD_DIR="build"
- ASM_DIR="$BUILD_DIR/asm"
- SRC_DIR="$BUILD_DIR/src"
- BIN_DIR="$BUILD_DIR/assets"
- TOOLS_DIR="tools"
- LD_SCRIPT="${BUILD_DIR}/${BASENAME}.ld"
- CONFIG_YAML="${BUILD_DIR}/${BASENAME}.yaml"
- CONFIG_Z64="${BUILD_DIR}/${BASENAME}.z64"
- SPLAT_DIR="${TOOLS_DIR}/splat"
- # Tool-Definitionen
- CROSS="mips-linux-gnu-"
- AS="${CROSS}as"
- LD="${CROSS}ld"
- CC="${TOOLS_DIR}/ido_recomp/linux/7.1/cc"
- OBJCOPY="${CROSS}objcopy"
- PYTHON="python3"
- # Flags
- ASFLAGS="-EB -mtune=vr4300 -march=vr4300 -mabi=32 -I include"
- CFLAGS="-G0 -Xfullwarn -Xcpluscomm -signed -nostdinc -non_shared -Wab,-r4300_mul -D_LANGUAGE_C -D_FINALROM -DF3DEX_GBI -DWIN32 -I include -I libreultra/include/2.0I"
- LDFLAGS="-T ${LD_SCRIPT} -Map ${BUILD_DIR}/${BASENAME}.map -T ${BUILD_DIR}/undefined_syms_auto.txt -T ${BUILD_DIR}/undefined_funcs_auto.txt -T undefined_funcs.txt --no-check-sections"
- # Bereinige die Build-Verzeichnisse
- echo "Cleaning build directories..."
- rm -rf "${ASM_DIR}" "${SRC_DIR}" "${BIN_DIR}"
- # Erstellen der Verzeichnisstruktur
- echo "Creating directories..."
- mkdir -p "${ASM_DIR}" "${SRC_DIR}" "${BIN_DIR}"
- # Erzeuge eine YAML-Konfigurationsdatei für Splat
- echo "Generating YAML config for the ROM..."
- $PYTHON $SPLAT_DIR/create_config.py $ROM
- # Verschiebe die erzeugte YAML-Datei in das Build-Verzeichnis
- mv "${BASENAME}.yaml" "${CONFIG_YAML}"
- # Verschiebe die erzeugte YAML-Datei in das Build-Verzeichnis
- cp "${BASENAME}.z64" "${CONFIG_Z64}"
- # Disassembliert die ROM mit der erstellten YAML-Datei
- echo "Disassembling the ROM..."
- $PYTHON $SPLAT_DIR/split.py $CONFIG_YAML --target $ROM --basedir $BUILD_DIR
- # Konvertieren der .bin Dateien
- echo "Converting .bin to .bin.o files..."
- for file in $(find ${BIN_DIR} -name '*.bin'); do
- ${LD} -r -b binary -o "${file}.o" "$file"
- done
- # Kompilieren der Assembler-Dateien
- echo "Compiling assembly files..."
- for file in $(find ${ASM_DIR} -name '*.s'); do
- ${AS} ${ASFLAGS} -o "${file}.o" "$file"
- done
- # Kompilieren der C-Dateien
- echo "Compiling C files..."
- for file in $(find ${SRC_DIR} -name '*.c'); do
- ${CC} -c ${CFLAGS} -o "${file}.o" "$file"
- done
- # Linken der Objektdateien zu einer ELF-Datei
- echo "Linking object files to create ELF..."
- if ! ${LD} ${LDFLAGS} -o "${BUILD_DIR}/${BASENAME}.elf" $(find ${BUILD_DIR} -name '*.o') 2>&1; then
- echo "Handling undefined references..."
- # Extrahiere undefined references und erstelle eine undefined_funcs.txt
- ${LD} ${LDFLAGS} -o "/dev/null" $(find ${BUILD_DIR} -name '*.o') 2>&1 | grep "undefined reference to" | sed -e "s/.*undefined reference to \`func_\\([0-9a-fA-F]*\)'/func_\\1 = 0x\\1;/" > "undefined_funcs.txt"
- # Versuche erneut zu linken
- ${LD} ${LDFLAGS} -o "${BUILD_DIR}/${BASENAME}.elf" $(find ${BUILD_DIR} -name '*.o')
- fi
- # Konvertieren der ELF-Datei in eine Binärdatei
- echo "Converting ELF to binary..."
- ${OBJCOPY} -O binary "${BUILD_DIR}/${BASENAME}.elf" "${BUILD_DIR}/${BASENAME}.bin"
- echo "ELF file created at ${BUILD_DIR}/${BASENAME}.elf"
- echo "Binary file created at ${BUILD_DIR}/${BASENAME}.bin"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement