# `taskset -c 0-11` caps cargo to 12 cores so the build does
# not saturate CI runners. Override empty to
# disable on machines without taskset (macOS, BSDs, sandboxes):
#   make TASKSET= build-debug
TASKSET ?= taskset -c 0-11

.PHONY: build build-rust build-debug build-release-opt check-fmt dev dev-build \
        internal-dev-install test test\:smoke test\:suite

build: build-rust

build-rust:
	$(TASKSET) wasm-pack build --scope nymproject --target web

build-debug:
	$(TASKSET) wasm-pack build --debug --scope nymproject --target web --features debug

build-release-opt:
	$(TASKSET) wasm-pack build --scope nymproject --target web
	$(TASKSET) wasm-opt -Oz -o pkg/smolmix_wasm_bg.wasm pkg/smolmix_wasm_bg.wasm

check-fmt:
	cargo fmt --check
	cargo clippy --target wasm32-unknown-unknown -- -Dwarnings
	cargo clippy --target wasm32-unknown-unknown --features debug -- -Dwarnings

dev: build-debug
	cd internal-dev && ./node_modules/.bin/webpack serve --open

# Build the internal-dev webpack bundle for Playwright.
dev-build: build-debug
	cd internal-dev && ./node_modules/.bin/webpack --mode production

# One-time setup for internal-dev. Run this after fresh clone or when
# internal-dev/package.json changes. Standalone install (no workspace walk).
internal-dev-install:
	cd internal-dev && pnpm install --ignore-workspace

# Playwright tests (headless browser).
# Prereqs: make dev-build && cd tests && pnpm install && pnpm exec playwright install
# IPR_ADDRESS env var is optional; tests fall back to the default in
# internal-dev/index.html / internal-dev/headless.js when unset.
test\:smoke:
	cd tests && pnpm exec playwright test --project=smoke-chromium --project=smoke-firefox --project=smoke-webkit

test\:suite:
	cd tests && pnpm exec playwright test --project=suite-chromium --project=suite-firefox --project=suite-webkit

test:
	cd tests && pnpm exec playwright test
