Ctrl K
ComunidadGuías…

Makefile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
SHELL := /bin/bash
GO ?= go
ifeq ($(OS),Windows_NT)
BINARY ?= build/kry.exe
else
BINARY ?= build/kry
endif
TIMEOUT ?= 90m
RACE_TIMEOUT ?= 90m

.PHONY: all build check test test-static test-race coverage fuzz-smoke check-docs check-generated native-smoke native-parity package-smoke benchmark verify-fast verify-full verify install-association release clean

all: build

build:
	mkdir -p build
	$(GO) build -trimpath -ldflags='-s -w' -o $(BINARY) ./cmd/kry

check: build
	$(BINARY) check examples/hello.kry
	$(BINARY) check examples/fibonacci.kry
	$(BINARY) check examples/bytes.kry
	$(BINARY) check examples/control_flow.kry
	$(BINARY) check examples/typed_data.kry
	$(BINARY) check examples/module_demo.kry
	$(BINARY) check examples/collections.kry
	$(BINARY) check examples/native_features.kry
	$(BINARY) check examples/discord_bot.kry
	$(BINARY) check examples/discord_commands.kry
	$(BINARY) check examples/runtime_polymorphism.kry
	$(BINARY) check examples/dispatch_library.kry
	$(BINARY) check examples/new_builtins.kry
	$(BINARY) check examples/concurrency.kry

test: build check
	$(GO) test -timeout=$(TIMEOUT) ./...
	$(BINARY) run examples/hello.kry
	$(BINARY) run examples/fibonacci.kry
	$(BINARY) run examples/bytes.kry
	$(BINARY) run examples/control_flow.kry
	$(BINARY) run examples/typed_data.kry
	$(BINARY) run examples/module_demo.kry
	$(BINARY) run examples/collections.kry
	$(BINARY) run examples/native_features.kry
	$(BINARY) run examples/runtime_polymorphism.kry
	$(BINARY) run examples/dispatch_library.kry
	$(BINARY) run examples/new_builtins.kry
	$(BINARY) run examples/concurrency.kry
	$(BINARY) build examples/hello.kry --format=elf --target=linux-x64 -o build/hello.elf
	$(BINARY) inspect build/hello.elf

test-static: build
	@set -euo pipefail; \
	  head=$$(git rev-parse HEAD); \
	  if git rev-parse --verify origin/main >/dev/null 2>&1; then \
	    base=$$(git merge-base "$$head" origin/main); \
	    if [ "$$base" = "$$head" ] && git rev-parse --verify HEAD^ >/dev/null 2>&1; then base=$$(git rev-parse HEAD^); fi; \
	  elif git rev-parse --verify HEAD^ >/dev/null 2>&1; then base=$$(git rev-parse HEAD^); \
	  else base=$$head; fi; \
	  mapfile -t files < <(git diff --name-only --diff-filter=ACMR "$$base" -- '*.go'; git ls-files --others --exclude-standard -- '*.go'); \
	  if (( $${#files[@]} )); then \
	    unformatted=$$(gofmt -l "$${files[@]}"); \
	    if [ -n "$$unformatted" ]; then printf '%s\n' "$$unformatted" >&2; exit 1; fi; \
	  fi
	$(GO) vet ./...
	$(GO) test -count=1 -timeout=$(TIMEOUT) ./...

test-race:
	KRY_RACE=1 $(GO) test -race -count=1 -timeout=$(RACE_TIMEOUT) ./...

coverage:
	mkdir -p build
	$(GO) test -timeout=$(TIMEOUT) -covermode=atomic -coverprofile=build/coverage.out ./...

fuzz-smoke:
	$(GO) test -run='^$$' -fuzz='^FuzzKryndelLex$$' -fuzztime=2s -parallel=2 -timeout=$(TIMEOUT) ./internal/kry
	$(GO) test -run='^$$' -fuzz='^FuzzKryndelParseAndCheck$$' -fuzztime=2s -parallel=2 -timeout=$(TIMEOUT) ./internal/kry
	$(GO) test -run='^$$' -fuzz='^FuzzKryndelArtifactDecoder$$' -fuzztime=2s -parallel=2 -timeout=$(TIMEOUT) ./internal/kry
	$(GO) test -run='^$$' -fuzz='^FuzzKryndelKIRDecoder$$' -fuzztime=2s -parallel=2 -timeout=$(TIMEOUT) ./internal/kry

check-docs:
	$(GO) test -run='TestDocumentation' -count=1 ./...

check-generated:
	$(GO) generate ./internal/kry
	git diff --exit-code -- internal/kry/native_features_gen.go

native-smoke: build
	$(BINARY) build examples/hello.kry --format=exe --target=windows-x64 -o build/hello.exe
	$(BINARY) inspect build/hello.exe
	$(BINARY) build examples/hello.kry --format=elf --target=linux-x64 -o build/hello.elf
	$(BINARY) inspect build/hello.elf

native-parity: build
	mkdir -p build/verify-logs
	@set -o pipefail; $(BINARY) build examples/native_features.kry --format=elf --target=linux-x64 -o build/native_features.elf 2>&1 | tee build/verify-logs/native_features.build.log
	$(BINARY) run examples/native_features.kry > build/native_features.interp.out
	./build/native_features.elf > build/native_features.native.out
	diff -u build/native_features.interp.out build/native_features.native.out
	@set -o pipefail; $(BINARY) build examples/new_builtins.kry --format=elf --target=linux-x64 -o build/new_builtins.elf 2>&1 | tee build/verify-logs/new_builtins.build.log
	$(BINARY) run examples/new_builtins.kry > build/new_builtins.interp.out
	./build/new_builtins.elf > build/new_builtins.native.out
	diff -u build/new_builtins.interp.out build/new_builtins.native.out

package-smoke: build
	$(BINARY) package build/kryndel-self-test.kpkg

benchmark:
	$(GO) test -run='^$$' -bench=. -benchmem ./...

verify-fast: build check test-static check-docs fuzz-smoke check-generated

verify-full: verify-fast test native-smoke native-parity test-race coverage benchmark

verify: verify-full

install-association: build
	tools/install-association.sh

release: build
	mkdir -p dist
	for target in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64; do \
	  os=$${target%/*}; arch=$${target#*/}; ext=; test "$$os" = windows && ext=.exe; \
	  GOOS=$$os GOARCH=$$arch CGO_ENABLED=0 $(GO) build -trimpath -ldflags='-s -w' -o "dist/kry-$$os-$$arch$$ext" ./cmd/kry; \
	done
	GOOS=windows GOARCH=amd64 CGO_ENABLED=0 $(GO) build -trimpath -ldflags='-s -w' -o dist/kry-installer-windows-amd64.exe ./cmd/kry-installer
	sha256sum dist/kry-* > dist/SHA256SUMS

clean:
	rm -rf build dist