# User configurable REGION=ntsc RELEASE=final ################################################################################ # Not user configurable ROMID := $(REGION)-$(RELEASE) E_DIR := extracted/$(ROMID) B_DIR := build/$(ROMID) QEMU_IRIX := tools/irix/qemu-irix IRIX_ROOT := tools/irix/root ifeq ($(shell type mips-linux-gnu-ld >/dev/null 2>/dev/null; echo $$?), 0) TOOLCHAIN := mips-linux-gnu else TOOLCHAIN := mips64-elf endif ifeq ($(REGION),ntsc) VERSION_CFLAGS := -DNTSC=1 -DPAL=0 -DJAP=0 endif ifeq ($(REGION),pal) VERSION_CFLAGS := -DNTSC=0 -DPAL=1 -DJAP=0 endif ifeq ($(REGION),jap) VERSION_CFLAGS := -DNTSC=0 -DPAL=0 -DJAP=1 endif ifeq ($(RELEASE),beta) RELEASE_CFLAGS := -DBETA=1 -DREL1_0 -DFINAL=0 endif ifeq ($(RELEASE),1.0) RELEASE_CFLAGS := -DBETA=0 -DREL1_1 -DFINAL=0 endif ifeq ($(RELEASE),final) RELEASE_CFLAGS := -DBETA=0 -DREL1_0 -DFINAL=1 endif CFLAGS := $(VERSION_CFLAGS) $(RELEASE_CFLAGS) -Wo,-loopunroll,0 -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -woff 819,820,852,821 -signed -I src/include -mips2 C_FILES := $(shell find src -name '*.c') O_FILES := $(patsubst %.c, %.o, $(C_FILES)) default: all ################################################################################ # Extract related extract: tools/extract $(ROMID) ################################################################################ # Stage setup files SETUP_C_FILES := $(wildcard src/files/setup/*.c) SETUP_BIN_FILES := $(patsubst src/files/setup/%.c, $(B_DIR)/files/setup/U%.bin, $(SETUP_C_FILES)) SETUP_BINZ_FILES := $(patsubst src/files/setup/%.c, $(B_DIR)/files/U%Z, $(SETUP_C_FILES)) $(B_DIR)/files/setup/%.elf: src/files/setup/%.o mkdir -p $(B_DIR)/files/setup cp $< build/zero.tmp.o $(TOOLCHAIN)-ld -T ld/zero.ld -o $@ rm -f build/zero.tmp.o $(B_DIR)/files/setup/U%.bin: $(B_DIR)/files/setup/%.elf $(TOOLCHAIN)-objcopy $< $@ -O binary $(B_DIR)/files/U%Z: $(B_DIR)/files/setup/U%.bin tools/rarezip $< > $@ stagesetup: $(SETUP_BIN_FILES) ################################################################################ # Lang files LANG_C_FILES := $(wildcard src/files/lang/*.c) LANG_BIN_FILES := $(patsubst src/files/lang/%.c, $(B_DIR)/files/lang/L%.bin, $(LANG_C_FILES)) LANG_BINZ_FILES := $(patsubst src/files/lang/%.c, $(B_DIR)/files/L%, $(LANG_C_FILES)) $(B_DIR)/files/lang/%.elf: src/files/lang/%.o mkdir -p $(B_DIR)/files/lang cp $< build/zero.tmp.o $(TOOLCHAIN)-ld -T ld/zero.ld -o $@ rm -f build/zero.tmp.o $(B_DIR)/files/lang/L%.bin: $(B_DIR)/files/lang/%.elf $(TOOLCHAIN)-objcopy $< $@ -O binary $(B_DIR)/files/L%E: $(B_DIR)/files/lang/L%E.bin tools/rarezip $< > $@ $(B_DIR)/files/L%J: $(B_DIR)/files/lang/L%J.bin tools/rarezip $< > $@ $(B_DIR)/files/L%P: $(B_DIR)/files/lang/L%P.bin tools/rarezip $< > $@ $(B_DIR)/files/L%Z: $(B_DIR)/files/lang/L%.bin tools/rarezip $< > $@ lang: $(LANG_BIN_FILES) ################################################################################ # Boot $(B_DIR)/boot.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/boot.ld -o $@ $(B_DIR)/ucode/boot.bin: $(B_DIR)/boot.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $< /tmp/boot.tmp -O binary dd if=/tmp/boot.tmp of="$@" bs=8272 count=1 rm -f /tmp/boot.tmp boot: $(B_DIR)/ucode/boot.bin ################################################################################ # Library $(B_DIR)/library.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/library.ld -o $@ $(B_DIR)/ucode/library.bin: $(B_DIR)/library.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $< /tmp/library.tmp -O binary dd if=/tmp/library.tmp of="$@" bs=356240 count=1 rm -f /tmp/library.tmp library: $(B_DIR)/ucode/library.bin ################################################################################ # Game setup file $(B_DIR)/setup.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/setup.ld -o $@ $(B_DIR)/ucode/setup.bin: $(B_DIR)/setup.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $< /tmp/setup.tmp -O binary dd if=/tmp/setup.tmp of="$@" bs=200256 count=1 rm -f /tmp/setup.tmp setup: $(B_DIR)/ucode/setup.bin ################################################################################ # Rarezip $(B_DIR)/rarezip.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/rarezip.ld -o $@ $(B_DIR)/ucode/rarezip.bin: $(B_DIR)/rarezip.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $< $@ -O binary rarezip: $(B_DIR)/ucode/rarezip.bin ################################################################################ # Main game $(B_DIR)/game.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/game.ld -o $@ $(B_DIR)/gamerodata.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/gamerodata.ld -o $@ $(B_DIR)/ucode/game.bin: $(B_DIR)/game.elf $(B_DIR)/gamerodata.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $(B_DIR)/game.elf /tmp/game.tmp -O binary $(TOOLCHAIN)-objcopy $(B_DIR)/gamerodata.elf /tmp/gamerodata.tmp -O binary dd if=/tmp/game.tmp of="$@" bs=1734848 count=1 dd if=/tmp/gamerodata.tmp of="$@" bs=74016 count=1 conv=notrunc oflag=append rm -f /tmp/game.tmp /tmp/gamerodata.tmp game: $(B_DIR)/ucode/game.bin ################################################################################ # gVars $(B_DIR)/gvars.elf: $(O_FILES) mkdir -p $(B_DIR) $(TOOLCHAIN)-ld -T ld/gvars.ld -o $@ $(B_DIR)/ucode/gvars.bin: $(B_DIR)/gvars.elf mkdir -p $(B_DIR)/ucode $(TOOLCHAIN)-objcopy $< $@ -O binary gvars: $(B_DIR)/ucode/gvars.bin ################################################################################ # Test related test: all @rm -f $(B_DIR)/*.elf @diff -q $(E_DIR)/files/lang/ $(B_DIR)/files/lang/ @diff -q $(E_DIR)/files/setup/ $(B_DIR)/files/setup/ @diff -rq --exclude=gvars.bin --exclude=rspboot.bin $(E_DIR)/ucode/ $(B_DIR)/ucode/ ################################################################################ # Miscellaneous %.o: %.c python tools/asmpreproc/asm-processor.py -O2 $< | $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ -O2 python tools/asmpreproc/asm-processor.py -O2 $< --post-process $@ --assembler "$(TOOLCHAIN)-as -march=vr4300 -mabi=32" --asm-prelude tools/asmpreproc/prelude.s all: stagesetup lang boot library setup rarezip game gvars rom: all tools/inject pd.$(ROMID).z64 clean: rm -rf build/* find src -name '*.o' -delete binclean: rm -f build/ntsc-final/ucode/*.bin find src/{boot,game,gvars,library,rarezip,setup} -name '*.o' -delete