# Makefile
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
INSTALL_DIR ?= /usr/local/share/kbdpdk
MODULE_DIR ?= /lib/modules/`uname -r`/extra/dpdk
OUTPUT = out/
export RTE_SDK=$(ROOT_DIR)/DPDK/dpdk-stable

PKGCONF ?= pkg-config

ifeq ($(shell grep -q rhel /etc/os-release && echo 0),0)
export PKG_CONFIG_PATH=--with-path /usr/local/lib64/pkgconfig/
endif

ifneq ($(shell $(PKGCONF) --exists libdpdk $(PKG_CONFIG_PATH) && echo 0),0)
$(error "no installation of DPDK found")
endif

ifeq ($(RTE_SDK),)
$(error "Please define RTE_SDK environment variable")
endif

CC=g++
CXX-suffix=cpp

# binary name
TARGETNAME := libkbapi.so
VERSION := $(shell cat $(ROOT_DIR)/version)
MAJOR := $(shell cut -d. -f1 $(ROOT_DIR)/version)
MINOR := $(shell cut -d. -f2 $(ROOT_DIR)/version)
LIB := $(TARGETNAME).$(VERSION)
LIBSONAME := $(TARGETNAME).$(MAJOR).$(MINOR)

LDFLAGS_STATIC = $(shell $(PKGCONF) $(PKG_CONFIG_PATH) --static --libs libdpdk)

SRCS-y := kbapi.o
PC_FILE := $(shell $(PKGCONF) $(PKG_CONFIG_PATH) --path libdpdk 2>/dev/null)
CFLAGS = -O3 -I/usr/local/include -DALLOW_EXPERIMENTAL_API
DYNAMIC_LIBS =-Wl,--no-whole-archive -lnuma -pthread -ldl -lm -lstdc++ 
LDFLAGS = -shared $(LDFLAGS_STATIC) $(DYNAMIC_LIBS)

# we must create the output dir first and recall the same Makefile
# from this directory
ifeq ($(NOT_FIRST_CALL),)

NOT_FIRST_CALL = 1
export NOT_FIRST_CALL

all:
	$(Q)cp $(RTE_SDK)/ABI_VERSION $(ROOT_DIR)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $(LIB) $(SRCS-y)

%::
	$(Q)cp $(RTE_SDK)/ABI_VERSION $(ROOT_DIR)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $(LIB) $(SRCS-y)
else
include $(RTE_SDK)/mk/rte.lib.mk
SONAME := $(LIBSONAME)
endif
