1 2.PHONY: clean 3 4DISABLE_NUMA=@NONUMA@ 5ENABLE_DPDK=@DPDK@ 6ENABLE_PCAP=@PCAP@ 7ENABLE_DPDKR=@DPDKR@ 8ENABLE_NETMAP=@NETMAP@ 9 10### TARGET ### 11MTCP_LIB_DIR=../lib 12MTCP_LIB=libmtcp.a 13 14MTCP_HDR_DIR=../include 15MTCP_HDR = mtcp_api.h mos_api.h mtcp_epoll.h mtcp_util.h 16 17 18### GCC ### 19GCC = @CC@ 20GCC_OPT = -m64 -Wall -fPIC -DNEWEV -fgnu89-inline -Werror 21 22#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE -DTSTAT -DAPP -DEPOLL 23#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE 24#DBG_OPT += -DPKTDUMP 25#DBG_OPT += -DDUMP_STREAM 26#GCC_OPT += -g -DNETSTAT -DINFO -DDBGERR -DDBGCERR 27GCC_OPT += -DNDEBUG -O3 -g -DNETSTAT -DINFO -DDBGERR -DDBGCERR 28GCC_OPT += $(DBG_OPT) 29 30ifeq ($V,) # no echo 31 export MSG=@echo 32 export HIDE=@ 33else 34 export MSG=@\# 35 export HIDE= 36endif 37 38### LIBRARIES AND INCLUDES ### 39INC_DIR=./include 40INC= -I$(INC_DIR) -I$(INC_DIR)/bpf 41 42ifeq ($(shell uname), Darwin) 43GCC_OPT += -DDARWIN -Wno-deprecated -Dinline='' 44endif 45 46LIBS = -lpthread -lrt 47ifeq ($(DISABLE_NUMA), 1) 48GCC_OPT += -DDISABLE_NUMA 49LIBS += -lnuma 50endif 51 52ifeq ($(ENABLE_DPDK), 1) 53# DPDK LIBRARY and HEADER 54DPDK_INC=../../drivers/dpdk/include 55DPDK_LIB=../../drivers/dpdk/lib/ 56# CFLAGS for DPDK-related compilation 57DPDK_MACHINE_FLAGS = $(shell cat $(DPDK_INC)/cflags.txt) 58INC += -DENABLE_DPDK ${DPDK_MACHINE_FLAGS} -I${DPDK_INC} -include $(DPDK_INC)/rte_config.h 59LIBS += -export-dynamic -L$(DPDK_LIB) 60endif 61 62ifeq ($(ENABLE_PCAP), 1) 63# PacketShader LIBRARY and HEADER 64GCC_OPT += -D__thread="" -DBE_RESILIENT_TO_PACKET_DROP 65INC += -DENABLE_PCAP 66LIBS += -lpcap 67endif 68 69ifeq ($(ENABLE_NETMAP), 1) 70INC += -DENABLE_NETMAP 71endif 72 73ifeq ($(ENABLE_DPDKR), 1) 74## DPDK RING (VIRTUAL PORT) 75DPDK_INC=../../../ovs-l7/dpdk-2.0.0/x86_64-native-linuxapp-gcc/include 76DPDK_LIB=../../../ovs-l7/dpdk-2.0.0/x86_64-native-linuxapp-gcc/lib 77# CFLAGS for DPDK-related compilation 78#DPDK_MACHINE_FLAGS = $(shell cat $(DPDK_INC)/cflags.txt) 79INC += -DENABLE_DPDKR ${DPDK_MACHINE_FLAGS} -I${DPDK_INC} -include $(DPDK_INC)/rte_config.h 80INC += -I../../../ovs-l7/ovs -I/usr/include # dpdkr 81INC += -mssse3 # dpdkr 82LIBS += -export-dynamic -L$(DPDK_LIB) 83endif 84 85### SOURCE CODE ### 86SRCS = core.c tcp_stream.c config.c api.c mos_api.c eventpoll.c socket.c pipe.c \ 87 tcp_util.c eth_in.c ip_in.c tcp.c tcp_in.c eth_out.c ip_out.c tcp_out.c \ 88 arp.c timer.c cpu.c util.c addr_pool.c fhash.c memory_mgt.c logger.c debug.c \ 89 tcp_rb_frag_queue.c tcp_send_buffer.c tcp_sb_queue.c tcp_stream_queue.c \ 90 bpf/sf_bpf_filter.c bpf/sfbpf-int.c bpf/sf_gencode.c bpf/sf_grammar.c \ 91 bpf/sf_nametoaddr.c bpf/sf_optimize.c bpf/sf_scanner.c \ 92 event_callback.c tcp_rb.c icmp.c scalable_event.c key_value_store.c 93 94ifeq ($(ENABLE_DPDK), 1) 95SRCS += dpdk_module.c 96endif 97 98ifeq ($(ENABLE_PCAP), 1) 99SRCS += pcap_module.c 100endif 101 102ifeq ($(ENABLE_DPDKR), 1) 103SRCS += dpdkr_module.c 104endif 105 106ifeq ($(ENABLE_NETMAP), 1) 107SRCS += netmap_module.c 108endif 109 110OBJS = $(patsubst %.c,%.o,$(SRCS)) 111DEPS = $(patsubst %.c,.%.d,$(SRCS)) 112 113 114### GOALS ### 115default: $(OBJS) 116 mkdir -p $(MTCP_LIB_DIR) 117 $(MSG) " AR $(MTCP_LIB)" 118 $(HIDE) ar rvs $(MTCP_LIB_DIR)/$(MTCP_LIB) $(OBJS) 119 120$(OBJS): %.o: %.c Makefile 121 $(MSG) " CC $<" 122 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -c $< -o $@ 123$(DEPS): .%.d: %.c Makefile 124 @mkdir -p .bpf 125 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -MM $(CFLAGS) $< > $@ 126 127-include $(DEPS) 128 129clean: clean-library 130 rm -f *.o *~ core 131 rm -rf .*.d tags .bpf 132 133clean-library: 134 rm -f $(MTCP_LIB_DIR)/* 135 136tags: 137 find -name '*.c' -or -name '*.h' | xargs ctags 138