PACKAGES := assets game server client ui APPS := server client OBJS := $(foreach app,$(APPS),$(app)/$(app)) WASM := client/client.wasm webtools/webtools.wasm GOFMT := gofumpt -l -w . .PHONY: client server client: client/client server: server/server .PHONY: all fmt test check $(OBJS) $(WASM) all: $(OBJS) $(WASM) $(OBJS): @echo Building $(@F) @pushd $(@D) >/dev/null && go build && popd >/dev/null */*.wasm: @echo Building $(@F) ... @pushd $(@D) >/dev/null && env GOOS=js GOARCH=wasm go build -o $(@F) && popd >/dev/null fmt: @set -e; for package in $(PACKAGES) webtools; do \ pushd $$package >/dev/null && $(GOFMT); popd >/dev/null; \ done test: @STATUS=0; \ for package in $(PACKAGES); do \ if pushd "$$package" >/dev/null; then \ go test; \ status="$$?"; \ if [ "$$status" -ne 0 ]; then STATUS="$$status"; fi; \ popd >/dev/null; \ fi; \ done; \ exit "$$STATUS" check: golangci-lint run --skip-dirs webtools