summaryrefslogtreecommitdiff
path: root/Makefile
blob: 688748f5c9d0209b424b2a7e8fb11e45a212a3e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
include config.mk

BUILDBASE := build
BUILD := $(BUILDBASE)/$(BUILD_NAME)

MD5 := md5sum -c
PYTHON := python
PYTHON3 := python3.6

RGBASM := rgbasm -D$(GAME_VERSION)=1 -DDEBUG=$(DEBUG)
RGBGFX := rgbgfx
RGBLINK := rgblink
RGBFIX := rgbfix

RGBASMFLAGS := -h -E -i $(BUILD)/
tools/gfx :=
tools/make_shim :=

ROM := poke$(BUILD_NAME)_spaceworld.gb
ROMS := pokegold_spaceworld.gb pokesilver_spaceworld.gb pokegold_debug_spaceworld.gb pokesilver_debug_spaceworld.gb
BASEROM := baserom_$(BUILD_NAME).gb
DIRS := home engine data audio
OBJS := $(addprefix $(BUILD)/, gfx.o sram.o wram.o hram.o shim.o)
SHIM := shim_$(BUILD_NAME).sym
CORRECTEDROM := $(ROM:%.gb=%-correctheader.gb)
CORRECTEDROMS := $(ROMS:%.gb=%-correctheader.gb)

rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2))
OBJS += $(patsubst %.asm, $(BUILD)/%.o, $(call rwildcard, $(DIRS), *.asm))

GFX := $(patsubst %.png, $(BUILD)/%.2bpp, \
       $(patsubst %.1bpp.png, $(BUILD)/%.1bpp, \
       $(patsubst gfx/pokemon/%/front.png, $(BUILD)/gfx/pokemon/%/front.pic, \
       $(patsubst gfx/pokemon/%/back.png, $(BUILD)/gfx/pokemon/%/back.pic, \
       $(patsubst gfx/trainer/%.png, $(BUILD)/gfx/trainer/%.pic, \
       $(call rwildcard, gfx, *.png))))))

.SECONDEXPANSION:

.PHONY: all
all: $(ROM) $(CORRECTEDROM) coverage
.PHONY: tools
tools tools/pkmncompress tools/gfx:
	$(MAKE) -C tools/

# Remove files generated by the build process.
.PHONY: clean
clean:
	rm -rf $(ROMS) $(BUILDBASE) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) $(CORRECTEDROMS)
	make -C tools clean

# Remove files except for graphics.
.PHONY: mostlyclean
mostlyclean:
	rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) $(CORRECTEDROMS)
	find . \( -iname '*.d' \) -exec rm {} +

$(ROM): $(OBJS)
	$(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^
	$(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2$(GAME_VERSION)" $@
	-$(PYTHON3) sort_sym.py $(@:.gb=.sym)

$(BUILD)/shim.asm: $(SHIM) | $$(dir $$@)
	tools/make_shim -w $< > $@
$(CORRECTEDROM): %-correctheader.gb: %.gb
	cp $< $@
	$(RGBFIX) -f hg -m 0x10 $@

.PHONY: coverage
coverage: $(ROM)
	$(PYTHON3) tools/disasm_coverage.py -m $(ROM:.gb=.map) -b 0x40

$(BUILD)/gfx.o: | $(GFX)
$(BUILD)/%.o: $(BUILD)/%.asm | $$(dir $$@)
	$(RGBASM) $(RGBASMFLAGS) -M $(@:.o=.d) $(OUTPUT_OPTION) $<
$(BUILD)/%.o: %.asm | $$(dir $$@)
	$(RGBASM) $(RGBASMFLAGS) -M $(@:.o=.d) $(OUTPUT_OPTION) $<

$(BUILD)/gfx/sgb/sgb_border_alt.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/sgb/sgb_border_gold.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/sgb/sgb_border_silver.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/title/title_gold.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/title/title_silver.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/trainer_card/leaders.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/trainer_card/trainer_card.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/minigames/slots.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/minigames/poker.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/intro/purin_pikachu.2bpp: tools/gfx += --trim-whitespace

.PRECIOUS: $(BUILD)/%.pic
$(BUILD)/%.pic: $(BUILD)/%.2bpp tools/pkmncompress | $$(dir $$@)
	tools/pkmncompress $< $@

.PRECIOUS: $(BUILD)/%.2bpp
$(BUILD)/%.2bpp: %.png tools/gfx | $$(dir $$@)
	$(RGBGFX) $(OUTPUT_OPTION) $<
	tools/gfx $(tools/gfx) $(OUTPUT_OPTION) $@

.PRECIOUS: $(BUILD)/%.1bpp
$(BUILD)/%.1bpp: %.1bpp.png tools/gfx | $$(dir $$@)
	$(RGBGFX) -d1 $(OUTPUT_OPTION) $<
	tools/gfx $(tools/gfx) -d1 $(OUTPUT_OPTION) $@

.PRECIOUS: $(BUILD)/%.tilemap
$(BUILD)/%.tilemap: %.png | $$(dir $$@)
	$(RGBGFX) -t $@ $<

.PRECIOUS: %/
%/:
	mkdir -p $@

-include $(call rwildcard, $(BUILD)/, *.d)

gold:         ; @$(MAKE) GAME_VERSION=GOLD
gold_debug:   ; @$(MAKE) GAME_VERSION=GOLD DEBUG=1
silver:       ; @$(MAKE) GAME_VERSION=SILVER
silver_debug: ; @$(MAKE) GAME_VERSION=SILVER DEBUG=1
compare: ;
	@$(MAKE) GAME_VERSION=GOLD COMPARE=1
	@$(MAKE) GAME_VERSION=GOLD DEBUG=1 COMPARE=1
	@$(MAKE) GAME_VERSION=SILVER COMPARE=1
	@$(MAKE) GAME_VERSION=SILVER DEBUG=1 COMPARE=1
	@$(MD5) roms.md5