export BASEDIR := $(CURDIR)


ifndef SITE
$(error SITE is not set. Please Specify a site directory.)
else
export SITEDIR := $(abspath $(SITE))
endif


export BUILDDIR = $(BASEDIR)/build
export DISTDIR = $(BASEDIR)/dist


# Find devices
DEVICES := $(sort $(notdir $(wildcard $(SITEDIR)/devices/*) $(wildcard $(BASEDIR)/devices/*)))


.PHONY: all
all: $(DEVICES)


.PHONY: $(addsuffix /clean,$(DEVICES))
$(addsuffix /clean,$(DEVICES)): %/clean:
	mkdir -p $(BUILDDIR)/$*
	$(MAKE) -C $(BUILDDIR)/$* -f $(BASEDIR)/Device.mk DEVICE=$* clean


.PHONY: $(addsuffix /build,$(DEVICES))
$(addsuffix /build,$(DEVICES)): %/build:
	mkdir -p $(BUILDDIR)/$*
	$(MAKE) -C $(BUILDDIR)/$* -f $(BASEDIR)/Device.mk DEVICE=$*


.PHONY: $(addsuffix /erase,$(DEVICES))
$(addsuffix /erase,$(DEVICES)): %/erase: %/build
	$(MAKE) -C $(BUILDDIR)/$* -f $(BASEDIR)/Device.mk DEVICE=$* flashinit


.PHONY: $(addsuffix /flash,$(DEVICES))
$(addsuffix /flash,$(DEVICES)): %/flash: %/build
	$(MAKE) -C $(BUILDDIR)/$* -f $(BASEDIR)/Device.mk DEVICE=$* flash


.PHONY: $(addsuffix /dist,$(DEVICES))
$(addsuffix /dist,$(DEVICES)): %/dist: %/build
	mkdir -p $(DISTDIR)
	cp $(BUILDDIR)/$*/out/firmware/rboot.bin $(DISTDIR)/$*.rboot
	cp $(BUILDDIR)/$*/out/firmware/rom0.bin $(DISTDIR)/$*.rom0
	cp $(BUILDDIR)/$*/out/firmware/rom1.bin $(DISTDIR)/$*.rom1
	cp $(BUILDDIR)/$*/out/firmware/version $(DISTDIR)/$*.version


.PHONY: $(DEVICES)
$(DEVICES): %: %/build %/dist


.PHONY: clean
clean:
	rm -f -r $(BUILDDIR) $(DISTDIR)