#
# Makefile for the PF_RING API example programs
#
# Try to make both programs written on top of the
# PF_RING library and programs originally written
# on top of PCAP library and linked now to use
# the version with PF_RING aware functionalities.
#



#
# PF_RING
#
PFRINGDIR  = ../lib
LIBPFRING  = ${PFRINGDIR}/libpfring.a

#
# DNA Support
DNA_DEFINE = #-DENABLE_DNA_SUPPORT

#
# PF_RING aware libpcap
#
O_FLAG     = -O2 -DHAVE_PF_RING
EXTRA_LIBS =
PCAPDIR    = ../libpcap-1.1.1-ring
LIBPCAP    = ${PCAPDIR}/libpcap.a  ${EXTRA_LIBS}

#
# Search directories
#
PFRING_KERNEL=../../kernel
INCLUDE    = -I${PFRING_KERNEL} -I${PFRING_KERNEL}/plugins -I${PFRINGDIR} -I${PCAPDIR}

#
# C compiler and flags
#
#
# CROSS_COMPILE=arm-mv5sft-linux-gnueabi-
#
CC         = ${CROSS_COMPILE}gcc #--platform=native
CFLAGS     = @CFLAGS@ ${O_FLAG} -Wall ${INCLUDE} ${DNA_DEFINE} @HAVE_ZERO@ @HAVE_BPF@ -O2 # -g
# LDFLAGS  =

#
# User and System libraries
#
LIBS       = ${LIBPFRING} @DAG_LIB@ -lpthread @SYSLIBS@ @BPF_LIB@  @SILICOM_LIBS@ @REDIS_LIB@ -lrt

# How to make an object file
%.o: %.c pfutils.c
#	@echo "=*= making object $@ =*="
	${CC} ${CFLAGS} -c $< -o $@

#
# Main targets
#
PFPROGS   = pfcount pfcount_multichannel preflect pfbounce pfmap \
	    pfbridge alldevs dummy_plugin_pfcount pcap2nspcap pfcount_dummy_plugin pffilter_test \
	    pfcount_aggregator pfcount_bundle pfcount_82599 pfsystest pfsend pflatency \
	    pfdump

ifneq (@HAVE_ZERO@,)
	PFPROGS += pfdnabounce pfdnacluster_master pfdnacluster_multithread pfdnacluster_mt_rss_frwd
endif

PCAPPROGS = pcount pfwrite
TARGETS   = ${PFPROGS} ${PCAPPROGS}

RCOBJS    = ringc.o interval.o
RSOBJS    = rings.o interval.o
RMOBJS    = ringm.o interval.o
RPOBJS    = pcaps.o interval.o

all: ${TARGETS}

ringc: ${RCOBJS} ${LIBPFRING}
	${CC} ${CFLAGS} ${RCOBJS} ${LIBS} -o $@

rings: ${RSOBJS} ${LIBPFRING}
	${CC} ${CFLAGS} ${RSOBJS} ${LIBS} -o $@

ringm: ${RMOBJS} ${LIBPFRING}
	${CC} ${CFLAGS} ${RMOBJS} ${LIBS} -o $@

pcaps: ${RPOBJS}
	${CC} ${CFLAGS} ${RPOBJS} ${LIBPCAP} ${LIBS} -o $@

pfcount: pfcount.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount.o ${LIBS} -o $@

dummy_plugin_pfcount: dummy_plugin_pfcount.o ${LIBPFRING}
	${CC} ${CFLAGS} dummy_plugin_pfcount.o ${LIBS} -o $@

pffilter_test: pffilter_test.o ${LIBPFRING}
	${CC} ${CFLAGS} pffilter_test.o ${LIBS} -o $@

pcap2nspcap: pcap2nspcap.o ${LIBPFRING}
	${CC} ${CFLAGS} pcap2nspcap.o ${LIBPCAP} ${LIBS} -o $@

pfcount_multichannel: pfcount_multichannel.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount_multichannel.o ${LIBS} -o $@

pfcount_82599: pfcount_82599.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount_82599.o ${LIBS} -o $@

pfcount_bundle: pfcount_bundle.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount_bundle.o ${LIBS} -o $@

pfcount_dummy_plugin: pfcount_dummy_plugin.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount_dummy_plugin.o ${LIBS} -o $@

pfcount_aggregator: pfcount_aggregator.o ${LIBPFRING}
	${CC} ${CFLAGS} pfcount_aggregator.o ${LIBS} -o $@

preflect: preflect.o ${LIBPFRING}
	${CC} ${CFLAGS} preflect.o ${LIBPCAP} ${LIBS} -o $@

pfbounce: pfbounce.o ${LIBPFRING}
	${CC} ${CFLAGS} pfbounce.o ${LIBPCAP} ${LIBS} -o $@

pfdnabounce: pfdnabounce.o ${LIBPFRING}
	${CC} ${CFLAGS} pfdnabounce.o ${LIBPCAP} ${LIBS} -o $@

pfsend: pfsend.o ${LIBPFRING}
	${CC} ${CFLAGS} pfsend.o ${LIBPCAP} ${LIBS} -o $@

pflatency: pflatency.o ${LIBPFRING}
	${CC} ${CFLAGS} pflatency.o ${LIBPCAP} ${LIBS} -o $@

pftwin: pftwin.o ${LIBPFRING}
	${CC} ${CFLAGS} pftwin.o ${LIBS} -o $@

ptwin: ptwin.o ${LIBPFRING}
	${CC} ${CFLAGS} ptwin.o ${LIBPCAP} ${LIBS} -o $@

pfmap: pfmap.o ${LIBPFRING}
	${CC} ${CFLAGS} pfmap.o ${LIBS} -o $@

pfbridge: pfbridge.o ${LIBPFRING}
	${CC} ${CFLAGS} pfbridge.o ${LIBS} -o $@

pcount: pcount.o ${LIBPCAP} ${LIBPFRING}
	${CC} ${CFLAGS} pcount.o ${LIBPCAP} ${LIBS} -o $@

alldevs: alldevs.o ${LIBPCAP} ${LIBPFRING}
	${CC} ${CFLAGS} alldevs.o ${LIBPCAP} ${LIBS} -o $@

pfwrite: pfwrite.o ${LIBPCAP} ${LIBPFRING}
	${CC} ${CFLAGS} pfwrite.o ${LIBPCAP} ${LIBS} -o $@

pfsystest: pfsystest.o ${LIBPFRING}
	${CC} ${CFLAGS} pfsystest.o ${LIBS} -o $@

pfdnacluster_master: pfdnacluster_master.o ${LIBPFRING}
	${CC} ${CFLAGS} pfdnacluster_master.o ${LIBS} -o $@

pfdnacluster_multithread: pfdnacluster_multithread.o ${LIBPFRING}
	${CC} ${CFLAGS} pfdnacluster_multithread.o ${LIBS} -o $@

pfdnacluster_mt_rss_frwd: pfdnacluster_mt_rss_frwd.o ${LIBPFRING}
	${CC} ${CFLAGS} pfdnacluster_mt_rss_frwd.o ${LIBS} -o $@

pfdump: pfdump.o ${LIBPFRING}
	${CC} ${CFLAGS} pfdump.o ${LIBS} -o $@

clean:
	@rm -f ${TARGETS} *.o *~
