# Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
# SPDX-License-Identifier: BSD-3-Clause

# gasm-devkit — developer tooling for Go's Plan 9 assembler (GAsm).

version := "0.23.0"

default:
    @just --list

# Download module dependencies.
install:
    go mod download

# Vet + gofmt check — zero errors, zero warnings.
build:
    go vet ./...
    @test -z "$(gofmt -l .)" || { echo "gofmt diff:"; gofmt -l .; exit 1; }

# Full test suite + race detector + 80 % coverage gate.
test:
    go test -race -count=1 -coverprofile=coverage.out ./...
    go tool cover -func=coverage.out | awk '/^total:/{gsub("%","",$3);if($3+0<80){print "coverage "$3"% < 80%";exit 1}print "coverage "$3"%"}'

# Format all Go sources.
fmt:
    gofmt -w .

# Run the gasm CLI (pass args after --, e.g. `just run -- lint file.s`).
run *ARGS:
    go run -ldflags "-X main.version={{version}}" ./cmd/gasm {{ARGS}}

# Install the gasm binary into $GOBIN (stamped with the release version).
install-bin:
    go install -ldflags "-X main.version={{version}}" ./cmd/gasm

# Regenerate the architecture instruction tables from the Go toolchain source.
gen:
    go run _gen/gen.go
    gofmt -w arch/

# Remove build artefacts.
uninstall:
    rm -f coverage.out gasm
    find . -name '*.test' -delete
