-include Makefile.diag.inc

CC = gcc # gcc || clang
GCOV = gcov
PROG = dslmngr
OBJS = dslmngr.o main.o
OBJS += dslmngr_nl.o

LIBDSL = libbbfdsl.so
LIBDSLOBJS = bbf_plugin/dsl.o \
	     bbf_plugin/plugin.o \
	     bbf_plugin/fast.o \
	     bbf_plugin/atm.o \
	     bbf_plugin/ptm.o

CODECOVERAGE_SRC = dslmngr.c

PROG_CFLAGS = $(CFLAGS) $(DIAG_CFLAGS) -fstrict-aliasing -fPIC
PROG_LDFLAGS = $(LDFLAGS) -ldsl -leasy
PROG_LDFLAGS += -pthread -luci -lubus -lubox -ljson-c -lblobmsg_json -lnl-genl-3 -lnl-3

ifeq ($(TARGET_PLATFORM),INTEL)
PROG_LDFLAGS += -L/opt/intel/usr/lib -ldslfapi -lhelper -lsysfapi
else ifeq ($(TARGET_PLATFORM),AIROHA)
PROG_CFLAGS += -DAIROHA
endif

all: $(PROG) $(LIBDSL)

%.o: %.c
	$(CC) $(PROG_CFLAGS) $(FPIC) -c -o $@ $<

$(PROG): $(OBJS)
	$(CC) -o $@ $^ $(PROG_LDFLAGS)

$(LIBDSL): $(LIBDSLOBJS)
	$(CC) $(LDFLAGS) -shared -o $@ $^

unit-test: coverage
	make -C test/cmocka unit-test

functional-test: coverage
	make -C test/cmocka functional-test

coverage: CFLAGS  += -g -O0 -fprofile-arcs -ftest-coverage -I/usr/include/libnl3
coverage: LDFLAGS += --coverage
coverage: dslmngr libdslmngr.so
	$(GCOV) $(CODECOVERAGE_SRC)

libdslmngr.so: ${OBJS}
	${CC} -shared -o $@ $^ ${LDFLAGS}

clean:
	rm -f *.o *.so $(PROG)
	rm -f *.xml *.html
	find -name '*.gcda' -exec rm {} -fv \;
	find -name '*.gcno' -exec rm {} -fv \;
	find -name '*.gcov' -exec rm {} -fv \;
	make -C test/cmocka clean

.PHONY: clean
