1 2.PHONY: clean 3 4SHELL := /bin/bash 5DISABLE_NUMA=@NONUMA@ 6ENABLE_DPDK=@DPDK@ 7ENABLE_PCAP=@PCAP@ 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 73### SOURCE CODE ### 74SRCS = core.c tcp_stream.c config.c api.c mos_api.c eventpoll.c socket.c pipe.c \ 75 tcp_util.c eth_in.c ip_in.c tcp.c tcp_in.c eth_out.c ip_out.c tcp_out.c \ 76 arp.c timer.c cpu.c util.c addr_pool.c fhash.c memory_mgt.c logger.c debug.c \ 77 tcp_rb_frag_queue.c tcp_send_buffer.c tcp_sb_queue.c tcp_stream_queue.c \ 78 bpf/sf_bpf_filter.c bpf/sfbpf-int.c bpf/sf_gencode.c bpf/sf_grammar.c \ 79 bpf/sf_nametoaddr.c bpf/sf_optimize.c bpf/sf_scanner.c \ 80 event_callback.c tcp_rb.c icmp.c scalable_event.c key_value_store.c 81 82ifeq ($(ENABLE_DPDK), 1) 83SRCS += dpdk_module.c 84endif 85 86ifeq ($(ENABLE_PCAP), 1) 87SRCS += pcap_module.c 88endif 89 90ifeq ($(ENABLE_NETMAP), 1) 91SRCS += netmap_module.c 92endif 93 94OBJS = $(patsubst %.c,%.o,$(SRCS)) 95DEPS = $(patsubst %.c,.%.d,$(SRCS)) 96 97 98### GOALS ### 99default: $(OBJS) 100 mkdir -p $(MTCP_LIB_DIR) 101 $(MSG) " AR $(MTCP_LIB)" 102 $(HIDE) ar rvs $(MTCP_LIB_DIR)/$(MTCP_LIB) $(OBJS) 103 104$(OBJS): %.o: %.c Makefile calcCPUs 105 $(MSG) " CC $<" 106 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -c $< -o $@ 107$(DEPS): .%.d: %.c Makefile 108 @mkdir -p .bpf 109 $(HIDE) $(GCC) $(GCC_OPT) $(INC) -MM $(CFLAGS) $< > $@ 110 111calcCPUs: 112 $(eval export GCC_OPT := $(GCC_OPT) -DMAX_CPUS=$(shell let cpus=`lscpu | grep "Core(s) per socket" | awk '{print \$$4}'`*`lscpu | grep "Socket(s)" | awk '{print \$$2}'`; echo $$cpus)) 113 114-include $(DEPS) 115 116clean: clean-library 117 rm -f *.o *~ core 118 rm -rf .*.d tags .bpf 119 120clean-library: 121 rm -f $(MTCP_LIB_DIR)/* 122 123tags: 124 find -name '*.c' -or -name '*.h' | xargs ctags 125