Skip to content

Commit 1aca5c1

Browse files
author
n64
committed
Upgrade to 2.0I decompilation
1 parent 6dc0d73 commit 1aca5c1

606 files changed

Lines changed: 35228 additions & 21652 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

100644100755
File mode changed.

Makefile

100644100755
Lines changed: 103 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,127 @@
1-
# Modified SM64 makefile
1+
# Makefile to rebuild SM64 split image
22

33
### Default target ###
44

5-
# don't touch
6-
default: libultra
7-
# which sm64 release of libultra to use. eu release type provides the most libultra code
8-
VERSION ?= eu
5+
default: all
96

10-
# If ENDIAN_IND is 1, enable non-matching code changes that try to ensure
11-
# endianness independence
12-
ENDIAN_IND ?= 0
7+
### Build Options ###
8+
9+
# These options can either be changed by modifying the makefile, or
10+
# by building with 'make SETTING=value'. 'make clean' may be required.
11+
12+
# Version of the game to build
13+
VERSION ?= 2.0I
14+
# If COMPARE is 1, check the output sha1sum when building 'all'
15+
COMPARE ?= 1
16+
# If NON_MATCHING is 1, define the NON_MATCHING and AVOID_UB macros when building (recommended)
17+
NON_MATCHING ?= 0
18+
# Build for the N64 (turn this off for ports)
19+
TARGET_N64 ?= 1
1320

1421
# Release
15-
ifeq ($(VERSION),jp)
16-
VERSION_CFLAGS := -DVERSION_JP=1
17-
VERSION_ASFLAGS := --defsym VERSION_JP=1
18-
else
19-
ifeq ($(VERSION),us)
20-
VERSION_CFLAGS := -DVERSION_US=1
21-
VERSION_ASFLAGS := --defsym VERSION_US=1
22-
else
23-
ifeq ($(VERSION),eu)
24-
VERSION_CFLAGS := -DVERSION_EU=1
25-
VERSION_ASFLAGS := --defsym VERSION_EU=1
26-
else
27-
$(error unknown version "$(VERSION)")
28-
endif
29-
endif
30-
endif
3122

32-
ifeq ($(ENDIAN_IND),1)
33-
VERSION_CFLAGS := $(VERSION_CFLAGS) -DENDIAN_IND=1
34-
COMPARE := 0
35-
endif
3623

3724
################ Target Executable and Sources ###############
3825

3926
# BUILD_DIR is location where all build artifacts are placed
4027
BUILD_DIR_BASE := build
4128
BUILD_DIR := $(BUILD_DIR_BASE)/$(VERSION)
4229

43-
LIBULTRA := $(BUILD_DIR)/libultra.a
30+
#LIBULTRA := $(BUILD_DIR)/libultra.a
31+
#ROM := $(BUILD_DIR)/$(TARGET).z64
32+
#ELF := $(BUILD_DIR)/$(TARGET).elf
33+
4434

4535
# Directories containing source files
46-
ULTRA_SRC_DIRS := lib/src lib/src/math
47-
ULTRA_ASM_DIRS := lib/asm lib/data
48-
ULTRA_BIN_DIRS := lib/bin
36+
SRC_DIRS := src src/audio src/gt src/gu src/io src/libc src/os src/rg src/sched src/sp
37+
#ASM_DIRS := asm lib
38+
#BIN_DIRS := bin bin/$(VERSION)
39+
40+
#ULTRA_SRC_DIRS := lib/src lib/src/math
41+
#ULTRA_ASM_DIRS := lib/asm lib/data
42+
#ULTRA_BIN_DIRS := lib/bin
43+
44+
#GODDARD_SRC_DIRS := src/goddard src/goddard/dynlists
4945

5046

5147
MIPSISET := -mips2 -32
52-
OPT_FLAGS := -O2
5348

54-
# Source code files
55-
ULTRA_C_FILES := $(foreach dir,$(ULTRA_SRC_DIRS),$(wildcard $(dir)/*.c))
56-
ULTRA_S_FILES := $(foreach dir,$(ULTRA_ASM_DIRS),$(wildcard $(dir)/*.s))
49+
OPT_FLAGS := -O1
50+
51+
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
52+
S_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s))
5753

5854
# Object files
59-
ULTRA_O_FILES := $(foreach file,$(ULTRA_S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
60-
$(foreach file,$(ULTRA_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
55+
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
56+
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o))
6157

6258
# Automatic dependency files
63-
DEP_FILES := $(O_FILES:.o=.d) $(ULTRA_O_FILES:.o=.d)
59+
DEP_FILES := $(O_FILES:.o=.d)
6460

65-
# Files with NON_MATCHING ifdefs
66-
NON_MATCHING_C_FILES != grep -rl NON_MATCHING $(wildcard src/audio/*.c)
67-
NON_MATCHING_O_FILES = $(foreach file,$(NON_MATCHING_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
68-
NON_MATCHING_DEP = $(BUILD_DIR)/src/audio/non_matching_dep
61+
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS))
62+
63+
# Make sure build directory exists before compiling anything
64+
DUMMY != mkdir -p $(ALL_DIRS)
6965

7066
##################### Compiler Options #######################
71-
IRIX_ROOT := tools/ido5.3_compiler
67+
IRIX_ROOT := tools/ido
7268

7369
ifeq ($(shell type mips-linux-gnu-ld >/dev/null 2>/dev/null; echo $$?), 0)
7470
CROSS := mips-linux-gnu-
7571
else
7672
CROSS := mips64-elf-
7773
endif
7874

79-
AS := $(CROSS)as
80-
CC := ./qemu-irix -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc # Original compiler
75+
# check that either QEMU_IRIX is set or qemu-irix package installed
76+
ifndef QEMU_IRIX
77+
QEMU_IRIX := $(shell which qemu-irix)
78+
ifeq (, $(QEMU_IRIX))
79+
$(error Please install qemu-irix package or set QEMU_IRIX env var to the full qemu-irix binary path)
80+
endif
81+
endif
82+
83+
AS := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/as
84+
#AS := $(CROSS)as
85+
CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
86+
#AR := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/ar
8187
CPP := cpp -P
8288
LD := $(CROSS)ld
8389
AR := $(CROSS)ar
8490
OBJDUMP := $(CROSS)objdump
8591
OBJCOPY := $(CROSS)objcopy
8692

93+
ASM_OPT_FLAGS := -O1
94+
95+
$(BUILD_DIR)/src/gu/%.o: OPT_FLAGS := -O3
96+
$(BUILD_DIR)/src/gt/%.o: OPT_FLAGS := -O3
97+
$(BUILD_DIR)/src/rg/%.o: OPT_FLAGS := -O3
98+
$(BUILD_DIR)/src/sp/%.o: OPT_FLAGS := -O3
99+
$(BUILD_DIR)/src/sched/%.o: OPT_FLAGS := -O3
100+
$(BUILD_DIR)/src/audio/%.o: OPT_FLAGS := -O3
101+
$(BUILD_DIR)/src/libc/%.o: OPT_FLAGS := -O3
102+
$(BUILD_DIR)/src/libc/b%.o: ASM_OPT_FLAGS := -O2
103+
$(BUILD_DIR)/src/libc/ll.o: MIPSISET := -mips3 -o32
104+
$(BUILD_DIR)/src/libc/ll%.o: MIPSISET := -mips3 -o32
105+
$(BUILD_DIR)/src/libc/ll.o: OPT_FLAGS := -O1
106+
$(BUILD_DIR)/src/libc/ll%.o: OPT_FLAGS := -O1
107+
$(BUILD_DIR)/src/os/exceptasm.o: MIPSISET := -mips3 -o32
108+
109+
110+
#ifeq ($(TARGET_N64),1)
111+
TARGET_CFLAGS := -nostdinc -I include/2.0I -I include/2.0I/PR -DTARGET_N64 -D_FINALROM -DF3DEX_GBI -DNDEBUG
112+
CC_CFLAGS := -fno-builtin
113+
#endif
114+
115+
INCLUDE_CFLAGS := -I include/2.0I -I include/2.0I/PR
116+
87117
# Check code syntax with host compiler
88-
CC_CHECK := gcc -fsyntax-only -fsigned-char -nostdinc -I include -I $(BUILD_DIR)/include -std=gnu90 -Wall -Wextra -Wno-format-security -D_LANGUAGE_C $(VERSION_CFLAGS) $(GRUCODE_CFLAGS)
89-
ASFLAGS := -march=vr4300 -mabi=32 -I include -I $(BUILD_DIR) $(VERSION_ASFLAGS) $(GRUCODE_ASFLAGS)
90-
CFLAGS = -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -Xfullwarn $(OPT_FLAGS) -signed -I include -I $(BUILD_DIR)/include -D_LANGUAGE_C $(VERSION_CFLAGS) $(MIPSISET) $(GRUCODE_CFLAGS)
118+
CC_CHECK := gcc -fsyntax-only $(CC_CFLAGS) $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) -std=gnu90 -Wall -Wextra -Wno-format-security -DNON_MATCHING -DAVOID_UB $(VERSION_CFLAGS) $(GRUCODE_CFLAGS) -D_LANGUAGE_C -D_MIPS_SZINT=32 -D_MIPS_SZLONG=32
119+
ASFLAGS = -v -Wab,-r4300_mul -non_shared -G 0 $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) $(VERSION_CFLAGS) $(MIPSISET) $(ASM_OPT_FLAGS)
120+
CFLAGS = -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -fullwarn $(OPT_FLAGS) $(TARGET_CFLAGS) $(INCLUDE_CFLAGS) $(VERSION_CFLAGS) $(MIPSISET)
91121
OBJCOPYFLAGS := --pad-to=0x800000 --gap-fill=0xFF
122+
SYMBOL_LINKING_FLAGS := $(addprefix -R ,$(SEG_FILES))
123+
LDFLAGS := -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(SYMBOL_LINKING_FLAGS)
124+
ENDIAN_BITWIDTH := $(BUILD_DIR)/endian-and-bitwidth
92125

93126
ifeq ($(shell getconf LONG_BIT), 32)
94127
# Work around memory allocation bug in QEMU
@@ -100,11 +133,7 @@ endif
100133

101134
####################### Other Tools #########################
102135

103-
# N64 tools
104-
TOOLS_DIR = tools
105-
106-
# Make tools if out of date
107-
DUMMY != make -s -C tools >&2
136+
SHA1SUM = sha1sum
108137

109138
###################### Dependency Check #####################
110139

@@ -115,66 +144,41 @@ ifeq ($(BINUTILS_DEPEND),0)
115144
$(error binutils version 2.27 required, version $(BINUTILS_VER_MAJOR).$(BINUTILS_VER_MINOR) detected)
116145
endif
117146

118-
ifndef QEMU_IRIX
119-
$(error env variable QEMU_IRIX should point to the qemu-mips binary)
120-
endif
121-
122147
######################## Targets #############################
123148

124-
all: $(ROM)
149+
#all: $(ROM)
150+
#ifeq ($(COMPARE),1)
151+
#@$(SHA1SUM) -c $(TARGET).sha1 || (echo 'The build succeeded, but did not match the official ROM. This is expected if you are making changes to the game.\nTo silence this message, use "make COMPARE=0"'. && false)
152+
#endif
125153

126154
clean:
127155
$(RM) -r $(BUILD_DIR_BASE)
128156

129-
libultra: $(BUILD_DIR)/libultra.a
130-
131-
$(BUILD_DIR)/lib/bin/ipl3_font.bin: lib/ipl3_font.png | $(BUILD_DIR)
132-
$(IPLFONTUTIL) e $< $@
133-
134-
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS) $(ULTRA_SRC_DIRS) $(ULTRA_ASM_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) include)
157+
distclean:
158+
$(RM) -r $(BUILD_DIR_BASE)
159+
./extract_assets.py --clean
135160

136-
# Make sure build directory exists before compiling anything
137-
DUMMY != mkdir -p $(ALL_DIRS)
138161

139-
# Source code
140-
$(BUILD_DIR)/lib/src/%.o: OPT_FLAGS :=
141-
$(BUILD_DIR)/lib/src/math/ll%.o: MIPSISET := -mips3 -32
142-
$(BUILD_DIR)/lib/src/math/%.o: OPT_FLAGS := -O2
143-
$(BUILD_DIR)/lib/src/math/ll%.o: OPT_FLAGS :=
144-
$(BUILD_DIR)/lib/src/ldiv.o: OPT_FLAGS := -O2
145-
$(BUILD_DIR)/lib/src/string.o: OPT_FLAGS := -O2
146-
$(BUILD_DIR)/lib/src/gu%.o: OPT_FLAGS := -O3
147-
$(BUILD_DIR)/lib/src/al%.o: OPT_FLAGS := -O3
148-
149-
ifeq ($(VERSION),eu)
150-
$(BUILD_DIR)/lib/src/_Litob.o: OPT_FLAGS := -O3
151-
$(BUILD_DIR)/lib/src/_Ldtob.o: OPT_FLAGS := -O3
152-
$(BUILD_DIR)/lib/src/_Printf.o: OPT_FLAGS := -O3
153-
endif
162+
$(BUILD_DIR)/%.o: %.c
163+
@$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
164+
$(CC) -c $(CFLAGS) -o $@ $<
154165

155166

156-
# Rebuild files with '#ifdef NON_MATCHING' when that macro changes.
157-
$(NON_MATCHING_O_FILES): $(NON_MATCHING_DEP).$(NON_MATCHING)
158-
$(NON_MATCHING_DEP).$(NON_MATCHING):
159-
@rm -f $(NON_MATCHING_DEP).*
160-
touch $@
167+
$(BUILD_DIR)/%.o: %.s
168+
$(AS) $(ASFLAGS) -o $@ $<
161169

162-
$(BUILD_DIR)/lib/src/math/%.o: lib/src/math/%.c
163-
@$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/lib/src/math/$*.d $<
164-
$(CC) -c $(CFLAGS) -o $@ $<
165-
tools/patch_libultra_math $@ || rm $@
170+
$(BUILD_DIR)/libultra_rom.a: $(O_FILES)
171+
$(AR) rcs -o $@ $(O_FILES)
166172

167-
$(BUILD_DIR)/%.o: %.c
168-
@$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
169-
$(CC) -c $(CFLAGS) -o $@ $<
173+
#$(BUILD_DIR)/libultra.a: $(O_FILES)
174+
#$(LD) $()
175+
default: $(BUILD_DIR)/libultra_rom.a
170176

171-
$(BUILD_DIR)/%.o: %.s $(MIO0_FILES)
172-
$(AS) $(ASFLAGS) -MD $(BUILD_DIR)/$*.d -o $@ $<
173177

174-
$(BUILD_DIR)/libultra.a: $(ULTRA_O_FILES)
175-
$(AR) rcs -o $@ $(ULTRA_O_FILES)
176178

177-
.PHONY: all clean default diff test load libultra
179+
.PHONY: all clean distclean default diff test load libultra
180+
.PRECIOUS: $(BUILD_DIR)/bin/%.elf $(SOUND_BIN_DIR)/%.ctl $(SOUND_BIN_DIR)/%.tbl $(SOUND_SAMPLE_TABLES) $(SOUND_BIN_DIR)/%.s $(BUILD_DIR)/%
181+
.DELETE_ON_ERROR:
178182

179183
# Remove built-in rules, to improve performance
180184
MAKEFLAGS += --no-builtin-rules

README.md

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)