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