summaryrefslogtreecommitdiffstats
path: root/src/gnmi/proto/CMakeLists.txt
diff options
context:
space:
mode:
authorYohanPipereau <ypiperea@cisco.com>2019-03-12 14:15:26 +0100
committerHongjun Ni <hongjun.ni@intel.com>2019-03-18 00:51:36 +0000
commitd7680154981c54989bcbcab81173791dc1805512 (patch)
tree5a1e807c0cb91d478eca43d0f673daa4006fa124 /src/gnmi/proto/CMakeLists.txt
parentf8118bf32a5e5276f796c3f03095c2ee1a41423a (diff)
Fix Cmake build environment and harden Warnings
-Remove unused sweetcomb CmakeList.txt Warnings -Add more Warnings to plugins, scvpp and gNMI Cmake projects -Remove unused/useless Cmake options in CmakeList files & add comments -Improve gNMI CMakeList.txt and make it independant of a gRPC cmake build for later package integration. -Add FindGRPC.cmake -Remove the use of CXX17 variant and use a dedicated Cmake module for gRPC Change-Id: Iafa3c031d12802e8d8c914cbce6b119c2a5c4800 Signed-off-by: Yohan Pipereau <ypiperea@cisco.com>
Diffstat (limited to 'src/gnmi/proto/CMakeLists.txt')
-rw-r--r--src/gnmi/proto/CMakeLists.txt69
1 files changed, 29 insertions, 40 deletions
diff --git a/src/gnmi/proto/CMakeLists.txt b/src/gnmi/proto/CMakeLists.txt
index 8e70f77..e68a2c9 100644
--- a/src/gnmi/proto/CMakeLists.txt
+++ b/src/gnmi/proto/CMakeLists.txt
@@ -1,52 +1,41 @@
-set(protobuf_MODULE_COMPATIBLE TRUE)
+# DEPENDENCIES
+##############
-find_package(Protobuf REQUIRED)
+# Require at least Protobuf 3 for gNMI
+find_package(Protobuf 3.0.0 REQUIRED) #official cmake module
include_directories(${PROTOBUF_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
message(STATUS "Using protobuf ${protobuf_VERSION}")
-set(_PROTOBUF_LIBPROTOBUF ${PROTOBUF_LIBRARIES})
-set(_PROTOBUF_PROTOC ${PROTOBUF_PROTOC_EXECUTABLE})
+# Require at least gRPC 1.12.0, maybe earlier can be used
-find_package(gRPC CONFIG REQUIRED)
-set(_GRPC_GRPCPP gRPC::grpc++)
-set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
+# Official gRPCConfig.cmake installed by gRPC only if compiled with cmake
+# Use our own FindGRPC.cmake instead
+find_package(GRPC 1.12.0 REQUIRED)
+get_filename_component(gnmi_proto "gnmi.proto" ABSOLUTE)
+get_filename_component(gnmi_ext_proto "gnmi_ext.proto" ABSOLUTE)
-set(PROTOS
- gnmi.proto
- gnmi_ext.proto
-)
+# GENERATION OF SOURCE FILES
+############################
-get_filename_component(hw_proto "gnmi.proto" ABSOLUTE)
-get_filename_component(hw_proto_path "${hw_proto}" PATH)
-get_filename_component(gnmi_ext_proto "gnmi_ext.proto" ABSOLUTE)
-get_filename_component(gnmi_ext_proto_path "${gnmi_ext_proto}" PATH)
-
-# Generated sources
-set(hw_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/gnmi.pb.cc")
-set(hw_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gnmi.pb.h")
-set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/gnmi.grpc.pb.cc")
-set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gnmi.grpc.pb.h")
-set(gnmi_ext_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/gnmi_ext.pb.cc")
-set(gnmi_ext_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gnmi_ext.pb.h")
-set(gnmi_ext_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/gnmi_ext.grpc.pb.cc")
-set(gnmi_ext_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gnmi_ext.grpc.pb.h")
-
-add_custom_command(
- OUTPUT "${hw_proto_srcs}" "${hw_proto_hdrs}" "${hw_grpc_srcs}" "${hw_grpc_hdrs}" "${gnmi_ext_proto_srcs}" "${gnmi_ext_proto_hdrs}" "${gnmi_ext_grpc_srcs}" "${gnmi_ext_grpc_hdrs}"
- COMMAND ${_PROTOBUF_PROTOC}
- ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
- --cpp_out "${CMAKE_CURRENT_BINARY_DIR}"
- -I "${hw_proto_path}" "${gnmi_ext_path}"
- --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}"
- "${hw_proto}" "${gnmi_ext_proto}"
- DEPENDS "${hw_proto}" "${gnmi_ext_proto}")
-
-# Include generated *.pb.h files
+# Official generator
+protobuf_generate_cpp(gnmi_proto_srcs gnmi_proto_hdrs ${gnmi_proto})
+protobuf_generate_cpp(gnmi_ext_proto_srcs gnmi_ext_proto_hdrs ${gnmi_ext_proto})
+
+# Custom generator: Official `protobuf_generate_cpp` can't use grpc plugins
+PROTOBUF_GENERATE_GRPC_CPP(gnmi_grpc_srcs gnmi_grpc_hdrs ${gnmi_proto})
+PROTOBUF_GENERATE_GRPC_CPP(gnmi_ext_grpc_srcs gnmi_ext_grpc_hdrs ${gnmi_ext_proto})
+
+# LINK OPTIONS FOR GNMI-SERVER
+##############################
+
+# Include generated protobuf C++ files
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
-add_library(proto ${hw_proto_srcs} ${hw_grpc_srcs}
- ${gnmi_ext_proto_srcs} ${gnmi_ext_grpc_srcs})
-target_link_libraries(proto ${_GRPC_GRPCPP} ${_PROTOBUF_LIBPROTOBUF})
+#Create a new library named gnmi
+add_library(gnmi ${gnmi_grpc_srcs} ${gnmi_ext_grpc_srcs} ${gnmi_proto_srcs} ${gnmi_ext_proto_srcs})
+#Link our new gnmi library with grpc and protobuf libraries
+target_link_libraries(gnmi ${GRPCPP_LIBRARY} ${PROTOBUF_LIBRARIES})