155 lines
5.9 KiB
Makefile
Executable File
155 lines
5.9 KiB
Makefile
Executable File
# rs-mrxvt — distro-agnostic Makefile.
|
|
#
|
|
# Targets:
|
|
# build — cargo build --release (default)
|
|
# check — cargo check
|
|
# test — full test suite (unit + integration)
|
|
# stress — 50-instance Python broadcast harness
|
|
# fmt / clippy — code quality
|
|
# clean — cargo clean
|
|
# install — install binary + assets to $PREFIX (default /usr/local)
|
|
# uninstall — reverse of install
|
|
# dist — build source tarball: rs-mrxvt-<ver>.tar.xz
|
|
# deb — build .deb via cargo-deb (only if cargo-deb installed)
|
|
# rpm — build .rpm via cargo-rpm (only if cargo-rpm installed)
|
|
# run — cargo run --release
|
|
# help — this list
|
|
|
|
PREFIX ?= /usr/local
|
|
BINDIR ?= $(PREFIX)/bin
|
|
DATADIR ?= $(PREFIX)/share
|
|
MANDIR ?= $(DATADIR)/man/man1
|
|
APPDIR ?= $(DATADIR)/applications
|
|
|
|
CARGO ?= cargo
|
|
VERSION := $(shell grep '^version' Cargo.toml | head -1 | cut -d '"' -f 2)
|
|
PKG_NAME := rs-mrxvt
|
|
|
|
.PHONY: help build build-gpu check check-gpu test test-gpu stress fmt clippy clean install uninstall dist deb rpm run
|
|
|
|
help:
|
|
@echo "rs-mrxvt $(VERSION) — make targets:"
|
|
@echo " build cargo build --release (TUI only, no GPU deps)"
|
|
@echo " build-gpu cargo build --release --features gpu (wgpu + softbuffer)"
|
|
@echo " check cargo check"
|
|
@echo " check-gpu cargo check --features gpu"
|
|
@echo " test cargo test"
|
|
@echo " test-gpu cargo test --features gpu"
|
|
@echo " stress 50-instance Python broadcast stress harness"
|
|
@echo " fmt cargo fmt --all -- --check"
|
|
@echo " clippy cargo clippy --all-targets -- -D warnings"
|
|
@echo " install install to $(PREFIX) (set PREFIX=... to override)"
|
|
@echo " uninstall remove from $(PREFIX)"
|
|
@echo " dist build $(PKG_NAME)-$(VERSION).tar.xz source tarball"
|
|
@echo " deb build .deb (requires cargo-deb)"
|
|
@echo " rpm build .rpm (requires cargo-rpm)"
|
|
@echo " run cargo run --release"
|
|
@echo " clean cargo clean"
|
|
|
|
build:
|
|
$(CARGO) build --release
|
|
|
|
# Build with GPU acceleration (wgpu + softbuffer).
|
|
# Requires system deps: libvulkan-dev, libwayland-dev, libxkbcommon-dev (or
|
|
# distro equivalents). Falls back to TUI at runtime if no GPU is found.
|
|
build-gpu:
|
|
$(CARGO) build --release --features gpu
|
|
|
|
check:
|
|
$(CARGO) check
|
|
|
|
check-gpu:
|
|
$(CARGO) check --features gpu
|
|
|
|
test:
|
|
$(CARGO) test
|
|
|
|
test-gpu:
|
|
$(CARGO) test --features gpu
|
|
|
|
stress: build
|
|
python3 scripts/stress_test.py --tabs 50 --timeout 30
|
|
|
|
fmt:
|
|
$(CARGO) fmt --all -- --check
|
|
|
|
clippy:
|
|
$(CARGO) clippy --all-targets -- -D warnings
|
|
|
|
run:
|
|
$(CARGO) run --release
|
|
|
|
clean:
|
|
$(CARGO) clean
|
|
|
|
# ─── Installation ────────────────────────────────────────────────────────────
|
|
# Distro-agnostic: just copy files into $PREFIX. No package manager involved.
|
|
|
|
install: build
|
|
install -d $(DESTDIR)$(BINDIR)
|
|
install -d $(DESTDIR)$(MANDIR)
|
|
install -d $(DESTDIR)$(APPDIR)
|
|
install -d $(DESTDIR)$(DATADIR)/$(PKG_NAME)/examples
|
|
install -m 755 target/release/$(PKG_NAME) $(DESTDIR)$(BINDIR)/
|
|
install -m 644 examples/config.toml $(DESTDIR)$(DATADIR)/$(PKG_NAME)/examples/
|
|
# Install man page if it exists (built from docs/ via pandoc; not required).
|
|
if [ -f docs/$(PKG_NAME).1 ]; then \
|
|
install -m 644 docs/$(PKG_NAME).1 $(DESTDIR)$(MANDIR)/; \
|
|
fi
|
|
# Install .desktop if it exists.
|
|
if [ -f assets/$(PKG_NAME).desktop ]; then \
|
|
install -m 644 assets/$(PKG_NAME).desktop $(DESTDIR)$(APPDIR)/; \
|
|
fi
|
|
@echo ""
|
|
@echo "Installed to $(PREFIX). Try: $(BINDIR)/$(PKG_NAME)"
|
|
|
|
uninstall:
|
|
rm -f $(DESTDIR)$(BINDIR)/$(PKG_NAME)
|
|
rm -f $(DESTDIR)$(MANDIR)/$(PKG_NAME).1
|
|
rm -f $(DESTDIR)$(APPDIR)/$(PKG_NAME).desktop
|
|
rm -rf $(DESTDIR)$(DATADIR)/$(PKG_NAME)
|
|
@echo "Removed from $(PREFIX)."
|
|
|
|
# ─── Source distribution ─────────────────────────────────────────────────────
|
|
# A versioned tarball suitable for downstream packagers (Debian, Arch, Fedora,
|
|
# SourceMage, …) to consume via their own packaging scripts.
|
|
|
|
dist: clean
|
|
@echo "Building source tarball for v$(VERSION)..."
|
|
@mkdir -p dist
|
|
@tar -cJf dist/$(PKG_NAME)-$(VERSION).tar.xz \
|
|
--exclude-vcs \
|
|
--exclude=target \
|
|
--exclude=dist \
|
|
--exclude=.git \
|
|
.
|
|
@echo "Created: dist/$(PKG_NAME)-$(VERSION).tar.xz"
|
|
@ls -lh dist/$(PKG_NAME)-$(VERSION).tar.xz
|
|
|
|
# ─── Optional distro-specific packaging ──────────────────────────────────────
|
|
# These are gated on the corresponding cargo subcommand being installed,
|
|
# so the default build path stays distro-agnostic.
|
|
|
|
deb:
|
|
@command -v cargo-deb >/dev/null 2>&1 || { \
|
|
echo "Error: cargo-deb not installed. Install with: cargo install cargo-deb"; \
|
|
exit 1; \
|
|
}
|
|
$(CARGO) deb
|
|
|
|
rpm:
|
|
@command -v cargo-rpm >/dev/null 2>&1 || { \
|
|
echo "Error: cargo-rpm not installed. Install with: cargo install cargo-rpm"; \
|
|
exit 1; \
|
|
}
|
|
$(CARGO) rpm
|
|
|
|
# ─── Convenience ─────────────────────────────────────────────────────────────
|
|
|
|
.PHONY: all
|
|
all: build test
|
|
|
|
.PHONY: ci
|
|
ci: fmt clippy test stress
|
|
@echo "All CI checks passed."
|