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