SHELL := /usr/bin/env bash GO ?= go GOFMT ?= gofmt INSTALL ?= install PREFIX ?= $(HOME)/.local BINDIR ?= $(PREFIX)/bin LIBDIR ?= $(PREFIX)/lib RUNTIMEDIR ?= $(LIBDIR)/banger DESTDIR ?= BINARIES := banger bangerd GO_SOURCES := $(shell find cmd internal -type f -name '*.go' | sort) RUNTIME_EXECUTABLES := firecracker customize.sh dns.sh packages.sh nat.sh namegen RUNTIME_DATA_FILES := packages.apt $(wildcard rootfs.ext4) $(wildcard rootfs-docker.ext4) RUNTIME_BOOT_FILES := wtf/root/boot/vmlinux-6.8.0-94-generic wtf/root/boot/initrd.img-6.8.0-94-generic RUNTIME_MODULES_DIR := wtf/root/lib/modules/6.8.0-94-generic .DEFAULT_GOAL := help .PHONY: help build banger bangerd test fmt tidy clean rootfs install help: @printf '%s\n' \ 'Targets:' \ ' make build Build ./banger and ./bangerd' \ ' make install Build and install binaries plus the runtime bundle into $(DESTDIR)$(BINDIR) and $(DESTDIR)$(RUNTIMEDIR)' \ ' make test Run go test ./...' \ ' make fmt Format Go sources under cmd/ and internal/' \ ' make tidy Run go mod tidy' \ ' make clean Remove built Go binaries' \ ' make rootfs Rebuild the repo-local default rootfs image' build: $(BINARIES) banger: $(GO_SOURCES) go.mod go.sum $(GO) build -o ./banger ./cmd/banger bangerd: $(GO_SOURCES) go.mod go.sum $(GO) build -o ./bangerd ./cmd/bangerd test: $(GO) test ./... fmt: $(GOFMT) -w $(GO_SOURCES) tidy: $(GO) mod tidy clean: rm -f ./banger ./bangerd install: build @for path in $(RUNTIME_EXECUTABLES) $(RUNTIME_BOOT_FILES) $(RUNTIME_MODULES_DIR) packages.apt id_ed25519; do \ test -e "$$path" || { echo "missing runtime artifact: $$path" >&2; exit 1; }; \ done @test -e rootfs-docker.ext4 || test -e rootfs.ext4 || { echo "missing runtime artifact: rootfs-docker.ext4 or rootfs.ext4" >&2; exit 1; } mkdir -p "$(DESTDIR)$(BINDIR)" mkdir -p "$(DESTDIR)$(RUNTIMEDIR)" mkdir -p "$(DESTDIR)$(RUNTIMEDIR)/wtf/root/boot" mkdir -p "$(DESTDIR)$(RUNTIMEDIR)/wtf/root/lib/modules" $(INSTALL) -m 0755 ./banger "$(DESTDIR)$(BINDIR)/banger" $(INSTALL) -m 0755 ./bangerd "$(DESTDIR)$(BINDIR)/bangerd" @for path in $(RUNTIME_EXECUTABLES); do \ $(INSTALL) -m 0755 "$$path" "$(DESTDIR)$(RUNTIMEDIR)/$$path"; \ done @for path in $(RUNTIME_DATA_FILES) $(RUNTIME_BOOT_FILES); do \ $(INSTALL) -m 0644 "$$path" "$(DESTDIR)$(RUNTIMEDIR)/$$path"; \ done $(INSTALL) -m 0600 id_ed25519 "$(DESTDIR)$(RUNTIMEDIR)/id_ed25519" cp -a "$(RUNTIME_MODULES_DIR)" "$(DESTDIR)$(RUNTIMEDIR)/wtf/root/lib/modules/" rootfs: ./make-rootfs.sh