• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright 2015 gRPC authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
18SYSTEM ?= $(HOST_SYSTEM)
19CXX = g++
20CPPFLAGS += `pkg-config --cflags protobuf grpc`
21CXXFLAGS += -std=c++11
22ifeq ($(SYSTEM),Darwin)
23LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
24           -pthread\
25           -lgrpc++_reflection\
26           -ldl
27else
28LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
29           -pthread\
30           -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
31           -ldl
32endif
33PROTOC = protoc
34GRPC_CPP_PLUGIN = grpc_cpp_plugin
35GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
36
37PROTOS_PATH = ../../protos
38
39vpath %.proto $(PROTOS_PATH)
40
41all: system-check greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server
42
43greeter_client: helloworld.pb.o helloworld.grpc.pb.o greeter_client.o
44	$(CXX) $^ $(LDFLAGS) -o $@
45
46greeter_server: helloworld.pb.o helloworld.grpc.pb.o greeter_server.o
47	$(CXX) $^ $(LDFLAGS) -o $@
48
49greeter_async_client: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client.o
50	$(CXX) $^ $(LDFLAGS) -o $@
51
52greeter_async_client2: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client2.o
53	$(CXX) $^ $(LDFLAGS) -o $@
54
55greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server.o
56	$(CXX) $^ $(LDFLAGS) -o $@
57
58.PRECIOUS: %.grpc.pb.cc
59%.grpc.pb.cc: %.proto
60	$(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
61
62.PRECIOUS: %.pb.cc
63%.pb.cc: %.proto
64	$(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
65
66clean:
67	rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server
68
69
70# The following is to test your system and ensure a smoother experience.
71# They are by no means necessary to actually compile a grpc-enabled software.
72
73PROTOC_CMD = which $(PROTOC)
74PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
75PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
76HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
77ifeq ($(HAS_PROTOC),true)
78HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
79endif
80HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)
81
82SYSTEM_OK = false
83ifeq ($(HAS_VALID_PROTOC),true)
84ifeq ($(HAS_PLUGIN),true)
85SYSTEM_OK = true
86endif
87endif
88
89system-check:
90ifneq ($(HAS_VALID_PROTOC),true)
91	@echo " DEPENDENCY ERROR"
92	@echo
93	@echo "You don't have protoc 3.0.0 installed in your path."
94	@echo "Please install Google protocol buffers 3.0.0 and its compiler."
95	@echo "You can find it here:"
96	@echo
97	@echo "   https://github.com/google/protobuf/releases/tag/v3.0.0"
98	@echo
99	@echo "Here is what I get when trying to evaluate your version of protoc:"
100	@echo
101	-$(PROTOC) --version
102	@echo
103	@echo
104endif
105ifneq ($(HAS_PLUGIN),true)
106	@echo " DEPENDENCY ERROR"
107	@echo
108	@echo "You don't have the grpc c++ protobuf plugin installed in your path."
109	@echo "Please install grpc. You can find it here:"
110	@echo
111	@echo "   https://github.com/grpc/grpc"
112	@echo
113	@echo "Here is what I get when trying to detect if you have the plugin:"
114	@echo
115	-which $(GRPC_CPP_PLUGIN)
116	@echo
117	@echo
118endif
119ifneq ($(SYSTEM_OK),true)
120	@false
121endif
122