MOXIE    ?= $(CURDIR)/../moxie/moxie
MOXIEJS  ?= $(CURDIR)/../moxie/moxiejs
MOXIEROOT ?= $(CURDIR)/../moxie
JSRUNTIME ?= $(CURDIR)/../moxie/jsruntime
ISKRA    ?= $(HOME)/.local/bin/moxie-iskra
# Use installed moxie for relay-proxy: the smesh crypto package refactor changed
# which packages are transitively linked, and the installed binary has correctly
# optimized cached package bitcode for relay-proxy. Building fresh with any current
# compiler version produces 780KB with too much recursion during _start().
# The root cause is GOCACHE invalidation from the crypto refactor; the installed
# binary's cache predates it and produces correct 431KB output.
MOXIE_RELAY_PROXY ?= $(HOME)/.local/bin/moxie

# === Relay (native) ===
build-relay:
	MOXIEROOT=$(MOXIEROOT) $(MOXIE) build -o smesh .

# === Frontend (WASM) ===
build-app-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/app.wasm ./web/wasm/app/

build-relay-proxy-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE_RELAY_PROXY) build -target wasm -o $(CURDIR)/web/static/relay-proxy.wasm ./web/wasm/relay-proxy/

build-store-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/store.wasm ./web/wasm/store/

build-verify-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/verify.wasm ./web/wasm/verify/

build-profile-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/profile.wasm ./web/wasm/profile/

build-feed-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/feed.wasm ./web/wasm/feed/

build-dm-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/dm.wasm ./web/wasm/dm/

build-mls-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/mls.wasm ./web/wasm/mls/


build-notif-wasm:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/notif.wasm ./web/wasm/notif/

build-sw:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/\$$sw/sw.wasm ./web/wasm/sw/

# === Signer WASM (page-embedded worker) ===
# The web app uses signer.wasm directly via signer-wasm-host.mjs.
# No browser extension is required for normal operation.
build-signer:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -o $(CURDIR)/web/static/signer.wasm ./web/wasm/signer/

# Extension build (optional, not part of default build).
build-ext-firefox: build-signer
	cp $(CURDIR)/web/static/signer.wasm $(CURDIR)/web/ext/bg/signer.wasm
	bash scripts/pack-ext.sh firefox
	cp dist/smesh-signer-firefox.xpi web/static/smesh-signer.xpi

build-ext: build-ext-firefox

# === All ===
build: build-relay build-app-wasm build-relay-proxy-wasm build-store-wasm build-verify-wasm build-profile-wasm build-feed-wasm build-mls-wasm build-notif-wasm build-signer build-sw

# === Test ===
build-test-relay:
	MOXIEROOT=$(MOXIEROOT) $(MOXIE) build -o smesh-test .

test-signer: build-signer
	node web/_test/signertest/run.mjs web/ext/bg/signer.wasm

test: build-test-relay test-signer
	python3 -m pytest test/ -v --tb=short -x

test-smoke: build-test-relay
	python3 -m pytest test/test_smoke.py -v --tb=short

build-app-wasm-instrumented:
	MOXIEROOT=$(MOXIEROOT) GOWORK=off $(MOXIE) build -target wasm -tags alloc_trace -print-allocs "web/wasm/app" \
		-o $(CURDIR)/web/static/app.wasm ./web/wasm/app/

test-memory: build-test-relay build-app-wasm-instrumented
	python3 -m pytest test/test_memory_profile.py -v --tb=short -m memory

# === Dev (frontend only, relay already running) ===
dev: build-app-wasm build-relay-proxy-wasm build-store-wasm build-verify-wasm build-profile-wasm build-feed-wasm build-mls-wasm build-notif-wasm build-sw

.PHONY: build-relay build-app-wasm build-relay-proxy-wasm build-store-wasm build-verify-wasm build-profile-wasm build-feed-wasm build-mls-wasm build-notif-wasm build-sw build-signer build-ext-firefox build-ext-chrome build-ext build dev build-test-relay test-signer test test-smoke build-app-wasm-instrumented test-memory
