# rmtop - read-only ncurses GPU dashboard (Open-IOV).
#
# Reuses rmtool's RM query layer (../rmtool/src) so there is exactly one
# ioctl implementation. Requires ncursesw; falls back to -lncursesw when
# pkg-config is unavailable.
CC      ?= gcc
CFLAGS  ?= -O2 -Wall -Wextra
RMTOOL   = ../rmtool
CPPFLAGS += -Iinclude -I$(RMTOOL)/include
NCURSES_CFLAGS := $(shell pkg-config --cflags ncursesw 2>/dev/null)
NCURSES_LIBS   := $(shell pkg-config --libs ncursesw 2>/dev/null || echo -lncursesw)
CFLAGS  += $(NCURSES_CFLAGS)

OBJS   = src/main.o src/panel.o
SHARED = build/rm_api.o build/query.o build/output.o
PREFIX ?= /usr/local

all: rmtop

rmtop: $(OBJS) $(SHARED)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(NCURSES_LIBS)

build:
	@mkdir -p build

build/rm_api.o: $(RMTOOL)/src/rm_api.c $(RMTOOL)/include/rm_api.h | build
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

build/query.o: $(RMTOOL)/src/query.c $(RMTOOL)/include/rm_api.h $(RMTOOL)/include/rmtool.h | build
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

build/output.o: $(RMTOOL)/src/output.c $(RMTOOL)/include/rmtool.h | build
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

src/%.o: src/%.c include/rmtop.h $(RMTOOL)/include/rm_api.h $(RMTOOL)/include/rmtool.h | build
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

install: rmtop
	install -d $(DESTDIR)$(PREFIX)/bin
	install -m 0755 rmtop $(DESTDIR)$(PREFIX)/bin/rmtop

clean:
	rm -f $(OBJS) $(SHARED) rmtop
	rmdir build 2>/dev/null || true

.PHONY: all install clean
