ldflags inject version, commit, and build date; a version subcommand also reports go version and platform. Ends the which-binary-is-this guessing after deploys. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
72 lines
2.1 KiB
Makefile
72 lines
2.1 KiB
Makefile
BINARY := rtsp-streamer
|
|
PKG := ./cmd/rtsp-streamer
|
|
BINDIR := bin
|
|
|
|
# Build metadata baked into the binary (see `rtsp-streamer version`).
|
|
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
|
|
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo none)
|
|
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
LDFLAGS := -s -w \
|
|
-X main.version=$(VERSION) \
|
|
-X main.commit=$(COMMIT) \
|
|
-X main.date=$(DATE)
|
|
|
|
# Install location. Override with `make install PREFIX=/opt`.
|
|
PREFIX ?= /usr/local
|
|
DESTBIN := $(PREFIX)/bin/$(BINARY)
|
|
|
|
# Use sudo automatically when not already root, so `make install` /
|
|
# `make deploy` work whether or not you prefix them with sudo.
|
|
SUDO := $(shell [ "$$(id -u)" -eq 0 ] || echo sudo)
|
|
|
|
# The kiosk session unit restarted by `make deploy`.
|
|
KIOSK_UNIT ?= getty@tty1
|
|
|
|
.PHONY: all build pi pi32 test vet clean run-tui install deploy uninstall
|
|
|
|
all: build
|
|
|
|
## build: compile for the host platform (native arch)
|
|
build:
|
|
go build -ldflags '$(LDFLAGS)' -o $(BINDIR)/$(BINARY) $(PKG)
|
|
|
|
## pi: cross-compile for Raspberry Pi 4 running a 64-bit OS (arm64)
|
|
pi:
|
|
GOOS=linux GOARCH=arm64 go build -ldflags '$(LDFLAGS)' -o $(BINDIR)/$(BINARY)-arm64 $(PKG)
|
|
|
|
## pi32: cross-compile for a 32-bit Pi OS (armv7)
|
|
pi32:
|
|
GOOS=linux GOARCH=arm GOARM=7 go build -ldflags '$(LDFLAGS)' -o $(BINDIR)/$(BINARY)-armv7 $(PKG)
|
|
|
|
## install: build for this machine and copy the binary to $(PREFIX)/bin
|
|
## (auto-sudo). This is the location the running daemon uses.
|
|
install: build
|
|
$(SUDO) install -m 0755 $(BINDIR)/$(BINARY) $(DESTBIN)
|
|
@echo "installed -> $(DESTBIN)"
|
|
|
|
## deploy: install, then restart the kiosk session so the wall picks it up
|
|
deploy: install
|
|
$(SUDO) systemctl restart $(KIOSK_UNIT)
|
|
@echo "restarted $(KIOSK_UNIT); run 'rtsp-streamer status' to check"
|
|
|
|
## uninstall: remove the installed binary
|
|
uninstall:
|
|
$(SUDO) rm -f $(DESTBIN)
|
|
@echo "removed $(DESTBIN)"
|
|
|
|
## test: run unit tests
|
|
test:
|
|
go test ./...
|
|
|
|
## vet: run go vet
|
|
vet:
|
|
go vet ./...
|
|
|
|
## run-tui: launch the configurator against a scratch config
|
|
run-tui: build
|
|
RTSP_STREAMER_CONFIG=/tmp/rtsp-streamer.yaml $(BINDIR)/$(BINARY) tui
|
|
|
|
## clean: remove build artifacts
|
|
clean:
|
|
rm -rf $(BINDIR)
|