Skip to content

Commit 5196869

Browse files
committed
Bring our own chainloader for *hax
1 parent 083806b commit 5196869

36 files changed

+8818
-161
lines changed

.gitmodules

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1-
[submodule "CakeBrah"]
2-
path = CakeBrah
3-
url = https://github.com/mid-kid/CakeBrah
1+
[submodule "haxloader/CakeBrah"]
2+
path = haxloader/CakeBrah
3+
url = https://github.com/mid-kid/CakeBrah.git
4+
[submodule "haxloader/CakeHax"]
5+
path = haxloader/CakeHax
6+
url = https://github.com/mid-kid/CakeHax.git
7+
[submodule "haxloader/CakesROP"]
8+
path = haxloader/CakesROP
9+
url = https://github.com/mid-kid/CakesROP.git

CakeBrah

Lines changed: 0 additions & 1 deletion
This file was deleted.

Makefile

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@ dir_injector := injector
2222
dir_exceptions := exceptions
2323
dir_arm9_exceptions := $(dir_exceptions)/arm9
2424
dir_arm11_exceptions := $(dir_exceptions)/arm11
25-
dir_cakebrah := CakeBrah
26-
dir_diffs := diffs
25+
dir_haxloader := haxloader
2726
dir_build := build
2827
dir_out := out
2928

3029
ASFLAGS := -mcpu=arm946e-s
3130
CFLAGS := -Wall -Wextra -MMD -MP -marm $(ASFLAGS) -fno-builtin -fshort-wchar -std=c11 -Wno-main -O2 -flto -ffast-math
3231
LDFLAGS := -nostartfiles
33-
FLAGS := name=$(name).dat dir_out=$(abspath $(dir_out)) ICON=$(abspath icon.png) APP_DESCRIPTION="Noob-friendly 3DS CFW." APP_AUTHOR="Aurora Wright/TuxSH" --no-print-directory
3432

3533
objects = $(patsubst $(dir_source)/%.s, $(dir_build)/%.o, \
3634
$(patsubst $(dir_source)/%.c, $(dir_build)/%.o, \
@@ -46,23 +44,22 @@ define bin2o
4644
endef
4745

4846
.PHONY: all
49-
all: a9lh cakebrah menuhax
47+
all: a9lh haxloader
5048

5149
.PHONY: release
5250
release: $(dir_out)/$(name)$(revision).7z
5351

54-
.PHONY: menuhax
55-
menuhax: $(dir_out)/menuhax/boot.3dsx
56-
57-
.PHONY: cakebrah
58-
cakebrah: $(dir_out)/3ds/$(name)
59-
6052
.PHONY: a9lh
6153
a9lh: $(dir_out)/arm9loaderhax.bin
6254

55+
.PHONY: haxloader
56+
haxloader: a9lh
57+
@mkdir -p $(dir_out)
58+
@$(MAKE) -C $(dir_haxloader)
59+
6360
.PHONY: clean
6461
clean:
65-
@$(MAKE) $(FLAGS) -C $(dir_cakebrah) clean
62+
@$(MAKE) $(FLAGS) -C $(dir_haxloader) clean
6663
@$(MAKE) -C $(dir_loader) clean
6764
@$(MAKE) -C $(dir_arm9_exceptions) clean
6865
@$(MAKE) -C $(dir_arm11_exceptions) clean
@@ -71,23 +68,12 @@ clean:
7168

7269
.PRECIOUS: $(dir_build)/%.bin
7370

74-
$(dir_out):
75-
@mkdir -p "$(dir_out)"
71+
$(dir_out) $(dir_build):
72+
@mkdir -p "$@"
7673

7774
$(dir_out)/$(name)$(revision).7z: all
7875
@7z a -mx $@ ./$(@D)/* ./$(dir_exceptions)/exception_dump_parser.py
7976

80-
$(dir_out)/menuhax/boot.3dsx: $(dir_diffs) $(dir_out)
81-
@mkdir -p "$(@D)"
82-
@cd $(dir_cakebrah); patch -p1 < ../$(dir_diffs)/1.diff; patch -p1 < ../$(dir_diffs)/2.diff; $(MAKE) $(FLAGS); git reset --hard
83-
@mv $(dir_out)/$(name).3dsx $@
84-
@rm $(dir_out)/$(name).smdh
85-
86-
$(dir_out)/3ds/$(name): $(dir_diffs) $(dir_out)
87-
@mkdir -p "$@"
88-
@cd $(dir_cakebrah); patch -p1 < ../$(dir_diffs)/1.diff; $(MAKE) $(FLAGS); git reset --hard
89-
@mv $(dir_out)/$(name).3dsx $(dir_out)/$(name).smdh $@
90-
9177
$(dir_out)/arm9loaderhax.bin: $(dir_build)/main.bin $(dir_out)
9278
@cp -a $(dir_build)/main.bin $@
9379

@@ -98,27 +84,21 @@ $(dir_build)/main.elf: $(bundled) $(objects)
9884
$(LINK.o) -T linker.ld $(OUTPUT_OPTION) $^
9985

10086
$(dir_build)/%.bin.o: $(dir_build)/%.bin
101-
@mkdir -p "$(@D)"
10287
@$(bin2o)
10388

104-
$(dir_build)/injector.bin: $(dir_injector)/Makefile
105-
@mkdir -p "$(@D)"
106-
@$(MAKE) -C $(dir_injector)
89+
$(dir_build)/injector.bin: $(dir_injector) $(dir_build)
90+
@$(MAKE) -C $<
10791

108-
$(dir_build)/loader.bin: $(dir_loader)/Makefile
109-
@mkdir -p "$(@D)"
110-
@$(MAKE) -C $(dir_loader)
92+
$(dir_build)/loader.bin: $(dir_loader) $(dir_build)
93+
@$(MAKE) -C $<
11194

112-
$(dir_build)/arm9_exceptions.bin: $(dir_arm9_exceptions)/Makefile
113-
@mkdir -p "$(@D)"
114-
@$(MAKE) -C $(dir_arm9_exceptions)
95+
$(dir_build)/arm9_exceptions.bin: $(dir_arm9_exceptions) $(dir_build)
96+
@$(MAKE) -C $<
11597

116-
$(dir_build)/arm11_exceptions.bin: $(dir_arm11_exceptions)/Makefile
117-
@mkdir -p "$(@D)"
118-
@$(MAKE) -C $(dir_arm11_exceptions)
98+
$(dir_build)/arm11_exceptions.bin: $(dir_arm11_exceptions) $(dir_build)
99+
@$(MAKE) -C $<
119100

120-
$(dir_build)/%.bin: $(dir_patches)/%.s
121-
@mkdir -p "$(@D)"
101+
$(dir_build)/%.bin: $(dir_patches)/%.s $(dir_build)
122102
@armips $<
123103

124104
$(dir_build)/memory.o $(dir_build)/strings.o: CFLAGS += -O3

diffs/1.diff

Lines changed: 0 additions & 116 deletions
This file was deleted.

haxloader/CakeHax

Submodule CakeHax added at 5245c7b

haxloader/CakesROP

Submodule CakesROP added at b14debb

haxloader/Makefile

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2))
2+
3+
ifeq ($(strip $(DEVKITARM)),)
4+
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
5+
endif
6+
7+
include $(DEVKITARM)/3ds_rules
8+
9+
CC := arm-none-eabi-gcc
10+
AS := arm-none-eabi-as
11+
LD := arm-none-eabi-ld
12+
OC := arm-none-eabi-objcopy
13+
14+
name := Luma3DS
15+
16+
dir_source := source
17+
dir_cakebrah := CakeBrah
18+
dir_cakehax := CakeHax
19+
dir_cakesrop := CakesROP
20+
dir_build := build
21+
dir_out := ../out
22+
23+
ASFLAGS := -mcpu=arm946e-s
24+
CFLAGS := -Wall -Wextra -MMD -MP -marm $(ASFLAGS) -fno-builtin -fshort-wchar -std=c11 -Wno-main -O2 -flto -ffast-math
25+
LDFLAGS := -nostartfiles
26+
FLAGS := name=$(name).dat dir_out=$(abspath $(dir_out)) ICON=$(abspath icon.png) APP_DESCRIPTION="Noob-friendly 3DS CFW." APP_AUTHOR="Aurora Wright/TuxSH" --no-print-directory
27+
ROP_FLAGS := DATNAME=$(name).dat DISPNAME=$(name).dat GRAPHICS=../data/
28+
29+
objects = $(patsubst $(dir_source)/%.s, $(dir_build)/%.o, \
30+
$(patsubst $(dir_source)/%.c, $(dir_build)/%.o, \
31+
$(call rwildcard, $(dir_source), *.s *.c)))
32+
33+
.PHONY: all
34+
all: $(dir_out)/$(name).dat $(dir_out)/3ds/$(name) $(dir_out)/menuhax/boot.3dsx $(dir_out)/$(name).nds
35+
36+
.PHONY: clean
37+
clean:
38+
@$(MAKE) $(FLAGS) -C $(dir_cakebrah) clean
39+
@$(MAKE) $(FLAGS) -C $(dir_cakehax) clean
40+
@$(MAKE) $(ROP_FLAGS) -C $(dir_cakesrop) clean
41+
@rm -rf $(dir_build)
42+
43+
$(dir_out)/$(name).dat: $(dir_build)/main.bin
44+
@$(MAKE) $(FLAGS) -C $(dir_cakehax) launcher
45+
@dd if=$(dir_build)/main.bin of=$@ bs=512 seek=144
46+
47+
$(dir_out)/3ds/$(name):
48+
@mkdir -p "$@"
49+
@$(MAKE) $(FLAGS) -C $(dir_cakebrah)
50+
@mv $(dir_out)/$(name).3dsx $(dir_out)/$(name).smdh $@
51+
52+
$(dir_out)/menuhax/boot.3dsx: menuhax.diff
53+
@mkdir -p "$(@D)"
54+
@cd $(dir_cakebrah); patch -p1 < ../menuhax.diff; $(MAKE) $(FLAGS); git reset --hard
55+
@mv $(dir_out)/$(name).3dsx $@
56+
@rm $(dir_out)/$(name).smdh
57+
58+
$(dir_out)/$(name).nds:
59+
@$(MAKE) $(ROP_FLAGS) -C $(dir_cakesrop)
60+
@mv $(dir_cakesrop)/CakesROP.nds $@
61+
62+
$(dir_build)/main.bin: $(dir_build)/main.elf
63+
$(OC) -S -O binary $< $@
64+
65+
$(dir_build)/main.elf: $(objects) ../$(dir_build)/loader.bin.o
66+
$(LINK.o) -T linker.ld $(OUTPUT_OPTION) $^
67+
68+
$(dir_build)/memory.o: CFLAGS += -O3
69+
70+
$(dir_build)/%.o: $(dir_source)/%.c $(bundled)
71+
@mkdir -p "$(@D)"
72+
$(COMPILE.c) $(OUTPUT_OPTION) $<
73+
74+
$(dir_build)/%.o: $(dir_source)/%.s
75+
@mkdir -p "$(@D)"
76+
$(COMPILE.s) $(OUTPUT_OPTION) $<
77+
include $(call rwildcard, $(dir_build), *.d)

haxloader/data/drunkenlogo.grit

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-W3
2+
# disable alpha and set opaque bit for all pixels
3+
-gT!
4+
5+
# use lz77 compression
6+
-gzl
7+
8+
# 16 bit bitmap
9+
-gB16
10+
11+
-gb

haxloader/data/drunkenlogo.png

17.9 KB
Loading

haxloader/data/loader/Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
LD := arm-none-eabi-ld
2+
AS := arm-none-eabi-as
3+
OC := arm-none-eabi-objcopy
4+
XXD := xxd
5+
6+
all: loader.h
7+
8+
loader.o: loader.s
9+
$(AS) -o $@ $<
10+
11+
loader.elf: loader.o
12+
$(LD) -T stub.ld -o $@ $<
13+
14+
loader.bin: loader.elf
15+
$(OC) -O binary $< $@
16+
17+
loader.h: loader.bin
18+
$(XXD) -i $< > $@
19+
@rm -f *.elf *.o
20+
@echo built loader
21+
22+
.PHONY: clean
23+
clean:
24+
@rm -f *.h *.bin *.elf *.o
25+
@echo cleaned loader

0 commit comments

Comments
 (0)