Use different linker script for nonmatching builds (#505)

* got overzealous with the alignments

* small knowledge improvement on models

* true

* add enum size entries for easy ref

* bgload names I forgot to merge in

* transition memes

* absinthe

* brug

* anguish

* hell

* getting there

* misery

* Update README.md

* Update include/structs.h

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>

* format moment

* Delete object_animate.s

* Update obj_animate.s

* remembered to rename this

* clear mem properly

* Update waves.c

* custom linker override for nonmatching builds

* fix warns

* format

* Update Makefile

* Update dkr.custom.ld

* Update Makefile

* Update waves.c

* Update audio_spatial.c

* Update dkr.custom.ld

* Update dkr.custom.ld

* Update Makefile

---------

Co-authored-by: Ryan Myers <ryan.p.myers@gmail.com>
This commit is contained in:
Fazana
2025-05-09 18:50:32 +01:00
committed by GitHub
co-authored by Ryan Myers
parent 5304ed697b
commit 150a56cf01
5 changed files with 121 additions and 10 deletions
+1 -2
View File
@@ -54,8 +54,7 @@ __pycache__/
*__pycache__/
expected/
.*/
*.ld
*/*.ld
ver/*.ld
*.map
*/*.map
*auto.txt
+12 -7
View File
@@ -91,6 +91,10 @@ O_FILES := $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file).o) \
$(foreach file,$(C_FILES),$(BUILD_DIR)/$(file).o) \
$(foreach file,$(BIN_FILES),$(BUILD_DIR)/$(file).o)
O_FILES_LD := $(filter-out $(BUILD_DIR)/asm/assets/assets.s.o, \
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file).o) \
$(foreach file,$(C_FILES),$(BUILD_DIR)/$(file).o))
find-command = $(shell which $(1) 2>/dev/null)
# Tools
@@ -212,9 +216,15 @@ ifneq ($(filter x86_64%,$(UNAME_M)),)
endif
TARGET = $(BUILD_DIR)/$(BASENAME).$(REGION).$(VERSION)
LD_FLAGS :=
ifeq ($(NON_MATCHING), 0)
LD_SCRIPT = ver/$(BASENAME).$(REGION).$(VERSION).ld
else
LD_SCRIPT = mods/dkr.custom.ld
LD_FLAGS += $(O_FILES_LD)
endif
LD_FLAGS = -T $(LD_SCRIPT) -T $(SYMBOLS_DIR)/undefined_syms.txt -Map $(TARGET).map
LD_FLAGS += -T $(LD_SCRIPT) -T $(SYMBOLS_DIR)/undefined_syms.txt -Map $(TARGET).map
ASM_PROCESSOR_DIR := $(TOOLS_DIR)/asm-processor
ASM_PROCESSOR = $(PYTHON) $(ASM_PROCESSOR_DIR)/build.py
@@ -356,7 +366,7 @@ distclean: clean
rm -rf $(ASM_DIRS)
rm -rf $(BIN_DIRS)
rm -f $(SYMBOLS_DIR)/*auto.$(REGION).$(VERSION).txt
rm -f $(LD_SCRIPT)
rm -f ver/$(BASENAME).$(REGION).$(VERSION).ld
distcleanall: cleanall
rm -rf asm
@@ -476,11 +486,6 @@ $(BUILD_DIR)/asm/header.s.o: src/hasm/header.s | $(ALL_ASSETS_BUILT)
$(V)$(AS) $(ASFLAGS) -o $(BUILD_DIR)/asm/header.s.o $<
ifeq ($(NON_MATCHING),1)
# Specifically override llcvt file for NON_MATCHING builds
$(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o: src/hasm/llmuldiv_gcc.s | $(ALL_ASSETS_BUILT)
$(call print,Assembling llmuldiv_gcc:,$<,$@)
$(V)$(AS) $(ASFLAGS) --defsym NON_MATCHING=1 -o $(BUILD_DIR)/$(LIBULTRA_DIR)/src/libc/llcvt.c.o $<
# If doing a NON_MATCHING build, and the custom boot file exists, use that.
ifneq ("$(wildcard $(BOOT_CUSTOM))","")
$(BUILD_DIR)/assets/boot.bin.o: $(BOOT_CUSTOM) | $(ALL_ASSETS_BUILT)
+105
View File
@@ -0,0 +1,105 @@
SECTIONS
{
__romPos = 0;
header_ROM_START = __romPos;
header_VRAM = ADDR(.header);
.header : AT(header_ROM_START) SUBALIGN(16)
{
FILL(0x00000000);
header_DATA_START = .;
build/asm/header.s.o(.data);
header_DATA_END = .;
header_DATA_SIZE = ABSOLUTE(header_DATA_END - header_DATA_START);
}
__romPos += SIZEOF(.header);
header_ROM_END = __romPos;
header_VRAM_END = .;
boot_ROM_START = __romPos;
boot_VRAM = ADDR(.boot);
.boot : AT(boot_ROM_START) SUBALIGN(16)
{
FILL(0x00000000);
boot_DATA_START = .;
build/assets/boot.bin.o(.data);
boot_DATA_END = .;
boot_DATA_SIZE = ABSOLUTE(boot_DATA_END - boot_DATA_START);
}
__romPos += SIZEOF(.boot);
boot_ROM_END = __romPos;
boot_VRAM_END = .;
main_ROM_START = __romPos;
main_VRAM = ADDR(.main);
.main 0x80000400 : AT(main_ROM_START) SUBALIGN(16)
{
/* Text */
FILL(0x00000000);
main_TEXT_START = .;
build/src/hasm/entrypoint.s.o(.text);
build/src*.o(.text);
build/libultra/src*.o(.text);
build/asm/data/ucode_audio.s.o(.text);
build/asm/data/ucode_boot.s.o(.text);
build/asm/data/ucode_f3ddkr_dram.s.o(.text);
build/asm/data/ucode_f3ddkr_fifo.s.o(.text);
build/asm/data/ucode_f3ddkr_xbus.s.o(.text);
build/asm/data/ucode_unknown_2.s.o(.text);
/* Data */
main_TEXT_END = .;
main_TEXT_SIZE = ABSOLUTE(main_TEXT_END - main_TEXT_START);
main_DATA_START = .;
build/src*.o(.data*);
build/libultra/src*.o(.data);
build/asm/data/data_audio.s.o(.data);
build/asm/data/data_f3ddkr_dram.s.o(.data);
build/asm/data/data_f3ddkr_fifo.s.o(.data);
build/asm/data/data_f3ddkr_xbus.s.o(.data);
build/asm/data/data_unknown_2.s.o(.data);
/* Rodata */
main_DATA_END = .;
main_DATA_SIZE = ABSOLUTE(main_DATA_END - main_DATA_START);
main_RODATA_START = .;
build/src*.o(.rodata*);
build/libultra/src*.o(.rodata*);
. = ALIGN(., 16);
main_RODATA_END = .;
main_RODATA_SIZE = ABSOLUTE(main_RODATA_END - main_RODATA_START);
}
main_bss_VRAM = ADDR(.main_bss);
.main_bss (NOLOAD) : SUBALIGN(16)
{
FILL(0x00000000);
main_BSS_START = .;
build/src*.o(.*bss*);
build/libultra/src*.o(.*bss*);
. = ALIGN(., 16);
main_BSS_END = .;
main_BSS_SIZE = ABSOLUTE(main_BSS_END - main_BSS_START);
}
__romPos += SIZEOF(.main);
__romPos = ALIGN(__romPos, 16);
. = ALIGN(., 16);
main_ROM_END = __romPos;
main_VRAM_END = .;
assets_ROM_START = __romPos;
assets_VRAM = ADDR(.assets);
.assets main_VRAM_END : AT(assets_ROM_START) SUBALIGN(16)
{
FILL(0x00000000);
assets_DATA_START = .;
build/assets/assets.bin.o(.data);
assets_DATA_END = .;
assets_DATA_SIZE = ABSOLUTE(assets_DATA_END - assets_DATA_START);
}
__romPos += SIZEOF(.assets);
assets_ROM_END = __romPos;
assets_VRAM_END = .;
/DISCARD/ :
{
*(*);
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ OSThread gThread3; // OSThread for thread 3
void mainproc(void) {
osInitialize();
#ifdef AVOID_UB
bzero(&gMainMemoryPool, RAM_END - (s32) (&gMainMemoryPool));
bzero(&gMainMemoryPool, RAM_END - (s32) (&main_BSS_START));
#endif
osCreateThread(&gThread1, 1, &thread1_main, 0, &gThread1Stack[STACKSIZE(STACK_IDLE)], OS_PRIORITY_IDLE);
osStartThread(&gThread1);
+2
View File
@@ -5,6 +5,8 @@
#include "macros.h"
#include <ultra64.h>
extern u8 *main_BSS_START[];
void mainproc(void);
void thread1_main(void *);
void thread3_verify_stack(void);