OUTNAME	= passthrough
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)/../../../../include $(BASEDIR)/../../..
CPPFLAGS	= -g -O3 -std=gnu++11 -Wall -Wextra -pthread -MMD -MP $(addprefix -I,$(INCLUDES))

NFPROXY_OUTDIR	= ../../nfproxy/build
# -lrt is needed for clock_gettime with glibc < 2.17, harmless on newer ones
LIBS		= -lnfproxy -lrt -pthread
LIB_DIR		= -L$(NFPROXY_OUTDIR)

LINK		=ld
LINK_FLAGS	=-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) $(NFPROXY_OUTDIR)/libnfproxy.a | $(OUTDIR)
	$(CC) -o $@ $(LINK_FLAGS) $(OBJ_LIST) $(LIB_DIR) $(LIBS)

-include $(DEP_LIST)