# Makefile for building sketch with embedded assets
#
# Two-layer architecture:
# 1. Linux binary ("innie") - runs in container, embeds webui assets
# 2. Native binary ("outie") - runs on user's machine, embeds innie

# Allow overriding some env vars, used by GoReleaser
BUILT_BY ?= make
SKETCH_VERSION ?=
GOOS ?= $(shell go env GOOS)
GOARCH ?= $(shell go env GOARCH)

export BUILT_BY
export SKETCH_VERSION
export GOOS
export GOARCH
export LDFLAGS := -X main.builtBy=$(BUILT_BY) -X main.release=$(SKETCH_VERSION)

.PHONY: all clean outie innie webui

all: outie

outie: innie
	./build/outie.sh

innie: webui
	./build/innie.sh

webui:
	./build/webui.sh

clean:
	./build/clean.sh



# DODO

repo_name ?= giolekva
podman ?= docker
docker_flags=--provenance=false --sbom=false
ifeq ($(podman), podman)
manifest_dest=docker://docker.io/$(repo_name)/sketch:latest
endif

# clean:
# 	rm -f sketch

build_arm64: export CGO_ENABLED=0
build_arm64: export GO111MODULE=on
build_arm64: export GOOS=linux
build_arm64: export GOARCH=arm64
build_arm64:
	make
	cp sketch sketch_arm64

build_amd64: export CGO_ENABLED=0
build_amd64: export GO111MODULE=on
build_amd64: export GOOS=linux
build_amd64: export GOARCH=amd64
build_amd64:
	make
	cp sketch sketch_amd64

push_arm64: clean build_arm64
	$(podman) build --platform linux/arm64 --tag=$(repo_name)/sketch:arm64 $(docker_flags) .
	$(podman) push $(repo_name)/sketch:arm64

push_amd64: clean build_amd64
	$(podman) build --platform linux/amd64 --tag=$(repo_name)/sketch:amd64 $(docker_flags) .
	$(podman) push $(repo_name)/sketch:amd64

push: push_arm64 push_amd64
	$(podman) manifest create $(repo_name)/sketch:latest $(repo_name)/sketch:arm64 $(repo_name)/sketch:amd64
	$(podman) manifest push --purge $(repo_name)/sketch:latest $(manifest_dest)
