f6b89a35c32748a9374bc015a11dad7bf3781f20
[gbajam22] / Makefile
1 src = $(wildcard src/*.c) $(wildcard src/gba/*.c)
2 ssrc = $(wildcard src/*.s) $(wildcard src/gba/*.s) data/lut.s
3 obj = $(src:.c=.arm.o) $(ssrc:.s=.arm.o)
4 dep = $(src:.c=.arm.d)
5 name = voxelburg
6 elf = $(name).elf
7 bin = $(name).gba
8
9 data = data/color.raw data/color.pal data/color.gpal data/height.raw \
10            data/spr_game.raw data/spr_game.pal data/spr_game.gpal \
11            data/spr_logo.raw data/spr_logo.pal \
12            data/menuscr.raw data/menuscr.pal data/menuscr.gpal \
13            data/spr_menu.raw data/spr_menu.pal
14
15 libs = libs/maxmod/libmm.a
16
17 TCPREFIX = arm-none-eabi-
18
19 CPP = $(TCPREFIX)cpp
20 CC = $(TCPREFIX)gcc
21 AS = $(TCPREFIX)as
22 OBJCOPY = $(TCPREFIX)objcopy
23 OBJDUMP = $(TCPREFIX)objdump
24
25 def = -DBUILD_GBA
26 opt = -O3 -fomit-frame-pointer -mcpu=arm7tdmi -mtune=arm7tdmi -mthumb -mthumb-interwork
27 dbg = -g
28 inc = -I. -Isrc -Isrc/gba -Ilibs/maxmod
29 warn = -pedantic -Wall
30
31 CFLAGS = $(opt) $(dbg) $(warn) -MMD $(def) $(inc)
32 ASFLAGS = -mthumb-interwork
33 LDFLAGS = -mthumb -mthumb-interwork $(libs) -lm
34
35 -include cfg.mk
36
37 .PHONY: all
38 all: $(bin) $(bin_mb)
39
40 $(bin): $(elf)
41         $(OBJCOPY) -O binary $(elf) $(bin)
42         gbafix -r0 $(bin)
43
44 $(elf): $(obj) $(libs)
45         $(CC) -o $(elf) $(obj) -specs=gba.specs -Wl,-Map,link.map $(LDFLAGS)
46
47 -include $(dep)
48
49 %.arm.o: %.c
50         $(CC) -o $@ $(CFLAGS) -c $<
51
52 %.arm.o: %.s
53         $(AS) -o $@ $(ASFLAGS) $<
54
55 src/data.o: src/data.s $(data)
56 src/data.arm.o: src/data.s $(data)
57
58 tools/pngdump/pngdump:
59         $(MAKE) -C tools/pngdump
60
61 tools/meshdump/meshdump:
62         $(MAKE) -C tools/meshdump
63
64 tools/lutgen: tools/lutgen.c
65         cc -o $@ $< -lm
66
67 tools/vistab: tools/vistab.c
68         cc -o $@ $< -lm
69
70 tools/mmutil/mmutil:
71         $(MAKE) -C tools/mmutil
72
73 #data/spr_game.raw: data/spr_ui.png data/spr_hud.png
74 #       tools/pngdump/pngdump -o $@ -n $^
75
76 %.sraw: %.png tools/pngdump/pngdump
77         tools/pngdump/pngdump -o $@ -oc $(subst .sraw,.spal,$@) -os $(subst .sraw,.shade,$@) -s 8 $<
78
79 %.raw: %.png tools/pngdump/pngdump
80         tools/pngdump/pngdump -o $@ -n $<
81
82 %.pal: %.png tools/pngdump/pngdump
83         tools/pngdump/pngdump -o $@ -c $<
84
85 %.gpal: %.png tools/pngdump/pngdump
86         tools/pngdump/pngdump -o $@ -c -g $<
87
88 %.555: %.png tools/pngdump/pngdump
89         tools/pngdump/pngdump -o $@ -555 $<
90
91 data/lut.s: tools/lutgen
92         tools/lutgen >$@
93
94 data/snd.bin: $(audata) tools/mmutil/mmutil
95         tools/mmutil/mmutil -o$@ -hdata/snd.h $(audata)
96
97 data/snd.h: data/snd.bin
98
99 .PHONY: clean
100 clean:
101         rm -f $(obj) $(bin) $(bin_mb) $(elf) $(elf_mb)
102
103 .PHONY: cleandep
104 cleandep:
105         rm -f $(dep)
106
107 .PHONY: cleanlibs
108 cleanlibs:
109         $(MAKE) -C libs/maxmod clean
110
111 .PHONY: install
112 install: $(bin)
113         if2a -n -f -W $<
114
115 .PHONY: run
116 run: $(bin)
117         mgba -3 --log-level=16 $(bin)
118
119 .PHONY: debug
120 debug: $(elf)
121         mgba -2 -g $(bin) &
122         $(TCPREFIX)gdb -x gdbmgba $<
123
124 .PHONY: disasm
125 disasm: $(elf)
126         $(OBJDUMP) -d $< >$@
127
128 .PHONY: libs
129 libs: $(libs)
130
131 libs/maxmod/libmm.a:
132         $(MAKE) -C libs/maxmod
133
134
135 .PHONY: pc
136 pc:
137         $(MAKE) -f Makefile.pc