diff --git a/Makefile b/Makefile index c1cedcb4..3cd4a984 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ default: all DEFINES := SRC_DIRS := +MAINSEG_SRC_DIRS := #==============================================================================# # Build Options # @@ -175,7 +176,7 @@ $(eval $(call validate-option,UNF,0 1)) ifeq ($(UNF),1) DEFINES += UNF=1 - SRC_DIRS += src/usb + MAINSEG_SRC_DIRS += src/usb endif # HVQM - whether to use HVQM fmv library @@ -185,7 +186,7 @@ HVQM ?= 0 $(eval $(call validate-option,HVQM,0 1)) ifeq ($(HVQM),1) DEFINES += HVQM=1 - SRC_DIRS += src/hvqm + MAINSEG_SRC_DIRS += src/hvqm endif # Whether to hide commands or not @@ -271,7 +272,9 @@ ACTOR_DIR := actors LEVEL_DIRS := $(patsubst levels/%,%,$(dir $(wildcard levels/*/header.h))) # Directories containing source files -SRC_DIRS += src src/engine src/game src/audio src/menu src/buffers actors levels bin data assets asm lib sound +SRC_DIRS += src src/audio src/menu src/buffers actors levels bin data assets asm lib sound +MAINSEG_SRC_DIRS += src/game +ENGINE_SRC_DIRS := src/engine LIBZ_SRC_DIRS := src/libz BIN_DIRS := bin bin/$(VERSION) @@ -281,6 +284,9 @@ include Makefile.split # Source code files LEVEL_C_FILES := $(wildcard levels/*/leveldata.c) $(wildcard levels/*/script.c) $(wildcard levels/*/geo.c) C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) $(LEVEL_C_FILES) +MAINSEG_C_FILES := $(foreach dir,$(MAINSEG_SRC_DIRS),$(wildcard $(dir)/*.c)) +MAINSEG_S_FILES := $(foreach dir,$(MAINSEG_SRC_DIRS),$(wildcard $(dir)/*.s)) +ENGINE_C_FILES := $(foreach dir,$(ENGINE_SRC_DIRS),$(wildcard $(dir)/*.c)) LIBZ_C_FILES := $(foreach dir,$(LIBZ_SRC_DIRS),$(wildcard $(dir)/*.c)) S_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s)) GENERATED_C_FILES := $(BUILD_DIR)/assets/mario_anim_data.c $(BUILD_DIR)/assets/demo_data.c @@ -305,10 +311,12 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \ $(foreach file,$(GENERATED_C_FILES),$(file:.c=.o)) \ lib/PR/hvqm/hvqm2sp1.o lib/PR/hvqm/hvqm2sp2.o +MAINSEG_O_FILES := $(foreach file,$(MAINSEG_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) $(foreach file,$(MAINSEG_S_FILES),$(BUILD_DIR)/$(file:.s=.o)) +ENGINE_O_FILES := $(foreach file,$(ENGINE_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) LIBZ_O_FILES := $(foreach file,$(LIBZ_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) # Automatic dependency files -DEP_FILES := $(O_FILES:.o=.d) $(LIBZ_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d +DEP_FILES := $(O_FILES:.o=.d) $(MAINSEG_O_FILES:.o=.d) $(ENGINE_O_FILES:.o=.d) $(LIBZ_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d #==============================================================================# # Compiler Options # @@ -502,7 +510,7 @@ $(BUILD_DIR)/src/usb/usb.o: CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wn $(BUILD_DIR)/src/usb/debug.o: OPT_FLAGS := -O0 $(BUILD_DIR)/src/usb/debug.o: CFLAGS += -Wno-unused-parameter -Wno-maybe-uninitialized -ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(GODDARD_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) +ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(MAINSEG_SRC_DIRS) $(GODDARD_SRC_DIRS) $(ENGINE_SRC_DIRS) $(LIBZ_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(YAY0_DIR) $(addprefix $(YAY0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) @@ -696,15 +704,25 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(call print,Preprocessing linker script:,$<,$@) $(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< +# Link mainseg +$(BUILD_DIR)/mainseg.o: $(MAINSEG_O_FILES) $(BUILD_DIR)/libz.a + @$(PRINT) "$(GREEN)Linking main segment: $(BLUE)$@ $(NO_COL)\n" + $(V)$(LD) -o $@ -r $(MAINSEG_O_FILES) -L $(BUILD_DIR) -L$(LIBS_DIR) -Llib -lgcc -lnustd -lhvqm2 -lz + +# Link engine +$(BUILD_DIR)/engineseg.o: $(ENGINE_O_FILES) + @$(PRINT) "$(GREEN)Linking engine segment: $(BLUE)$@ $(NO_COL)\n" + $(V)$(LD) -o $@ -r $(ENGINE_O_FILES) + # Link libz $(BUILD_DIR)/libz.a: $(LIBZ_O_FILES) @$(PRINT) "$(GREEN)Linking libz: $(BLUE)$@ $(NO_COL)\n" $(V)$(AR) rcs -o $@ $(LIBZ_O_FILES) # Link SM64 ELF file -$(ELF): $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a +$(ELF): $(BUILD_DIR)/mainseg.o $(BUILD_DIR)/engineseg.o $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" - $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -lultra_rom -Llib -lgcc -lnustd -lhvqm2 -lz + $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(BUILD_DIR)/src/audio -L$(LIBS_DIR) -lultra_rom # Build ROM $(ROM): $(ELF) diff --git a/Makefile.split b/Makefile.split index 230cd3dc..3b5aaf49 100644 --- a/Makefile.split +++ b/Makefile.split @@ -261,7 +261,6 @@ $(BUILD_DIR)/bin/%_skybox.elf: SEGMENT_ADDRESS := 0x0A000000 # intro and ipl3 textures are not compressed INTRO_RAW_FILES := $(wildcard $(TEXTURE_DIR)/intro_raw/*.png) -$(BUILD_DIR)/src/goddard/renderer.o: $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(INTRO_RAW_FILES))) IPL3_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/ipl3_raw/*.png) IPL3_RAW_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%,$(IPL3_TEXTURE_FILES))) diff --git a/lib/PR/super3d/Super3D_data.bin b/lib/PR/super3d/Super3D_data.bin index 4be45516..02f1a96a 100644 Binary files a/lib/PR/super3d/Super3D_data.bin and b/lib/PR/super3d/Super3D_data.bin differ diff --git a/sm64.ld b/sm64.ld index ad0cb77e..41ec1a3b 100755 --- a/sm64.ld +++ b/sm64.ld @@ -102,17 +102,17 @@ SECTIONS #ifdef HVQM BEGIN_NOLOAD(hvqmwork) { - BUILD_DIR/src/hvqm/hvqmwork.o(.bss*); + BUILD_DIR/src/buffers/hvqmwork.o(.bss*); } END_NOLOAD(hvqmwork) BEGIN_NOLOAD(adpcmbuf) { - BUILD_DIR/src/hvqm/adpcmbuf.o(.bss*); + BUILD_DIR/src/buffers/adpcmbuf.o(.bss*); } END_NOLOAD(adpcmbuf) BEGIN_NOLOAD(hvqbuf) { - BUILD_DIR/src/hvqm/hvqbuf.o(.bss*); + BUILD_DIR/src/buffers/hvqbuf.o(.bss*); } END_NOLOAD(hvqbuf) @@ -123,107 +123,28 @@ SECTIONS { BUILD_DIR/asm/entry.o(.text); - BUILD_DIR/src/game*.o(.text); -#ifdef HVQM - BUILD_DIR/src/hvqm*.o(.text); -#endif -#ifdef UNF - BUILD_DIR/src/usb*.o(.text); -#endif + BUILD_DIR/mainseg.o(.text); BUILD_DIR/src/audio*.o(.text); -#ifdef GZIP - BUILD_DIR/src/gzip*.o(.text); -#endif -#ifdef YAY0 - BUILD_DIR/asm/slidec.o(.text); -#endif -#ifdef MIO0 - BUILD_DIR/asm/decompress.o(.text); -#endif -#ifdef RNC1 - BUILD_DIR/asm/rnc1.o(.text); -#endif -#ifdef RNC2 - BUILD_DIR/asm/rnc2.o(.text); -#endif */libultra_rom.a:*.o(.text); - */libnustd.a:*.o(.text); - */libgcc.a:_umoddi3.o(.text); - */libgcc.a:_udivdi3.o(.text); - */libgcc.a:_divdi3.o(.text); - */libgcc.a:_moddi3.o(.text); - */libgcc.a:_fixdfdi.o(.text); - */libgcc.a:_fixsfdi.o(.text); - */libgcc.a:_fixunsfdi.o(.text); - */libgcc.a:_fixunssfdi.o(.text); - */libgcc.a:_fixunsdfdi.o(.text); - */libgcc.a:_floatdidf.o(.text); - */libgcc.a:_floatundidf.o(.text); - */libgcc.a:_floatdisf.o(.text); - */libgcc.a:_cmpdi2.o(.text); -#ifdef GZIP - */libz.a:*.o(.text); -#endif -#ifdef HVQM - */libhvqm2.a:*.o(.text); -#endif BUILD_DIR/lib/rsp.o(.text); lib/PR/hvqm/hvqm2sp1.o(.text); /* data */ - BUILD_DIR/src/game*.o(.data*); - BUILD_DIR/src/game*.o(.sdata*); -#ifdef UNF - BUILD_DIR/src/usb*.o(.data*); - BUILD_DIR/src/usb*.o(.sdata*); -#endif - BUILD_DIR/src/audio*.o(.data*); - BUILD_DIR/src/audio*.o(.sdata*); -#ifdef GZIP - BUILD_DIR/src/gzip*.o(.data*); -#endif -#ifdef RNC2 - BUILD_DIR/asm/rnc2.o(.data*); -#endif + BUILD_DIR/mainseg.o(.*data*); + BUILD_DIR/src/audio*.o(.*data*); + */libultra_rom.a:*.o(.*data*); - */libultra_rom.a:*.o(.data*); - */libultra_rom.a:*.o(.sdata*); -#ifdef HVQM - */libhvqm2.a:*.o(.data*); -#endif -#ifdef GZIP - */libz.a:*.o(.data*); -#endif BUILD_DIR/lib/rsp.o(.data*); #ifdef HVQM lib/PR/hvqm/hvqm2sp1.o(.data*); #endif /* rodata */ - BUILD_DIR/src/game*.o(.rodata*); -#ifdef UNF - BUILD_DIR/src/usb*.o(.rodata*); -#endif + BUILD_DIR/mainseg.o(.rodata*); BUILD_DIR/src/audio*.o(.rodata*); -#ifdef GZIP - BUILD_DIR/src/gzip*.o(.rodata*); -#endif - */libultra_rom.a:*.o(.rodata*); - */libgcc.a:_umoddi3.o(.rodata*); - */libgcc.a:_udivdi3.o(.rodata*); - */libgcc.a:_divdi3.o(.rodata*); - */libgcc.a:_clz.o(.rodata*); - */libgcc.a:_fixunsdfdi.o(.rodata*); - */libgcc.a:_floatundidf.o(.rodata*); - */libgcc.a:_moddi3.o(.rodata*); -#ifdef HVQM - */libhvqm2.a:*.o(.rodata*); -#endif -#ifdef GZIP - */libz.a:*.o(.rodata*); -#endif + BUILD_DIR/lib/rsp.o(.rodata*); #ifdef HVQM lib/PR/hvqm/hvqm2sp1.o(.rodata*); @@ -232,31 +153,11 @@ SECTIONS END_SEG(main) BEGIN_NOLOAD(main) { - BUILD_DIR/src/game*.o(.bss*); - BUILD_DIR/src/game*.o(.sbss*); -#ifdef HVQM - BUILD_DIR/src/hvqm*.o(.bss*); -#endif -#ifdef UNF - BUILD_DIR/src/usb*.o(.bss*); - BUILD_DIR/src/usb*.o(.sbss*); -#endif - BUILD_DIR/src/audio*.o(.bss*); - BUILD_DIR/src/audio*.o(.sbss*); -#ifdef GZIP - BUILD_DIR/src/gzip*.o(.bss*); -#endif + BUILD_DIR/mainseg.o(.*bss*); + BUILD_DIR/src/audio*.o(.*bss*); */libultra_rom.a:*.o(COMMON); */libultra_rom.a:*.o(.scommon); - */libultra_rom.a:*.o(.bss*); - */libultra_rom.a:*.o(.sbss*); -#ifdef HVQM - */libhvqm2.a:*.o(.bss*); -#endif -#ifdef GZIP - */libz.a:*.o(.bss*); -#endif - + */libultra_rom.a:*.o(.*bss*); . = ALIGN(0x8); } END_NOLOAD(main) @@ -269,17 +170,17 @@ SECTIONS BEGIN_SEG(engine, .) { - BUILD_DIR/src/engine*.o(.text); + BUILD_DIR/engineseg.o(.text); /* data */ - BUILD_DIR/src/engine*.o(.data*); - BUILD_DIR/src/engine*.o(.sdata*); + BUILD_DIR/engineseg.o(.data*); + BUILD_DIR/engineseg.o(.sdata*); /* rodata */ - BUILD_DIR/src/engine*.o(.rodata*); + BUILD_DIR/engineseg.o(.rodata*); } END_SEG(engine) BEGIN_NOLOAD(engine) { - BUILD_DIR/src/engine*.o(.bss*); + BUILD_DIR/engineseg.o(.bss*); . = ALIGN(0x100); } END_NOLOAD(engine) diff --git a/src/hvqm/adpcmbuf.c b/src/buffers/adpcmbuf.c similarity index 100% rename from src/hvqm/adpcmbuf.c rename to src/buffers/adpcmbuf.c diff --git a/src/hvqm/hvqbuf.c b/src/buffers/hvqbuf.c similarity index 100% rename from src/hvqm/hvqbuf.c rename to src/buffers/hvqbuf.c diff --git a/src/hvqm/hvqmwork.c b/src/buffers/hvqmwork.c similarity index 100% rename from src/hvqm/hvqmwork.c rename to src/buffers/hvqmwork.c diff --git a/asm/decompress.s b/src/game/decompress.s similarity index 100% rename from asm/decompress.s rename to src/game/decompress.s diff --git a/asm/rnc1.s b/src/game/rnc1.s similarity index 100% rename from asm/rnc1.s rename to src/game/rnc1.s diff --git a/asm/rnc2.s b/src/game/rnc2.s similarity index 100% rename from asm/rnc2.s rename to src/game/rnc2.s diff --git a/asm/slidec.s b/src/game/slidec.s similarity index 100% rename from asm/slidec.s rename to src/game/slidec.s