.PHONY: clean SHELL := /bin/bash DISABLE_NUMA=@NONUMA@ ENABLE_DPDK=@DPDK@ ENABLE_PCAP=@PCAP@ ENABLE_NETMAP=@NETMAP@ ### TARGET ### MTCP_LIB_DIR=../lib MTCP_LIB=libmtcp.a MTCP_HDR_DIR=../include MTCP_HDR = mtcp_api.h mos_api.h mtcp_epoll.h mtcp_util.h ### GCC ### GCC = @CC@ GCC_OPT = -m64 -Wall -fPIC -DNEWEV -fgnu89-inline -Werror #DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE -DTSTAT -DAPP -DEPOLL #DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE #DBG_OPT += -DPKTDUMP #DBG_OPT += -DDUMP_STREAM #GCC_OPT += -g -DNETSTAT -DINFO -DDBGERR -DDBGCERR GCC_OPT += -DNDEBUG -O3 -g -DNETSTAT -DINFO -DDBGERR -DDBGCERR GCC_OPT += $(DBG_OPT) ifeq ($V,) # no echo export MSG=@echo export HIDE=@ else export MSG=@\# export HIDE= endif ### LIBRARIES AND INCLUDES ### INC_DIR=./include INC= -I$(INC_DIR) -I$(INC_DIR)/bpf ifeq ($(shell uname), Darwin) GCC_OPT += -DDARWIN -Wno-deprecated -Dinline='' endif LIBS = -lpthread -lrt ifeq ($(DISABLE_NUMA), 1) GCC_OPT += -DDISABLE_NUMA LIBS += -lnuma endif ifeq ($(ENABLE_DPDK), 1) # DPDK LIBRARY and HEADER DPDK_INC=$(RTE_SDK)/$(RTE_TARGET)/include DPDK_LIB=$(RTE_SDK)/$(RTE_TARGET)/lib/ # CFLAGS for DPDK-related compilation include $(RTE_SDK)/mk/rte.vars.mk INC += -DENABLE_DPDK -I${DPDK_INC} -include $(DPDK_INC)/rte_config.h LIBS += -export-dynamic -L$(DPDK_LIB) endif ifeq ($(ENABLE_PCAP), 1) # PacketShader LIBRARY and HEADER GCC_OPT += -D__thread="" -DBE_RESILIENT_TO_PACKET_DROP INC += -DENABLE_PCAP LIBS += -lpcap endif ifeq ($(ENABLE_NETMAP), 1) INC += -DENABLE_NETMAP endif ### SOURCE CODE ### SRCS = core.c tcp_stream.c config.c api.c mos_api.c eventpoll.c socket.c pipe.c \ tcp_util.c eth_in.c ip_in.c tcp.c tcp_in.c eth_out.c ip_out.c tcp_out.c \ arp.c timer.c cpu.c util.c addr_pool.c fhash.c memory_mgt.c logger.c debug.c \ tcp_rb_frag_queue.c tcp_send_buffer.c tcp_sb_queue.c tcp_stream_queue.c \ bpf/sf_bpf_filter.c bpf/sfbpf-int.c bpf/sf_gencode.c bpf/sf_grammar.c \ bpf/sf_nametoaddr.c bpf/sf_optimize.c bpf/sf_scanner.c \ event_callback.c tcp_rb.c icmp.c scalable_event.c key_value_store.c ifeq ($(ENABLE_DPDK), 1) SRCS += dpdk_module.c endif ifeq ($(ENABLE_PCAP), 1) SRCS += pcap_module.c endif ifeq ($(ENABLE_NETMAP), 1) SRCS += netmap_module.c endif OBJS = $(patsubst %.c,%.o,$(SRCS)) DEPS = $(patsubst %.c,.%.d,$(SRCS)) ### GOALS ### default: $(OBJS) mkdir -p $(MTCP_LIB_DIR) $(MSG) " AR $(MTCP_LIB)" $(HIDE) ar rvs $(MTCP_LIB_DIR)/$(MTCP_LIB) $(OBJS) $(OBJS): %.o: %.c Makefile calcCPUs $(MSG) " CC $<" $(HIDE) $(GCC) $(GCC_OPT) $(INC) $(CFLAGS) -c $< -o $@ $(DEPS): .%.d: %.c Makefile @mkdir -p .bpf $(HIDE) $(GCC) $(GCC_OPT) $(INC) -MM $(CFLAGS) $< > $@ calcCPUs: $(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)) -include $(DEPS) clean: clean-library rm -f *.o *~ core rm -rf .*.d tags .bpf clean-library: rm -f $(MTCP_LIB_DIR)/* tags: find -name '*.c' -or -name '*.h' | xargs ctags