Skip to content

Commit

Permalink
feat: Linkerscript now tracks RAM/ROM usage
Browse files Browse the repository at this point in the history
  • Loading branch information
aarant authored and ravepossum committed Jun 23, 2024
1 parent 2601250 commit d8f49bb
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 40 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt)
$(RAMSCRGEN) COMMON $< ENGLISH -c $(C_BUILDDIR),common_syms > $@

$(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt
$(RAMSCRGEN) ewram_data $< ENGLISH > $@
$(RAMSCRGEN) .sbss $< ENGLISH > $@

ifeq ($(MODERN),0)
LD_SCRIPT := ld_script.ld
Expand All @@ -340,7 +340,7 @@ LD_SCRIPT_DEPS :=
endif

$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS)
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< -o ../../$@ $(OBJS_REL) $(LIB)
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent

$(ROM): $(ELF)
Expand Down
4 changes: 3 additions & 1 deletion include/gba/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define EWRAM_DATA __attribute__((section("__DATA,ewram_data")))
#else
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
#define EWRAM_DATA __attribute__((section(".sbss")))
#endif

#if MODERN
Expand Down Expand Up @@ -75,6 +75,8 @@
#define TILE_SIZE_4BPP 32
#define TILE_SIZE_8BPP 64

#define BG_TILE_ADDR_4BPP(n) (void *)(BG_VRAM + (TILE_SIZE_4BPP * (n)))

#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP)
#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP)

Expand Down
46 changes: 24 additions & 22 deletions ld_script.ld
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
gNumMusicPlayers = 4;
gMaxLines = 0;

MEMORY
{
EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K
IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K
ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M
}

SECTIONS {
. = 0x2000000;

ewram (NOLOAD) :
.ewram.sbss 0x2000000 (NOLOAD) :
ALIGN(4)
{
gHeap = .;

. = 0x1C000;

INCLUDE "sym_ewram.ld"
src/*.o(ewram_data);
src/*.o(.sbss);

*libc.a:impure.o(.data);
*libc.a:locale.o(.data);
*libc.a:mallocr.o(.data);
. = 0x40000;
}

. = 0x3000000;
} > EWRAM

iwram (NOLOAD) :
iwram 0x3000000 (NOLOAD) :
ALIGN(4)
{
/* .bss starts at 0x3000000 */
Expand All @@ -38,10 +41,9 @@ SECTIONS {

*libc.a:sbrkr.o(COMMON);
end = .;
} > IWRAM

. = 0x8000;
}

/* BEGIN ROM DATA */
. = 0x8000000;

.text :
Expand Down Expand Up @@ -308,7 +310,7 @@ SECTIONS {
src/minigame_countdown.o(.text);
src/berry_fix_program.o(.text);
src/debug.o(.text);
} =0
} > ROM =0

script_data :
ALIGN(4)
Expand All @@ -320,7 +322,7 @@ SECTIONS {
data/battle_scripts_2.o(script_data);
data/battle_ai_scripts.o(script_data);
data/mystery_event_script_cmd_table.o(script_data);
} =0
} > ROM =0

lib_text :
ALIGN(4)
Expand Down Expand Up @@ -389,7 +391,7 @@ SECTIONS {
*libc.a:libcfunc.o(.text);
*libc.a:lseekr.o(.text);
*libc.a:readr.o(.text);
} =0
} > ROM =0

.rodata :
SUBALIGN(4)
Expand Down Expand Up @@ -610,7 +612,7 @@ SECTIONS {
data/mystery_event_msg.o(.rodata);
src/m4a_tables.o(.rodata);
data/sound_data.o(.rodata);
} =0
} > ROM =0

song_data :
ALIGN(4)
Expand Down Expand Up @@ -962,7 +964,7 @@ SECTIONS {
sound/songs/midi/mus_trainer_tower.o(.rodata);
sound/songs/midi/mus_slow_pallet.o(.rodata);
sound/songs/midi/mus_teachy_tv_menu.o(.rodata);
}
} > ROM =0

lib_rodata :
SUBALIGN(4)
Expand Down Expand Up @@ -1015,30 +1017,30 @@ SECTIONS {
*libc.a:readr.o(.rodata);

. = ALIGN(4);
} =0
} > ROM =0

multiboot_data :
ALIGN(4)
{
data/multiboot_ereader.o(.rodata);
data/multiboot_berry_glitch_fix.o(.rodata);
data/multiboot_pokemon_colosseum.o(.rodata);
} =0
} > ROM =0

. = 0x08D00000;
gfx_data :
gfx_data 0x08D00000 :
ALIGN(4)
{
src/graphics.o(.rodata);
} =0
} > ROM =0

extra :
ALIGN(4)
{
src/*.o(.text);
src/*.o(.rodata);
data/*.o(.rodata);
} = 0
} > ROM =0


__rom_end = .;

Expand Down
31 changes: 16 additions & 15 deletions ld_script_modern.ld
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
gNumMusicPlayers = 4;
gMaxLines = 0;

MEMORY
{
EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K
IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K
ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M
}

SECTIONS {
. = 0x2000000;

ewram (NOLOAD) :
.ewram.sbss 0x2000000 (NOLOAD) :
ALIGN(4)
{
gHeap = .;

. = 0x1C000;

*(ewram_data);

. = 0x40000;
}

. = 0x3000000;
*(.sbss);
} > EWRAM

iwram (NOLOAD) :
iwram 0x3000000 (NOLOAD) :
ALIGN(4)
{
/* .bss starts at 0x3000000 */
Expand All @@ -30,8 +32,7 @@ SECTIONS {
*(COMMON);
end = .;
__end__ = .;
. = 0x8000;
}
} > IWRAM

. = 0x8000000;

Expand All @@ -43,25 +44,25 @@ SECTIONS {
src/crt0.o(.text);
src/main.o(.text);
*(.text*);
} =0
} > ROM =0

script_data :
ALIGN(4)
{
*(script_data);
} =0
} > ROM =0

.data :
ALIGN(4)
{
*(.data*);
} =0
} > ROM =0

.rodata :
ALIGN(4)
{
*(.rodata*);
} =0
} > ROM =0

__rom_end = .;

Expand Down

0 comments on commit d8f49bb

Please sign in to comment.