Advertisement
Guest User

MakeElf-Cellenseres

a guest
May 22nd, 2024
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Sicherstellen, dass ein ROM-Dateiname als Argument übergeben wurde
  4. if [ "$#" -ne 1 ]; then
  5. echo "Usage: $0 <rom-file>"
  6. exit 1
  7. fi
  8.  
  9. # Variablen
  10. ROM="$1"
  11. BASENAME=$(basename $ROM .z64)
  12. BUILD_DIR="build"
  13. ASM_DIR="$BUILD_DIR/asm"
  14. SRC_DIR="$BUILD_DIR/src"
  15. BIN_DIR="$BUILD_DIR/assets"
  16. TOOLS_DIR="tools"
  17. LD_SCRIPT="${BUILD_DIR}/${BASENAME}.ld"
  18. CONFIG_YAML="${BUILD_DIR}/${BASENAME}.yaml"
  19. CONFIG_Z64="${BUILD_DIR}/${BASENAME}.z64"
  20. SPLAT_DIR="${TOOLS_DIR}/splat"
  21.  
  22. # Tool-Definitionen
  23. CROSS="mips-linux-gnu-"
  24. AS="${CROSS}as"
  25. LD="${CROSS}ld"
  26. CC="${TOOLS_DIR}/ido_recomp/linux/7.1/cc"
  27. OBJCOPY="${CROSS}objcopy"
  28. PYTHON="python3"
  29.  
  30. # Flags
  31. ASFLAGS="-EB -mtune=vr4300 -march=vr4300 -mabi=32 -I include"
  32. 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"
  33. 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"
  34.  
  35. # Bereinige die Build-Verzeichnisse
  36. echo "Cleaning build directories..."
  37. rm -rf "${ASM_DIR}" "${SRC_DIR}" "${BIN_DIR}"
  38.  
  39. # Erstellen der Verzeichnisstruktur
  40. echo "Creating directories..."
  41. mkdir -p "${ASM_DIR}" "${SRC_DIR}" "${BIN_DIR}"
  42.  
  43. # Erzeuge eine YAML-Konfigurationsdatei für Splat
  44. echo "Generating YAML config for the ROM..."
  45. $PYTHON $SPLAT_DIR/create_config.py $ROM
  46. # Verschiebe die erzeugte YAML-Datei in das Build-Verzeichnis
  47. mv "${BASENAME}.yaml" "${CONFIG_YAML}"
  48.  
  49. # Verschiebe die erzeugte YAML-Datei in das Build-Verzeichnis
  50. cp "${BASENAME}.z64" "${CONFIG_Z64}"
  51.  
  52. # Disassembliert die ROM mit der erstellten YAML-Datei
  53. echo "Disassembling the ROM..."
  54. $PYTHON $SPLAT_DIR/split.py $CONFIG_YAML --target $ROM --basedir $BUILD_DIR
  55.  
  56. # Konvertieren der .bin Dateien
  57. echo "Converting .bin to .bin.o files..."
  58. for file in $(find ${BIN_DIR} -name '*.bin'); do
  59. ${LD} -r -b binary -o "${file}.o" "$file"
  60. done
  61.  
  62. # Kompilieren der Assembler-Dateien
  63. echo "Compiling assembly files..."
  64. for file in $(find ${ASM_DIR} -name '*.s'); do
  65. ${AS} ${ASFLAGS} -o "${file}.o" "$file"
  66. done
  67.  
  68. # Kompilieren der C-Dateien
  69. echo "Compiling C files..."
  70. for file in $(find ${SRC_DIR} -name '*.c'); do
  71. ${CC} -c ${CFLAGS} -o "${file}.o" "$file"
  72. done
  73.  
  74. # Linken der Objektdateien zu einer ELF-Datei
  75. echo "Linking object files to create ELF..."
  76. if ! ${LD} ${LDFLAGS} -o "${BUILD_DIR}/${BASENAME}.elf" $(find ${BUILD_DIR} -name '*.o') 2>&1; then
  77. echo "Handling undefined references..."
  78. # Extrahiere undefined references und erstelle eine undefined_funcs.txt
  79. ${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"
  80. # Versuche erneut zu linken
  81. ${LD} ${LDFLAGS} -o "${BUILD_DIR}/${BASENAME}.elf" $(find ${BUILD_DIR} -name '*.o')
  82. fi
  83.  
  84. # Konvertieren der ELF-Datei in eine Binärdatei
  85. echo "Converting ELF to binary..."
  86. ${OBJCOPY} -O binary "${BUILD_DIR}/${BASENAME}.elf" "${BUILD_DIR}/${BASENAME}.bin"
  87.  
  88. echo "ELF file created at ${BUILD_DIR}/${BASENAME}.elf"
  89. echo "Binary file created at ${BUILD_DIR}/${BASENAME}.bin"
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement