| 
					
				 | 
			
			
				@@ -0,0 +1,49 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Minimum CMake required
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+cmake_minimum_required(VERSION 2.8)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Project
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+project(HelloWorld CXX)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Protobuf
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+set(protobuf_MODULE_COMPATIBLE TRUE)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+find_package(protobuf CONFIG REQUIRED)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+message(STATUS "Using protobuf ${protobuf_VERSION}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# gRPC
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+find_package(gRPC CONFIG REQUIRED)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+message(STATUS "Using gRPC ${gRPC_VERSION}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# gRPC C++ plugin
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+get_target_property(gRPC_CPP_PLUGIN_EXECUTABLE gRPC::grpc_cpp_plugin
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    IMPORTED_LOCATION_RELEASE)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Proto file
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+get_filename_component(hw_proto_path "${hw_proto}" PATH)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Generated sources
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+protobuf_generate_cpp(hw_proto_srcs hw_proto_hdrs "${hw_proto}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.h")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+add_custom_command(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      OUTPUT "${hw_grpc_srcs}" "${hw_grpc_hdrs}"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      COMMAND protobuf::protoc
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}" -I "${hw_proto_path}"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        --plugin=protoc-gen-grpc="${gRPC_CPP_PLUGIN_EXECUTABLE}"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "${hw_proto}"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      DEPENDS "${hw_proto}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Generated include directory
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+include_directories("${CMAKE_CURRENT_BINARY_DIR}")
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Targets greeter_[async_](client|server)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+foreach(_target
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  greeter_client greeter_server
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  greeter_async_client greeter_async_server)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  add_executable(${_target} "${_target}.cc"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ${hw_proto_srcs}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ${hw_grpc_srcs})
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  target_link_libraries(${_target}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protobuf::libprotobuf
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gRPC::grpc++_unsecure)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+endforeach()
 
			 |