Add top-level Makefile + @fincs 's linker script fixes
This commit is contained in:
parent
9e7e967a5f
commit
e6b7dc1dc5
29
Makefile
Normal file
29
Makefile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
ifneq ($(strip $(shell firmtool -v 2>&1 | grep usage)),)
|
||||||
|
$(error "Please install firmtool v1.1 or greater")
|
||||||
|
endif
|
||||||
|
|
||||||
|
NAME := $(notdir $(CURDIR))
|
||||||
|
REVISION := $(shell git describe --tags --match v[0-9]* --abbrev=8 | sed 's/-[0-9]*-g/-/')
|
||||||
|
|
||||||
|
SUBFOLDERS := sysmodules arm11 arm9 k11_extension
|
||||||
|
|
||||||
|
.PHONY: all release clean $(SUBFOLDERS)
|
||||||
|
|
||||||
|
all: boot.firm
|
||||||
|
|
||||||
|
release: $(NAME)$(REVISION).zip
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@$(foreach dir, $(SUBFOLDERS), $(MAKE) -C $(dir) clean &&) true
|
||||||
|
@rm -rf *.firm *.zip
|
||||||
|
|
||||||
|
$(NAME)$(REVISION).zip: boot.firm exception_dump_parser
|
||||||
|
@zip -r $@ $^ -x "*.DS_Store*" "*__MACOSX*"
|
||||||
|
|
||||||
|
boot.firm: $(SUBFOLDERS)
|
||||||
|
@firmtool build $@ -D sysmodules/sysmodules.bin arm11/arm11.elf arm9/arm9.elf k11_extension/k11_extension.elf \
|
||||||
|
-A 0x18180000 0x18000000 -C XDMA XDMA NDMA XDMA
|
||||||
|
@echo built... $(notdir $@)
|
||||||
|
|
||||||
|
$(SUBFOLDERS):
|
||||||
|
@$(MAKE) -C $@ all
|
@ -2,6 +2,13 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|||||||
OUTPUT_ARCH(arm)
|
OUTPUT_ARCH(arm)
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
crt0 PT_LOAD;
|
||||||
|
itcm PT_LOAD;
|
||||||
|
main PT_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
/* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
|
/* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
@ -20,19 +27,16 @@ SECTIONS
|
|||||||
PROVIDE(__itcm_stack_bottom__ = 0x01FFA800);
|
PROVIDE(__itcm_stack_bottom__ = 0x01FFA800);
|
||||||
|
|
||||||
. = __start__;
|
. = __start__;
|
||||||
. = ALIGN(32);
|
|
||||||
|
|
||||||
.crt0 :
|
.crt0 :
|
||||||
{
|
{
|
||||||
. = ALIGN(32);
|
|
||||||
KEEP( *(.text.start) )
|
KEEP( *(.text.start) )
|
||||||
KEEP( *(.init) )
|
KEEP( *(.init) )
|
||||||
. = ALIGN(4);
|
. = ALIGN(32);
|
||||||
} >main
|
} >main :crt0
|
||||||
|
|
||||||
.itcm_loadable :
|
.itcm_loadable :
|
||||||
{
|
{
|
||||||
. = ALIGN(32);
|
|
||||||
PROVIDE (__itcm_start__ = ABSOLUTE(.));
|
PROVIDE (__itcm_start__ = ABSOLUTE(.));
|
||||||
PROVIDE (__itcm_lma__ = LOADADDR(.itcm_loadable));
|
PROVIDE (__itcm_lma__ = LOADADDR(.itcm_loadable));
|
||||||
|
|
||||||
@ -54,25 +58,22 @@ SECTIONS
|
|||||||
i2c.o(.data*)
|
i2c.o(.data*)
|
||||||
arm9_exception_handlers.o(.data*)
|
arm9_exception_handlers.o(.data*)
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(32);
|
||||||
} >itcm AT>main
|
|
||||||
|
|
||||||
.itcm_bss :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE (__itcm_bss_start__ = ABSOLUTE(.));
|
PROVIDE (__itcm_bss_start__ = ABSOLUTE(.));
|
||||||
|
} >itcm AT>main :itcm
|
||||||
|
|
||||||
|
.itcm_bss __itcm_bss_start__ (NOLOAD) :
|
||||||
|
{
|
||||||
*(.arm9_exception_handlers.bss*)
|
*(.arm9_exception_handlers.bss*)
|
||||||
chainloader.o(.bss* COMMON)
|
chainloader.o(.bss* COMMON)
|
||||||
i2c.o(.bss* COMMON)
|
i2c.o(.bss* COMMON)
|
||||||
arm9_exception_handlers.o(.bss* COMMON)
|
arm9_exception_handlers.o(.bss* COMMON)
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE (__itcm_end__ = ABSOLUTE(.));
|
PROVIDE (__itcm_end__ = .);
|
||||||
} >itcm AT>main
|
} >itcm :NONE
|
||||||
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = ALIGN(4);
|
|
||||||
|
|
||||||
/* .text */
|
/* .text */
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.text.*)
|
*(.text.*)
|
||||||
@ -86,7 +87,7 @@ SECTIONS
|
|||||||
/* .fini */
|
/* .fini */
|
||||||
KEEP( *(.fini) )
|
KEEP( *(.fini) )
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
} >main
|
} >main :main
|
||||||
|
|
||||||
.rodata :
|
.rodata :
|
||||||
{
|
{
|
||||||
@ -153,7 +154,7 @@ SECTIONS
|
|||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
} >main
|
} >main
|
||||||
|
|
||||||
.bss :
|
.bss (NOLOAD) :
|
||||||
{
|
{
|
||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
PROVIDE (__bss_start__ = ABSOLUTE(.));
|
PROVIDE (__bss_start__ = ABSOLUTE(.));
|
||||||
@ -164,7 +165,7 @@ SECTIONS
|
|||||||
*(COMMON)
|
*(COMMON)
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE (__bss_end__ = ABSOLUTE(.));
|
PROVIDE (__bss_end__ = ABSOLUTE(.));
|
||||||
} >main
|
} >main :NONE
|
||||||
__end__ = ABSOLUTE(.) ;
|
__end__ = ABSOLUTE(.) ;
|
||||||
|
|
||||||
/* ==================
|
/* ==================
|
||||||
|
Reference in New Issue
Block a user