CXX = g++
CPPFLAGS += `pkg-config --cflags protobuf grpc`
CXXFLAGS += -std=c++11
ifeq ($(SYSTEM),Darwin)
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
           -lgrpc++_reflection\
           -ldl
else
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
           -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
           -ldl
endif
PROTOC = protoc
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`

PROTOS_PATH = ../protos

vpath %.proto $(PROTOS_PATH)

all: client server

client: vrp.pb.o vrp.grpc.pb.o client.o
	$(CXX) $^ $(LDFLAGS) -o ../bin/$@

server: vrp.pb.o vrp.grpc.pb.o server.o
	$(CXX) $^ $(LDFLAGS) -o ../bin/$@
	
client.o: client.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o client.o client.cpp
	
server.o: server.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o server.o server.cpp

%.grpc.pb.cc: %.proto
	$(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<

%.pb.cc: %.proto
	$(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<

clean:
	rm -f *.o *.pb.cc *.pb.h

