josie / alder-tools

# aldermon — btop-style Alder Lake monitor. Gentoo-friendly: respects
# PREFIX, DESTDIR. `make check` runs fmt+clippy+test.
PREFIX  ?= /usr/local
SYSCONF ?= /etc
DATADIR ?= /usr/share

BIN      := $(DESTDIR)$(PREFIX)/bin/aldermon
MSRBIN   := $(DESTDIR)$(PREFIX)/bin/aldermon-msr
CONF     := $(DESTDIR)$(SYSCONF)/aldermon/aldermon.conf
SETUP    := $(DESTDIR)$(DATADIR)/aldermon/aldermon-install.sh

.PHONY: all build check install uninstall clean

all: build

build:
	cargo build --release

check:
	cargo fmt --check
	cargo clippy --all-targets -- -D warnings
	cargo test

install: build
	install -Dm755 target/release/aldermon $(BIN)
	install -Dm755 target/release/aldermon-msr $(MSRBIN)
	# never clobber a hand-edited system conf; aldermon-install.sh owns
	# force-replacing it (--clean)
	[ -e $(CONF) ] || install -Dm644 aldermon.conf $(CONF)
	install -Dm755 aldermon-install.sh $(SETUP)
ifeq ($(DESTDIR),)
	# VID needs the cap half of a two-gate check (msr nodes also go 0440 adm
	# via the rules installed by aldermon-install.sh); grant cap_sys_rawio
	# to the read-only helper only. Re-applied on every install since
	# rebuilding drops file caps.
	setcap cap_sys_rawio+ep $(MSRBIN)
endif

uninstall:
	rm -f $(BIN) $(MSRBIN) $(CONF) $(SETUP)
	rm -f $(DESTDIR)$(DATADIR)/aldermon/powercap-pl-rules.sh
	rm -f $(DESTDIR)$(DATADIR)/aldermon/aldermon-setup.sh
	rmdir -p --ignore-fail-on-non-empty $(CONF) 2>/dev/null || true
	rmdir -p --ignore-fail-on-non-empty $(SETUP) 2>/dev/null || true

clean:
	cargo clean