PREFIX    ?= /usr
DESTDIR   ?=

# Rust target triple. Empty builds for the native host; set it (e.g.
# aarch64-unknown-linux-gnu) to cross-compile. debian/rules derives this
# from DEB_HOST_ARCH so the package cross-builds.
RUST_TARGET ?=

CARGO_TARGET = $(if $(RUST_TARGET),--target $(RUST_TARGET),)
BIN          = target/$(if $(RUST_TARGET),$(RUST_TARGET)/,)release/calllogs-server

# Daemon goes under libexec — not on $PATH; D-Bus / systemd activation
# is how the rest of the session reaches it. Matches the convention the
# other Liberux daemons follow.
LIBEXECDIR = $(DESTDIR)$(PREFIX)/libexec
DATADIR    = $(DESTDIR)$(PREFIX)/share
SYSTEMDDIR = $(DESTDIR)$(PREFIX)/lib/systemd/user

DBUS_DIR   = $(DATADIR)/dbus-1/services

.PHONY: all start install uninstall clean distclean

all:
	cargo build --release $(CARGO_TARGET)

start: all
	./$(BIN)

arm64-deps:
	sudo apt-get install gcc-aarch64-linux-gnu libstd-rust-dev:arm64 libstd-rust-1.85:arm64

arm64:
	$(MAKE) all RUST_TARGET=aarch64-unknown-linux-gnu

install:
	install -Dm755 $(BIN)                                   $(LIBEXECDIR)/calllogs-server
	install -Dm644 data/org.liberux.CallLog1.service        $(DBUS_DIR)/org.liberux.CallLog1.service
	install -Dm644 data/calllogs-server.service             $(SYSTEMDDIR)/calllogs-server.service

uninstall:
	rm -f $(LIBEXECDIR)/calllogs-server
	rm -f $(DBUS_DIR)/org.liberux.CallLog1.service
	rm -f $(SYSTEMDDIR)/calllogs-server.service

clean:
	cargo clean

distclean: clean
	dh_clean
	rm -f Cargo.lock
