DEBUG ?= 0
ENABLE_BREAKPAD ?= 0

CXXFLAGS += -gdwarf -g -Wall -Wno-unused-variable -Wno-unused-function -std=c++11
CXX = g++

INCS = -I../include \
	`pkg-config --cflags libevent`

LIBS = `pkg-config --libs libevent` \
	-lpthread \
	-levent_pthreads

ifeq ($(DEBUG),1)
CXXFLAGS += -DDEBUG -O0
else
CXXFLAGS += -DNDEBUG -O3
endif

ifeq ($(ENABLE_BREAKPAD),1)
INCS += `pkg-config --cflags breakpad`
LIBS += `pkg-config --libs breakpad`
endif

OUT_DIR = ./build
OBJ_DIR = $(OUT_DIR)/objs

all: make_dir bench bench_client demo server_demo server_demo_libevent


.PHONY : make_dir
make_dir:
	-mkdir -p $(OBJ_DIR)


$(OBJ_DIR)/bench.o : bench/bench.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/bench.o $(INCS)

$(OBJ_DIR)/bench_client.o : bench_client/bench_client.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/bench_client.o $(INCS)

$(OBJ_DIR)/demo.o : demo/demo.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/demo.o $(INCS)

$(OBJ_DIR)/server_demo.o : server_demo/server_demo.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/server_demo.o $(INCS)

$(OBJ_DIR)/server_demo_libevent.o : server_demo_libevent/server_demo_libevent.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJ_DIR)/server_demo_libevent.o $(INCS)


bench: $(OBJ_DIR)/bench.o
	$(CXX) $^ $(LDFLAGS) -o $(OUT_DIR)/bench $(LIBS)

bench_client: $(OBJ_DIR)/bench_client.o
	$(CXX) $^ $(LDFLAGS) -o $(OUT_DIR)/bench_client $(LIBS)

demo: $(OBJ_DIR)/demo.o
	$(CXX) $^ $(LDFLAGS) -o $(OUT_DIR)/demo $(LIBS)

server_demo: $(OBJ_DIR)/server_demo.o
	$(CXX) $^ $(LDFLAGS) -o $(OUT_DIR)/server_demo $(LIBS)

server_demo_libevent: $(OBJ_DIR)/server_demo_libevent.o
	$(CXX) $^ $(LDFLAGS) -o $(OUT_DIR)/server_demo_libevent $(LIBS)



.PHONY : clean
clean:
	-rm -rf $(OUT_DIR)