1 2.PHONY: clean 3 4DISABLE_NUMA=@NONUMA@ 5ENABLE_DPDK=@DPDK@ 6ENABLE_PSIO=@PSIO@ 7ENABLE_PCAP=@PCAP@ 8ENABLE_DPDKR=@DPDKR@ 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 = gcc 20GCC_OPT = -m64 -Wall -fPIC -DNEWEV -DNEWRB -DNEWPPEEK -fgnu89-inline 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_PSIO), 1) 63# PacketShader LIBRARY and HEADER 64PS_DIR=../../../io_engine/io_engine-2.0.38.2 65LIB_DIR = -L$(PS_DIR)/lib 66INC += -DENABLE_PSIO -I$(PS_DIR)/include 67LIBS += -lps 68endif 69 70ifeq ($(ENABLE_PCAP), 1) 71# PacketShader LIBRARY and HEADER 72GCC_OPT += -D__thread="" -DBE_RESILIENT_TO_PACKET_DROP 73INC += -DENABLE_PCAP 74LIBS += -lpcap 75endif 76 77ifeq ($(ENABLE_DPDKR), 1) 78## DPDK RING (VIRTUAL PORT) 79DPDK_INC=../../../ovs-l7/dpdk-2.0.0/x86_64-native-linuxapp-gcc/include 80DPDK_LIB=../../../ovs-l7/dpdk-2.0.0/x86_64-native-linuxapp-gcc/lib 81# CFLAGS for DPDK-related compilation 82#DPDK_MACHINE_FLAGS = $(shell cat $(DPDK_INC)/cflags.txt) 83INC += -DENABLE_DPDKR ${DPDK_MACHINE_FLAGS} -I${DPDK_INC} -include $(DPDK_INC)/rte_config.h 84INC += -I../../../ovs-l7/ovs -I/usr/include # dpdkr 85INC += -mssse3 # dpdkr 86LIBS += -export-dynamic -L$(DPDK_LIB) 87endif 88 89ifeq ($(wildcard /usr/lib/libhugetlbfs.so),) 90else 91 GCC_OPT += -DHUGEPAGE 92endif 93 94### SOURCE CODE ### 95SRCS = core.c tcp_stream.c config.c api.c mos_api.c eventpoll.c socket.c pipe.c \ 96 tcp_util.c eth_in.c ip_in.c tcp.c tcp_in.c eth_out.c ip_out.c tcp_out.c \ 97 arp.c timer.c cpu.c util.c addr_pool.c fhash.c memory_mgt.c logger.c debug.c \ 98 tcp_rb_frag_queue.c tcp_ring_buffer.c tcp_send_buffer.c tcp_sb_queue.c tcp_stream_queue.c \ 99 bpf/sf_bpf_filter.c bpf/sfbpf-int.c bpf/sf_gencode.c bpf/sf_grammar.c \ 100 bpf/sf_nametoaddr.c bpf/sf_optimize.c bpf/sf_scanner.c \ 101 event_callback.c tcp_rb.c icmp.c scalable_event.c key_value_store.c 102 103ifeq ($(ENABLE_DPDK), 1) 104SRCS += dpdk_module.c 105endif 106 107ifeq ($(ENABLE_PSIO), 1) 108SRCS += psio_module.c 109endif 110 111ifeq ($(ENABLE_PCAP), 1) 112SRCS += pcap_module.c 113endif 114 115ifeq ($(ENABLE_DPDKR), 1) 116SRCS += dpdkr_module.c 117endif 118 119OBJS = $(patsubst %.c,%.o,$(SRCS)) 120DEPS = $(patsubst %.c,.%.d,$(SRCS)) 121 122 123### GOALS ### 124default: $(OBJS) 125 mkdir -p $(MTCP_LIB_DIR) 126 $(MSG) " AR $(MTCP_LIB)" 127 $(HIDE) ar rvs $(MTCP_LIB_DIR)/$(MTCP_LIB) $(OBJS) 128 129$(OBJS): %.o: %.c Makefile 130 $(MSG) " CC $<" 131 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -c $< -o $@ 132$(DEPS): .%.d: %.c Makefile 133 @mkdir -p .bpf 134 $(MSG) " CC $<" 135 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -MM $(CFLAGS) $< > $@ 136 137-include $(DEPS) 138 139clean: clean-library 140 rm -f *.o *~ core 141 rm -rf .*.d tags .bpf 142 143clean-library: 144 rm -f $(MTCP_LIB_DIR)/* 145 146tags: 147 find -name '*.c' -or -name '*.h' | xargs ctags 148