APP:=xnv
GOBIN := $(GOPATH)/bin
PKGER_BIN := $(GOBIN)/pkger
FRONTEND_DIR := ./frontend/build
FRONTEND_DEPS := ./frontend/node_modules
PLATFORMS = linux darwin windows 
OUTPUT_DIR := .bin
.SHELLARGS = -eou pipefail

build-all: $(OUTPUT_DIR)/linux/xnv $(OUTPUT_DIR)/windows/xnv.exe  $(OUTPUT_DIR)/darwin/xnv
linux: $(OUTPUT_DIR)/linux/xnv
darwin: $(OUTPUT_DIR)/darwin/xnv
windows: $(OUTPUT_DIR)/windows/xnv.exe

clean: 
	@rm -rf ./$(OUTPUT_DIR) ./pkged.go ./xnv  $(FRONTEND_DIR)

clobber: clean
	@rm -rf $(FRONTEND_DEPS)

.PHONY: clean clobber build-all darwin linux windows

$(OUTPUT_DIR)/xnv: pkged.go $(OUTPUT_DIR)
	go build -ldflags "-r ." -o $(OUTPUT_DIR)/xnv 

$(OUTPUT_DIR):
	mkdir -p $(OUTPUT_DIR)

$(OUTPUT_DIR)/%:
	mkdir -p $@

pkged.go: $(PKGER_BIN) $(FRONTEND_DIR)
	$(PKGER_BIN) -include /frontend/build -o /

$(PKGER_BIN):
	go get github.com/markbates/pkger/cmd/pkger

$(FRONTEND_DIR): $(FRONTEND_DEPS)
	cd frontend && npm run build

$(FRONTEND_DEPS):
	cd frontend && npm install

$(OUTPUT_DIR)/windows/xnv.exe: pkged.go $(OUTPUT_DIR)/windows 
	CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -v \
								-ldflags "-r=ultralight -H=windowsgui" -o $(OUTPUT_DIR)/windows/$(APP).exe
	curl https://ultralight-sdk.sfo2.cdn.digitaloceanspaces.com/ultralight-sdk-latest-win-x64.7z \
		-o $(OUTPUT_DIR)/windows/ultralight-sdk-latest-win-x64.7z && \
		7zr e -y -o'$(OUTPUT_DIR)/windows/' -i'!./bin/*.dll' -i'!./bin/*.so' -i'!./bin/*.lib' \
		$(OUTPUT_DIR)/windows/ultralight-sdk-latest-win-x64.7z

$(OUTPUT_DIR)/linux/xnv: pkged.go $(OUTPUT_DIR)/linux 
	CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -v -ldflags "-r=ultralight" -o $(OUTPUT_DIR)/linux/$(APP)
	curl https://ultralight-sdk.sfo2.cdn.digitaloceanspaces.com/ultralight-sdk-latest-linux-x64.7z \
		-o $(OUTPUT_DIR)/linux/ultralight-sdk-latest-linux-x64.7z && \
		7zr e -y -o'$(OUTPUT_DIR)/linux/' -i'!./bin/*.so' \
		$(OUTPUT_DIR)/linux/ultralight-sdk-latest-linux-x64.7z

$(OUTPUT_DIR)/darwin/xnv: pkged.go $(OUTPUT_DIR)/darwin
	CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -v -ldflags="-r ." -o $(OUTPUT_DIR)/darwin/$(APP)
	curl https://ultralight-sdk.sfo2.cdn.digitaloceanspaces.com/ultralight-sdk-latest-mac-x64.7z \
		-o $(OUTPUT_DIR)/darwin/ultralight-sdk-latest-mac-x64.7z && \
		7zr e -y -o'$(OUTPUT_DIR)/darwin/' -i'!./bin/*.dylib' \
		$(OUTPUT_DIR)/darwin/ultralight-sdk-latest-mac-x64.7z
	@echo 'to run do:'
	@echo 'LD_LIBRARY_PATH=$$PWD/.bin/darwin'