diff --git a/Makefile b/Makefile index d3bb9e83..2b493d56 100644 --- a/Makefile +++ b/Makefile @@ -575,7 +575,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) asm/debug $(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) # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) @@ -791,10 +791,15 @@ $(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/sm64_prelim.elf $(call print,Getting Goddard size...) $(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/sm64_prelim.map $(VERSION) +$(BUILD_DIR)/asm/debug/map.o: asm/debug/map.s $(BUILD_DIR)/sm64_prelim.elf + $(call print,Assembling:,$<,$@) + $(V)python3 tools/mapPacker.py $(BUILD_DIR)/sm64_prelim.map $(BUILD_DIR)/bin/addr.bin $(BUILD_DIR)/bin/name.bin + $(V)$(CROSS)gcc -c $(ASMFLAGS) $(foreach i,$(INCLUDE_DIRS),-Wa,-I$(i)) -x assembler-with-cpp -MMD -MF $(BUILD_DIR)/$*.d -o $@ $< + # Link SM64 ELF file -$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a +$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(BUILD_DIR)/asm/debug/map.o $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" - $(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc -lnustd -lhvqm2 + $(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc # Build ROM $(ROM): $(ELF) diff --git a/sm64.ld b/sm64.ld index 58d28918..8c61431f 100755 --- a/sm64.ld +++ b/sm64.ld @@ -150,6 +150,7 @@ SECTIONS BUILD_DIR/src/boot*.o(.text); BUILD_DIR/src/hvqm*.o(.text); + BUILD_DIR/src/usb*.o(.text); BUILD_DIR/src/audio*.o(.text); #ifdef S2DEX_TEXT_ENGINE lib/libs2d_engine.a:*(.text); @@ -168,6 +169,7 @@ SECTIONS /* data */ BUILD_DIR/src/boot*.o(.*data*); + BUILD_DIR/src/usb*.o(.*data*); BUILD_DIR/src/audio*.o(.*data*); #ifdef S2DEX_TEXT_ENGINE lib/libs2d_engine.a:*(.*data*); @@ -185,6 +187,7 @@ SECTIONS /* rodata */ BUILD_DIR/src/boot*.o(.rodata*); + BUILD_DIR/src/usb*.o(.rodata*); BUILD_DIR/src/audio*.o(.rodata*); #ifdef S2DEX_TEXT_ENGINE lib/libs2d_engine.a:*(.rodata*); @@ -199,15 +202,32 @@ SECTIONS BUILD_DIR/lib/rsp.o(.rodata*); lib/PR/hvqm/hvqm2sp1.o(.rodata*); +#ifndef PRELIMINARY + BUILD_DIR/src/game/crash_screen.o(.text*); + BUILD_DIR/src/game/crash_screen.o(.data*); + BUILD_DIR/src/game/crash_screen.o(.rodata*); + BUILD_DIR/src/game/map_parser.o(.text*); + BUILD_DIR/src/game/map_parser.o(.data*); + BUILD_DIR/src/game/map_parser.o(.rodata*); +#else + parse_map = 0x80345678; +#endif } END_SEG(main) - #ifndef PRELIMINARY - ASSERT((_mainSegmentRomEnd <= 0x101000), "Error: Please shrink your main segment to under 1MB.") - #endif BEGIN_NOLOAD(main) { +// pad out the space this would've taken +#ifdef PRELIMINARY + BUILD_DIR/src/game/crash_screen.o(.text*); + BUILD_DIR/src/game/crash_screen.o(.data*); + BUILD_DIR/src/game/crash_screen.o(.rodata*); + BUILD_DIR/src/game/map_parser.o(.text*); + BUILD_DIR/src/game/map_parser.o(.data*); + BUILD_DIR/src/game/map_parser.o(.rodata*); +#endif BUILD_DIR/src/boot*.o(.*bss*); BUILD_DIR/src/hvqm*.o(.*bss*); + BUILD_DIR/src/usb*.o(.*bss*); BUILD_DIR/src/audio*.o(.*bss*); #ifdef S2DEX_TEXT_ENGINE lib/libs2d_engine.a:*(.*bss*); @@ -233,23 +253,19 @@ SECTIONS { BUILD_DIR/src/game*.o(.text); BUILD_DIR/src/engine*.o(.text); - BUILD_DIR/src/usb*.o(.text); /* data */ BUILD_DIR/src/game*.o(.*data*); BUILD_DIR/src/engine*.o(.data*); BUILD_DIR/src/engine*.o(.sdata*); - BUILD_DIR/src/usb*.o(.*data*); /* rodata */ BUILD_DIR/src/game*.o(.rodata*); BUILD_DIR/src/engine*.o(.rodata*); - BUILD_DIR/src/usb*.o(.rodata*); } END_SEG(engine) BEGIN_NOLOAD(engine) { BUILD_DIR/src/game*.o(.*bss*); BUILD_DIR/src/engine*.o(.bss*); - BUILD_DIR/src/usb*.o(.*bss*); . = ALIGN(0x40); } END_NOLOAD(engine) @@ -497,6 +513,13 @@ SECTIONS } END_SEG(capcom) #endif + +#ifndef PRELIMINARY + BEGIN_SEG(mapData, 0x80700000) { + KEEP(BUILD_DIR/asm/debug/map.o(.data*)); + } + END_SEG(mapData) +#endif /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */