Files
goldeneye_src/Makefile
T
kholdfuzion 7dfe175f34 oops forgot that
Former-commit-id: 51b7d68a6dc95736271f84b0fc77ebf6d47e52cd [formerly 2c85d1c72fdc9bb1fbf167e646bdeb09ef3ab61e] [formerly a13e518d540596eb3f572666e7dc1f0e9fc23735 [formerly 5a1125980db68c93b676d756a1735174827465c8]]
Former-commit-id: 32929e424314258696aadd1fa822cc97697c1f87 [formerly 40f3f2bb14e103445d97e3a8956926eda59e5f73]
Former-commit-id: 6124ae5e2340b83c14e40668868ecacb9f4d1fa3
2019-08-03 18:01:45 +00:00

184 lines
5.7 KiB
Makefile

# Makefile to rebuild Goldeneye 007
### Default target ###
default: all
### Build Options ###
# Version of the game to build
FINAL := YES
VERSION := US
# If COMPARE is 1, check the output sha1sum when building 'all'
COMPARE := 1
include assets/Makefile.obseg
include assets/Makefile.music
TOOLCHAIN := mips-linux-gnu-
QEMU_IRIX := tools/irix/qemu-irix
IRIX_ROOT := tools/irix/root
BUILD_DIR := build
BUILD_SUB_DIRS := \
src src/game src/rarezip libultra assets assets/obseg \
assets/obseg/brief assets/obseg/chr assets/obseg/gun assets/obseg/prop \
assets/obseg/text assets/obseg/bg assets/obseg/setup assets/obseg/stan \
assets/music assets/ramrom assets/images assets/images/split assets/font
# create build directories
$(shell mkdir -p $(BUILD_DIR))
$(foreach subdir,$(BUILD_SUB_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(subdir)))
ifeq ($(FINAL), YES)
OPTIMIZATION := -O2
LCDEFS :=
CFLAGWARNING :=
else
OPTIMIZATION := -g
LCDEFS := -DDEBUG
CFLAGWARNING :=-fullwarn -wlint
endif
ifeq ($(VERSION), EU)
COUNTRYCODE := e
LCDEFS := -DVERSION_EU
else
ifeq ($(VERSION), JP)
COUNTRYCODE := j
LCDEFS := -DVERSION_JP
else
COUNTRYCODE := u
LCDEFS := -DVERSION_US
endif
endif
APPELF := ge007.$(COUNTRYCODE).elf
APPROM := ge007.$(COUNTRYCODE).z64
APPBIN := ge007.$(COUNTRYCODE).bin
HEADERFILES := $(foreach dir,src,$(wildcard $(dir)/*.s))
HEADEROBJECTS := $(foreach file,$(HEADERFILES),$(BUILD_DIR)/$(file:.s=.o))
CODEFILES := $(foreach dir,src,$(wildcard $(dir)/*.c))
CODEOBJECTS := $(foreach file,$(CODEFILES),$(BUILD_DIR)/$(file:.c=.o))
LIBULTRA := lib/libultra_rom.a
ULTRAFILES := libultra/libultra.s
ULTRAOBJECTS := build/libultra/libultra.o
GAMEFILES := $(foreach dir,src/game,$(wildcard $(dir)/*.c))
GAMEOBJECTS := $(foreach file,$(GAMEFILES),$(BUILD_DIR)/$(file:.c=.o))
ROMFILES := assets/romfiles.s
ROMOBJECTS := build/assets/romfiles.o
RAMROM_FILES := assets/ramrom/ramrom.s
RAMROM_OBJECTS := build/assets/ramrom/ramrom.o
FONT_FILES := assets/font/font.s
FONT_OBJECTS := build/assets/font/font.o
MUSIC_FILES := assets/music/music.s
MUSIC_OBJECTS := build/assets/music/music.o
OBSEG_FILES := assets/obseg/ob_seg.s
OBSEG_OBJECTS := build/assets/obseg/ob_seg.o
OBSEG_RZ := $(BG_SEG_FILES) $(CHR_RZ_FILES) $(GUN_RZ_FILES) $(PROP_RZ_FILES) $(STAN_RZ_FILES) $(BRIEF_RZ_FILES) $(SETUP_RZ_FILES) $(TEXT_RZ_FILES)
IMAGE_BINS := $(foreach dir,assets/images/split,$(wildcard $(dir)/*.bin))
IMAGE_OBJS := $(foreach file,$(IMAGE_BINS),$(BUILD_DIR)/$(file:.bin=.o))
RZFILES := rarezip/rarezip.c
RZOBJECTS := $(foreach file,$(RZFILES),$(BUILD_DIR)/src/$(file:.c=.o))
OBJECTS := $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(OBSEGMENT) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONT_OBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS)
# other tools
TOOLS_DIR := tools
DATASEG_COMP := $(TOOLS_DIR)/data_compress.sh
RZ_COMP := $(TOOLS_DIR)/1172compress.sh
N64CKSUM := $(TOOLS_DIR)/n64cksum
MAKEBG := $(TOOLS_DIR)/makebg.sh
SHA1SUM = sha1sum
INCLUDE := -I . -I include -I include/libultra -I src -I src/game -I src/rarezip
CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
CFLAGS := -Wo,-loopunroll,0 -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821 -signed $(INCLUDE) -mips2
LD := $(TOOLCHAIN)ld
LD_SCRIPT := ge007.$(COUNTRYCODE).ld
LDFLAGS := -T undefined_syms.txt -T $(LD_SCRIPT) -Map $(BUILD_DIR)/ge007.$(COUNTRYCODE).map
AS := $(TOOLCHAIN)as
ASFLAGS := -march=vr4300 -mabi=32 $(INCLUDE)
ASM_PREPROC := python3 tools/asmpreproc/asm-processor.py
OBJCOPY := $(TOOLCHAIN)objcopy
all: $(APPROM)
ifeq ($(COMPARE),1)
@$(SHA1SUM) -c ge007.$(COUNTRYCODE).sha1
endif
codeclean:
rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(COUNTRYCODE).map \
$(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS)
dataclean:
rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(COUNTRYCODE).map \
$(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONT_OBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES)
clean:
rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(COUNTRYCODE).map \
$(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \
$(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONT_OBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES)
build/%.o: src/%.s
$(AS) $(ASFLAGS) -o $@ $<
build/src/%.o: src/%.s
$(AS) $(ASFLAGS) -o $@ $<
build/assets/%.o: assets/%.s
$(AS) $(ASFLAGS) -o $@ $<
build/assets/ramrom/%.o: assets/ramrom/%.s
$(AS) $(ASFLAGS) -o $@ $<
build/assets/font/%.o: assets/font/%.s
$(AS) $(ASFLAGS) -o $@ $<
build/assets/obseg/%.o: assets/obseg/%.s
$(AS) $(ASFLAGS) -o $@ $<
$(BUILD_DIR)/assets/images/split/%.o: assets/images/split/%.bin
$(LD) -r -b binary $< -o $@
build/%.o: src/%.c
$(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ $(OPTIMIZATION)
$(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude tools/asmpreproc/prelude.s
build/src/%.o: src/%.c
$(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ $(OPTIMIZATION)
$(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude tools/asmpreproc/prelude.s
build/$(OBSEGMENT): $(OBSEG_RZ) $(IMAGE_OBJS)
$(APPELF): $(ULTRAOBJECTS) $(HEADEROBJECTS) build/$(OBSEGMENT) $(MUSIC_RZ_FILES) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONT_OBJECTS) $(MUSIC_OBJECTS) $(OBSEG_OBJECTS)
$(LD) $(LDFLAGS) -o $@
$(APPBIN): $(APPELF)
$(OBJCOPY) $< $@ -O binary --gap-fill=0xff
$(APPROM): $(APPBIN)
$(DATASEG_COMP) $<
$(N64CKSUM) $< $@
rm header.tmp
.PHONY: all default codeclean dataclean clean