BUNDLE_NAME = bundle.lua
HAXE_NAME = haxe.lua
MINIFYD_NAME = bundle.min.lua
HAXE_ZIP_NAME = "haxe.zip"
UNPACK_NAME = unpack.lua
UNPACK_POLYFILLED_NAME = unpack.polyfill.lua
UNPACK_MINIFYD_NAME = unpack.min.lua
BUILD_DIR = build
HAXE_FLAGS =
POLYFILLED_NAME = bundle.polyfill.lua
POLYFILL_SRC = src/polyfill.lua
CREAFTOS_PATH = craftos
BUILD_HXML = build.hxml

HAXE_PATH := $(BUILD_DIR)/$(HAXE_NAME)
MIN_PATH := $(BUILD_DIR)/$(MINIFYD_NAME)
POLYFILL_PATH := $(BUILD_DIR)/$(POLYFILLED_NAME)
UNPACK_PATH := $(BUILD_DIR)/$(UNPACK_NAME)
UNPACK_MINIFYD_PATH := $(BUILD_DIR)/$(UNPACK_MINIFYD_NAME)
HAXE_ZIP_PATH := $(BUILD_DIR)/$(HAXE_ZIP_NAME)
UNPACK_POLYFILLED_PATH := $(BUILD_DIR)/$(UNPACK_POLYFILLED_NAME)

all: clean build unpack

build: HAXE_FLAGS += -D analyzer-optimize --no-traces
build: $(MIN_PATH)

debug: HAXE_FLAGS += -D webconsole -D error_stack --debug 
debug: $(MIN_PATH)

unpack: $(UNPACK_MINIFYD_PATH) $(HAXE_ZIP_PATH)

$(HAXE_PATH): HAXE_FLAGS += --main kernel.Entrypoint --lua $(HAXE_PATH) 
$(HAXE_PATH): $(shell find src -name '*.hx')
	haxe $(BUILD_HXML) $(HAXE_FLAGS)

$(POLYFILL_PATH): $(POLYFILL_SRC) $(HAXE_PATH)
	cat $(POLYFILL_SRC) $(HAXE_PATH) > $@

$(MIN_PATH): $(POLYFILL_PATH)
	node tools/minify.js < $(POLYFILL_PATH) > $@

$(HAXE_ZIP_PATH): $(MIN_PATH)
	node tools/zlibDeflate.js < $(MIN_PATH) > $@

$(UNPACK_PATH): HAXE_FLAGS += --main Unpack -D analyzer-optimize --lua $(UNPACK_PATH)
$(UNPACK_PATH): $(shell find src -name '*.hx')
	haxe $(BUILD_HXML) $(HAXE_FLAGS)

$(UNPACK_POLYFILLED_PATH): $(UNPACK_PATH)
	cat $(POLYFILL_SRC) $(UNPACK_PATH) > $@

$(UNPACK_MINIFYD_PATH): $(UNPACK_POLYFILLED_PATH)
	node tools/minify.js < $(UNPACK_POLYFILLED_PATH) > $@

.PHONY: deps
deps: deps-hx deps-node

.PHONY: deps-hx
deps-hx:
	haxelib install all --always

.PHONY: deps-node
deps-node:
	yarn install

.PHONY: clean
clean:
	rm -rf $(BUILD_DIR)
	mkdir $(BUILD_DIR)

.PHONY: watch
watch:
	find src | entr make debug

.PHONY: emulator
emulator:
	$(CREAFTOS_PATH) --mount-ro /=$(shell pwd)/$(BUILD_DIR) 

.PHONY: webconsole
webconsole:
	node tools/console.js

.PHONY: format
format:
	haxelib run formatter -s src

.PHONY: format-deps
format-deps:
	haxelib install formatter