Files
etrelay/Makefile
T

60 lines
1.7 KiB
Makefile

ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
NAME := etrelay
VERSION := $(shell grep -m1 '^version' Cargo.toml | cut -d '"' -f2)
GNU := x86_64-unknown-linux-gnu
MUSL := x86_64-unknown-linux-musl
# Release artifacts: <name>-v<version>-<target triple> (+ .sha256).
DIST_DIR := $(ROOT_DIR)dist
DYNAMIC_BIN := $(DIST_DIR)/$(NAME)-v$(VERSION)-$(GNU)
STATIC_BIN := $(DIST_DIR)/$(NAME)-v$(VERSION)-$(MUSL)
.PHONY: show lint format check build static release diagrams clean
show:
@echo "$(NAME) version: $(VERSION)"
lint:
cargo clippy --fix --allow-dirty
format:
cargo fmt --all
check: lint format
# Dynamic (glibc): runs on hosts with the same or newer glibc.
build: check
cargo build --release --target $(GNU)
@$(call dist,$(GNU),$(DYNAMIC_BIN))
# Static (musl): runs on any x86_64 Linux. Pure Rust, no musl-gcc needed.
static: check
rustup target add $(MUSL)
cargo build --release --target $(MUSL)
@$(call dist,$(MUSL),$(STATIC_BIN))
release: build static
# PlantUML sources (diagrams/*.puml) -> PNG next to them, used by ENGINE.md.
diagrams:
plantuml -tpng $(ROOT_DIR)diagrams/*.puml
@ls -1 $(ROOT_DIR)diagrams/*.png
clean:
cargo clean
rm -rf $(DIST_DIR)
# $(call dist,<target triple>,<artifact path>): copy the release binary to dist/ + checksum.
define dist
mkdir -p $(DIST_DIR)
cp $(ROOT_DIR)target/$(1)/release/$(NAME) $(2)
cd $(DIST_DIR) && sha256sum $(notdir $(2)) > $(notdir $(2)).sha256
ls -lh $(2)
endef
# Deployment targets (deploy, logs, status...) kept with the infra config, reached through
# the local .deploy symlink (gitignored). Optional: silently skipped when absent.
ETRELAY_DIR := $(patsubst %/,%,$(ROOT_DIR))
-include $(ROOT_DIR).deploy/Makefile