PAYLOAD_DIR := payloads
OUTPUT_DIR := out

PAYLOADS := $(wildcard $(PAYLOAD_DIR)/*.S)
PAYLOADS_YAB :=\
	$(patsubst $(PAYLOAD_DIR)/%.S, $(OUTPUT_DIR)/%-95204.yab, $(PAYLOADS))\
	$(patsubst $(PAYLOAD_DIR)/%.S, $(OUTPUT_DIR)/%-95205.yab, $(PAYLOADS))\
	$(patsubst $(PAYLOAD_DIR)/%.S, $(OUTPUT_DIR)/%-95506.yab, $(PAYLOADS))

.PHONY: all
all: $(PAYLOADS_YAB)

$(OUTPUT_DIR)/%-95204.yab: $(OUTPUT_DIR)/%-95204.bin maker
	./maker 95204 $< $(patsubst $(OUTPUT_DIR)/%-95204.bin, $(PAYLOAD_DIR)/%.string, $<) > $@ || rm -rf $@

$(OUTPUT_DIR)/%-95205.yab: $(OUTPUT_DIR)/%-95205.bin maker
	./maker 95205 $< $(patsubst $(OUTPUT_DIR)/%-95205.bin, $(PAYLOAD_DIR)/%.string, $<) > $@ || rm -rf $@

$(OUTPUT_DIR)/%-95506.yab: $(OUTPUT_DIR)/%-95506.bin maker
	./maker 95506 $< $(patsubst $(OUTPUT_DIR)/%-95506.bin, $(PAYLOAD_DIR)/%.string, $<) > $@ || rm -rf $@

maker: maker.c Makefile
	clang maker.c -o maker -O2
	./maker 95204 > $(OUTPUT_DIR)/patches-95204.yab
	./maker 95205 > $(OUTPUT_DIR)/patches-95205.yab
	./maker 95506 > $(OUTPUT_DIR)/patches-95506.yab

$(OUTPUT_DIR)/%-95204.bin: $(OUTPUT_DIR)/%-95204.elf
	-ee-objcopy -O binary $< $@

$(OUTPUT_DIR)/%-95205.bin: $(OUTPUT_DIR)/%-95205.elf
	-ee-objcopy -O binary $< $@

$(OUTPUT_DIR)/%-95506.bin: $(OUTPUT_DIR)/%-95506.elf
	-ee-objcopy -O binary $< $@

$(OUTPUT_DIR)/%-95204.elf: $(PAYLOAD_DIR)/%.S $(OUTPUT_DIR)
	-ee-gcc -c -DVERSION=95204 $< -o $@ -nostartfiles -nostdlib

$(OUTPUT_DIR)/%-95205.elf: $(PAYLOAD_DIR)/%.S $(OUTPUT_DIR)
	-ee-gcc -c -DVERSION=95205 $< -o $@ -nostartfiles -nostdlib

$(OUTPUT_DIR)/%-95506.elf: $(PAYLOAD_DIR)/%.S $(OUTPUT_DIR)
	-ee-gcc -c -DVERSION=95506 $< -o $@ -nostartfiles -nostdlib

$(OUTPUT_DIR):
	mkdir $@

.PHONY: clean
clean:
	rm maker
	rm -rf $(OUTPUT_DIR)
