CC ?= gcc
AR ?= ar

MBEDTLS_CFLAGS := $(shell pkg-config --cflags mbedtls 2>/dev/null)
MBEDTLS_LIBS := $(shell pkg-config --libs mbedtls 2>/dev/null) -lmbedx509 -lmbedcrypto

CPPFLAGS += -Iinclude $(MBEDTLS_CFLAGS)
CFLAGS ?= -O2 -Wall -Wextra -Wpedantic -std=c11 -D_POSIX_C_SOURCE=200809L

LIB_OBJECTS = src/device.o src/protocol.o src/request.o src/fdt.o src/sensor.o src/config.o src/tls.o src/session.o
LIBRARY = libgxfp.a

all: $(LIBRARY) fdt-monitor sensor-probe session-regression analyze-capture capture-to-pgm

$(LIBRARY): $(LIB_OBJECTS)
	$(AR) rcs $@ $^

fdt-monitor: examples/fdt-monitor.o $(LIBRARY)
	$(CC) $(CFLAGS) -o $@ examples/fdt-monitor.o $(LIBRARY) $(MBEDTLS_LIBS)

sensor-probe: examples/sensor-probe.o $(LIBRARY)
	$(CC) $(CFLAGS) -o $@ examples/sensor-probe.o $(LIBRARY) $(MBEDTLS_LIBS)

session-regression: examples/session-regression.o $(LIBRARY)
	$(CC) $(CFLAGS) -o $@ examples/session-regression.o $(LIBRARY) $(MBEDTLS_LIBS) -pthread

analyze-capture: tools/analyze_capture.o
	$(CC) $(CFLAGS) -o $@ $^

capture-to-pgm: tools/capture_to_pgm.o
	$(CC) $(CFLAGS) -o $@ $^

src/%.o: src/%.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

examples/%.o: examples/%.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

tools/%.o: tools/%.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:
	rm -f $(LIB_OBJECTS) examples/*.o tools/*.o $(LIBRARY) fdt-monitor sensor-probe session-regression analyze-capture capture-to-pgm
