aboutsummaryrefslogtreecommitdiffhomepage
path: root/cpp
diff options
context:
space:
mode:
authorGravatar Nicolas "Pixel" Noble <pixel@nobis-crew.org>2015-02-20 22:56:43 +0100
committerGravatar Nicolas "Pixel" Noble <pixel@nobis-crew.org>2015-02-20 22:57:13 +0100
commitb7538ee7554fde3e5225db379c816ed78f4c93f7 (patch)
treec9b754b6114a57822a19e8b964147c0d0cb31eec /cpp
parent29d4c0a4e46fd2b08374e9c6b86a9bf43476a894 (diff)
Improving user experience.
Diffstat (limited to 'cpp')
-rw-r--r--cpp/helloworld/Makefile79
1 files changed, 71 insertions, 8 deletions
diff --git a/cpp/helloworld/Makefile b/cpp/helloworld/Makefile
index b9579e0c96..83f2ad4904 100644
--- a/cpp/helloworld/Makefile
+++ b/cpp/helloworld/Makefile
@@ -29,19 +29,82 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
-CXX=g++
-CPPFLAGS=-I/usr/local/include -pthread
-CXXFLAGS=-std=c++11
-LDFLAGS=-L/usr/local/lib -lgrpc -lgrpc++ -lprotobuf -lpthread -ldl
+CXX = g++
+CPPFLAGS = -I/usr/local/include -pthread
+CXXFLAGS = -std=c++11
+LDFLAGS = -L/usr/local/lib -lgrpc -lgrpc++ -lprotobuf -lpthread -ldl
+PROTOC = protoc
+GRPC_CPP_PLUGIN = grpc_cpp_plugin
+GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
-all: greeter_client greeter_server
+PROTOS_PATH = ../../protos
+
+vpath %.proto $(PROTOS_PATH)
+
+all: system-check greeter_client greeter_server
greeter_client: helloworld.pb.o greeter_client.o
- $(CXX) $(CPPFLAGS) $^ $(LDFLAGS) -o $@
+ $(CXX) $^ $(LDFLAGS) -o $@
greeter_server: helloworld.pb.o greeter_server.o
- $(CXX) $(CPPFLAGS) $^ $(LDFLAGS) -o $@
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+%.pb.cc: %.proto
+ $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
clean:
- rm -f *.o greeter_client greeter_server
+ rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server
+
+
+# The following is to test your system and ensure a smoother experience.
+# They are by no means necessary to actually compile a grpc-enabled software.
+
+PROTOC_CMD = which $(PROTOC)
+PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
+PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
+HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
+ifeq ($(HAS_PROTOC),true)
+HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
+endif
+HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)
+
+SYSTEM_OK = false
+ifeq ($(HAS_VALID_PROTOC),true)
+ifeq ($(HAS_PLUGIN),true)
+SYSTEM_OK = true
+endif
+endif
+system-check:
+ifneq ($(HAS_VALID_PROTOC),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have protoc 3.0.0 installed in your path."
+ @echo "Please install Google protocol buffers 3.0.0 and its compiler."
+ @echo "You can find it here:"
+ @echo
+ @echo " https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-1"
+ @echo
+ @echo "Here is what I get when trying to evaluate your version of protoc:"
+ @echo
+ -$(PROTOC) --version
+ @echo
+ @echo
+endif
+ifneq ($(HAS_PLUGIN),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have the grpc c++ protobuf plugin installed in your path."
+ @echo "Please install grpc. You can find it here:"
+ @echo
+ @echo " https://github.com/grpc/grpc"
+ @echo
+ @echo "Here is what I get when trying to detect if you have the plugin:"
+ @echo
+ -which $(GRPC_CPP_PLUGIN)
+ @echo
+ @echo
+endif
+ifneq ($(SYSTEM_OK),true)
+ @false
+endif