BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) BUILDDATE ?= $(shell date -u +%FT%T%z) BUILDTS ?= $(shell date -u +%s) REVISION ?= $(shell git rev-parse HEAD) VERSION_DEV ?= 0.1.3-dev VERSION ?= 0.1.3 PROMETHEUS_TAG := github.com/prometheus/common/version KVM_PKG_NAME := kvm # OTA signing key path (Ed25519 private key for auto-signing at build time) OTA_SIGNING_KEY ?= # OTA signing public key (hex-encoded Ed25519 public key, 64 hex chars) # Default empty = signature verification disabled (backward compatible) OTA_PUBLIC_KEY ?= GO_BUILD_ARGS := -tags netgo GO_RELEASE_BUILD_ARGS := -trimpath $(GO_BUILD_ARGS) GO_LDFLAGS := \ -s -w \ -X $(PROMETHEUS_TAG).Branch=$(BRANCH) \ -X $(PROMETHEUS_TAG).BuildDate=$(BUILDDATE) \ -X $(PROMETHEUS_TAG).Revision=$(REVISION) \ -X $(KVM_PKG_NAME).builtTimestamp=$(BUILDTS) \ -X $(KVM_PKG_NAME).builtOtaPublicKey=$(OTA_PUBLIC_KEY) GO_CMD := GOOS=linux GOARCH=arm GOARM=7 go BIN_DIR := $(shell pwd)/bin TEST_DIRS := $(shell find . -name "*_test.go" -type f -exec dirname {} \; | sort -u) build_dev: @echo "Building..." $(GO_CMD) build \ -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION_DEV)" \ $(GO_RELEASE_BUILD_ARGS) \ -o $(BIN_DIR)/kvm_app cmd/main.go @if [ -n "$(OTA_SIGNING_KEY)" ]; then \ echo "Signing $(BIN_DIR)/kvm_app..."; \ go run cmd/main.go cli signer sign --key "$(OTA_SIGNING_KEY)" $(BIN_DIR)/kvm_app; \ else \ echo "OTA_SIGNING_KEY not set, skipping signing."; \ fi frontend: cd ui && npm ci && npm run build:device build_release: frontend @echo "Building release..." $(GO_CMD) build \ -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION)" \ $(GO_RELEASE_BUILD_ARGS) \ -o bin/kvm_app cmd/main.go @if [ -n "$(OTA_SIGNING_KEY)" ]; then \ echo "Signing bin/kvm_app..."; \ go run cmd/main.go cli signer sign --key "$(OTA_SIGNING_KEY)" bin/kvm_app; \ else \ echo "OTA_SIGNING_KEY not set, skipping signing."; \ fi sign: @echo "Signing firmware files..." go run cmd/main.go cli signer sign --key $(KEY) $(FILES)