# Build on Raspberry Pi OS (Bookworm) in fixture-timing/inject-shim/
#
#   make
#   make HW_DEBUG=1          # compile-in dense HS/DE/RX timeline (bench)
#   make bench
#   sudo ./bench_inject /dev/ttyXRUSB1 --len 12 --count 50
#   ./pog422_uartd --port /dev/ttyXRUSB1 --socket /tmp/pog422_uart.sock

CC ?= gcc
CFLAGS ?= -O2 -Wall -Wextra -fPIC -D_GNU_SOURCE -D_DEFAULT_SOURCE
HW_DEBUG ?= 0
ifeq ($(HW_DEBUG),1)
  CFLAGS += -DPOG422_HW_DEBUG=1
endif
LDFLAGS_SO = -shared
LDLIBS_BENCH =
LDLIBS_UARTD = -pthread

LIB = libpog422_inject.so
UARTD = pog422_uartd
OBJS = pog422_inject.o

.PHONY: all clean bench install

all: $(LIB) bench_inject $(UARTD)

$(LIB): $(OBJS)
	$(CC) $(LDFLAGS_SO) -o $@ $(OBJS)

pog422_inject.o: pog422_inject.c pog422_inject.h pog422_xr_ioctl.h pog422_hw_debug.h
	$(CC) $(CFLAGS) -c -o $@ pog422_inject.c

pog422_uartd.o: pog422_uartd.c pog422_ipc.h pog422_inject.h pog422_xr_ioctl.h pog422_hw_debug.h pog422_timing_trace.h
	$(CC) $(CFLAGS) -c -o $@ pog422_uartd.c

$(UARTD): pog422_uartd.o pog422_inject.o
	$(CC) -o $@ pog422_uartd.o pog422_inject.o $(LDLIBS_UARTD)

bench_inject: bench_inject.o pog422_inject.o
	$(CC) -o $@ bench_inject.o pog422_inject.o $(LDLIBS_BENCH)

bench_inject.o: bench_inject.c pog422_inject.h
	$(CC) $(CFLAGS) -c -o $@ bench_inject.c

bench: bench_inject

install: $(LIB) $(UARTD)
	@:

clean:
	rm -f $(OBJS) pog422_uartd.o bench_inject.o $(LIB) bench_inject $(UARTD)
