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