PREFIX ?= /usr/local
LIBDIR ?= $(PREFIX)/lib
INCLUDEDIR ?= $(PREFIX)/include
PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
CC ?= cc
CFLAGS ?= -O2 -Wall -Wextra -fPIC -fgnu89-inline
CPPFLAGS += -Iinclude $(shell pkg-config --cflags libusb-1.0 libcurl sqlite3)
LDLIBS += $(shell pkg-config --libs libusb-1.0 libcurl sqlite3) -lm -lpthread

# Optional SDRplay API 3.x support:
#   make SDRPLAY=1
# If installed in a non-standard location, e.g.:
#   make SDRPLAY=1 SDRPLAY_CFLAGS=-I/opt/sdrplay/include SDRPLAY_LIBS='-L/opt/sdrplay/lib -lsdrplay_api'
SDRPLAY ?= 0
SDRPLAY_CFLAGS ?=
SDRPLAY_LIBS ?= -lsdrplay_api
ifeq ($(SDRPLAY),1)
CPPFLAGS += -DHAVE_SDRPLAY=1 $(SDRPLAY_CFLAGS)
LDLIBS += $(SDRPLAY_LIBS)
endif

# Optional RTL-SDR support (RTL-SDR Blog V4 supported by the installed librtlsdr):
#   make RTLSDR=1
RTLSDR ?= 0
RTLSDR_CFLAGS ?= $(shell pkg-config --cflags librtlsdr 2>/dev/null)
RTLSDR_LIBS ?= $(shell pkg-config --libs librtlsdr 2>/dev/null)
ifeq ($(RTLSDR),1)
CPPFLAGS += -DHAVE_RTLSDR=1 $(RTLSDR_CFLAGS)
LDLIBS += $(RTLSDR_LIBS)
endif

VERSION = 0.1.51
SONAME = libadsb-reader.so.0
SRC = src/core.c src/modes.c src/beast.c src/driver_radarbox.c src/driver_sbs1.c src/driver_sdrplay.c src/driver_rtlsdr.c src/demod_modes1090.c src/standing.c src/acarsd.c src/collect.c
OBJ = $(SRC:.c=.o)

all: libadsb-reader.so.$(VERSION) adsb-reader

libadsb-reader.so.$(VERSION): $(OBJ)
	$(CC) -shared -Wl,-soname,$(SONAME) -o $@ $(OBJ) $(LDLIBS)
	ln -sf $@ $(SONAME)
	ln -sf $(SONAME) libadsb-reader.so

adsb-reader: tools/adsb-reader.o libadsb-reader.so.$(VERSION)
	$(CC) -o $@ tools/adsb-reader.o -L. -Wl,-rpath,'$$ORIGIN' -ladsb-reader $(LDLIBS)

# Minimal headless collector feeder. `make feeder` always enables RTL-SDR
# and builds one application binary directly from the library sources.
feeder: adsb-feeder

adsb-feeder: tools/adsb-feeder.c $(SRC)
	@pkg-config --exists librtlsdr || { echo "librtlsdr development files not found (pkg-config librtlsdr)" >&2; exit 1; }
	@pkg-config --exists ncursesw || { echo "ncursesw development files not found (pkg-config ncursesw)" >&2; exit 1; }
	$(CC) $(CFLAGS) $(CPPFLAGS) -DHAVE_RTLSDR=1 $(shell pkg-config --cflags librtlsdr ncursesw) -o $@ tools/adsb-feeder.c $(SRC) $(LDLIBS) $(shell pkg-config --libs librtlsdr ncursesw)

install: all
	install -d $(DESTDIR)$(LIBDIR) $(DESTDIR)$(INCLUDEDIR)/adsb-reader $(DESTDIR)$(PREFIX)/bin $(DESTDIR)$(PKGCONFIGDIR)
	install -m755 libadsb-reader.so.$(VERSION) $(DESTDIR)$(LIBDIR)/
	ln -sf libadsb-reader.so.$(VERSION) $(DESTDIR)$(LIBDIR)/$(SONAME)
	ln -sf $(SONAME) $(DESTDIR)$(LIBDIR)/libadsb-reader.so
	install -m644 include/adsb-reader/adsb_reader.h $(DESTDIR)$(INCLUDEDIR)/adsb-reader/
	install -m755 adsb-reader $(DESTDIR)$(PREFIX)/bin/
	sed 's|@PREFIX@|$(PREFIX)|g' pkgconfig/libadsb-reader.pc.in > $(DESTDIR)$(PKGCONFIGDIR)/libadsb-reader.pc

check-demod:
	$(CC) $(CFLAGS) -Isrc -o tests/test_demod_modes1090 tests/test_demod_modes1090.c src/demod_modes1090.c
	./tests/test_demod_modes1090

check-beast:
	$(CC) $(CFLAGS) -Iinclude -o tests/test_beast tests/test_beast.c src/beast.c
	./tests/test_beast

clean:
	rm -f $(OBJ) tools/adsb-reader.o libadsb-reader.so libadsb-reader.so.0 libadsb-reader.so.$(VERSION) adsb-reader adsb-feeder tests/test_beast tests/test_demod_modes1090
.PHONY: all feeder install check-demod check-beast clean
