.PHONY: clean
CC=gcc
DEBUG?=0

DPI_SDK?=../../../../../..
IXE_PLUGIN_VER?=1.0.0-20
FLOWTABLE_PLUGIN_VER?=$(IXE_PLUGIN_VER)

VPP_DIR_INCLUDE?=/usr/include
VPP_DIR_INSTALL?=/lib/x86_64-linux-gnu/vpp_plugins
VPP_DIR_JSON_INSTALL?=/usr/share/vpp/api/plugins

VPP_PLUGIN_DIR_OBJ = obj
VPP_PLUGIN_DIR_LIB = lib
VPP_PLUGIN_DIR_API = api

VPP_PLUGIN_API = flowtable.api
VPP_PLUGIN_API_H = $(VPP_PLUGIN_API).h
VPP_PLUGIN_API_JSON = $(VPP_PLUGIN_API).json

VPP_PLUGIN_LIB = flowtable_plugin.so

IXE_SDK_DIR_INCLUDE=$(DPI_SDK)/include
IXE_SDK_DIR_LIB=$(DPI_SDK)/lib

CFLAGS = -fPIC -O3 -I$(IXE_SDK_DIR_INCLUDE) -I. -I.. -I$(VPP_PLUGIN_DIR_API) -I$(VPP_DIR_INCLUDE) -DFLOWTABLE_PLUGIN_VER=\"$(FLOWTABLE_PLUGIN_VER)\"
ifneq ($(DEBUG), 0)
CFLAGS += -DDEBUG=$(DEBUG)
endif
LDFLAGS = -shared -fPIC -L$(IXE_SDK_DIR_LIB)

LIBS = -lqmengine

DEPS = flowdata.h \
       flowtable.h \
       flowtable_tcp.h

SRCS = flowtable.c \
       flowtable_node.c \
       flowtable_log.c \
       flowtable_stats.c \
       flowtable_api.c
_OBJ := $(SRCS:.c=.o)
OBJ = $(patsubst %,$(VPP_PLUGIN_DIR_OBJ)/%,$(_OBJ))

TARGET=$(VPP_PLUGIN_DIR_LIB)/$(VPP_PLUGIN_LIB)

all: $(TARGET)

$(VPP_PLUGIN_DIR_OBJ)/%.o: %.c $(DEPS)
	$(CC) -c $(CFLAGS) $< -o $@

$(VPP_PLUGIN_DIR_API):
	 mkdir -p $(VPP_PLUGIN_DIR_API)

$(VPP_PLUGIN_API_H): $(VPP_PLUGIN_API) $(VPP_PLUGIN_DIR_API)
	vppapigen --input $< --outputdir $(VPP_PLUGIN_DIR_API) --output $@

$(VPP_PLUGIN_API_JSON): $(VPP_PLUGIN_API) $(VPP_PLUGIN_DIR_API)
	vppapigen --input $< --output $@ 'JSON'

$(VPP_PLUGIN_DIR_OBJ):
	mkdir -p $(VPP_PLUGIN_DIR_OBJ)

$(VPP_PLUGIN_DIR_LIB):
	mkdir -p $(VPP_PLUGIN_DIR_LIB)

$(TARGET): $(VPP_PLUGIN_API_H) $(VPP_PLUGIN_API_JSON)  $(VPP_PLUGIN_DIR_OBJ)  $(OBJ) $(VPP_PLUGIN_DIR_LIB)
	$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o $@

clean:
	rm -f $(VPP_PLUGIN_DIR_OBJ)/*.o $(VPP_PLUGIN_DIR_API)/* $(VPP_PLUGIN_DIR_LIB)/* $(VPP_PLUGIN_API_H) $(VPP_PLUGIN_API_JSON) *~ core
	rm -fd $(VPP_PLUGIN_DIR_OBJ)
	rm -fd $(VPP_PLUGIN_DIR_API)
	rm -fd $(VPP_PLUGIN_DIR_LIB)

install: $(TARGET)
	cp $(TARGET) $(VPP_DIR_INSTALL)
	cp $(VPP_PLUGIN_API_JSON) $(VPP_DIR_JSON_INSTALL) 

uninstall:
	rm -f $(VPP_DIR_INSTALL)/$(VPP_PLUGIN_LIB)
	rm -f $(VPP_DIR_JSON_INSTALL)/$(VPP_PLUGIN_API_JSON)
