OUTNAME	= pfdump
BASEDIR	=.
OUTDIR	=../../build
OBJDIR	=./build_tmp
SRCDIR	=$(BASEDIR)

SRC_LIST	=$(shell find $(SRCDIR) -maxdepth 2 -name "*.cpp")
OBJ_LIST	=$(addprefix $(OBJDIR)/,$(notdir $(addsuffix .o, $(basename $(SRC_LIST)))))
DEP_LIST	=$(OBJ_LIST:.o=.d)

CC	= g++
INCLUDES	=$(BASEDIR) $(BASEDIR)/../../../../protocolfilters/include $(BASEDIR)/../../../../include $(BASEDIR)/../../..
CPPFLAGS	= -g -O3 -std=gnu++11 -pthread -MMD -MP $(addprefix -I,$(INCLUDES))

LIBS		= -lprotocolfilters -lssl -lcrypto -lzlib -lbr -lzstd -lnfproxy -lrt -pthread -ldl
LIB_DIR		= -L./../../../../protocolfilters/build -L./../../../../protocolfilters/build_linux_demo_x64 -L./../../nfproxy/build 

LINK		=ld
LINK_FLAGS	=-no-pie -pthread

AR = ar
ARFLAGS = cru

BUILD_CMD=  if [ -d "$$dir" ]; then \
	    (	cd $$dir && echo "making $$target in $$dir..." && \
		$(MAKE) TOP=.. DIR=$$dir $$target \
	    ) || exit 1; \
	    fi
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done

.PHONY: all clean mkdirs

all: $(OUTDIR)/$(OUTNAME)

mkdirs: | $(OUTDIR) $(OBJDIR)

$(OBJDIR) $(OUTDIR):
	mkdir -p $@

clean: 
	rm -f $(OBJDIR)/*.o $(OBJDIR)/*.d
	rm -f $(OUTDIR)/$(OUTNAME)

$(OBJ_LIST): $(SRC_LIST) | $(OBJDIR)
	$(CC) $(CPPFLAGS) -o $@ -c $(filter %/$(notdir $(basename $@)).cpp,$(SRC_LIST)) 

$(OUTDIR)/$(OUTNAME): $(OBJ_LIST) | $(OUTDIR)
	$(CC) -o $@ $(LINK_FLAGS) $(OBJ_LIST) $(LIB_DIR) $(LIBS)

-include $(DEP_LIST)