protobuf server

This commit is contained in:
Ivan I. Ovchinnikov
2026-07-28 20:46:41 +03:00
parent 5a702fe0f8
commit 8c4d40b66a
11 changed files with 150 additions and 56 deletions
+35 -7
View File
@@ -1,10 +1,9 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.20)
project(serial_sample CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 1. FIX: Tell CMake to use modern GLVND OpenGL libraries and suppress the warning
set(OpenGL_GL_PREFERENCE GLVND)
# Define file paths for thirdparty modules
@@ -16,9 +15,10 @@ find_package(PkgConfig REQUIRED)
find_package(OpenGL REQUIRED)
pkg_check_modules(GLFW REQUIRED glfw3)
pkg_check_modules(LIBSERIALPORT REQUIRED IMPORTED_TARGET libserialport)
find_package(Protobuf REQUIRED)
find_package(gRPC REQUIRED)
# Collect core library source files
# ImGUI things
set(IMGUI_SOURCES
${IMGUI_DIR}/imgui.cpp
${IMGUI_DIR}/imgui_demo.cpp
@@ -37,6 +37,34 @@ set(IMPLOT_SOURCES
include/SerialApp.h
)
set(proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/service.pb.cc")
set(proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/service.pb.h")
set(grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/service.grpc.pb.cc")
set(grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/service.grpc.pb.h")
add_custom_command(
OUTPUT "${proto_srcs}" "${proto_hdrs}" "${grpc_srcs}" "${grpc_hdrs}"
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
ARGS --grpc_out="${CMAKE_CURRENT_BINARY_DIR}"
--cpp_out="${CMAKE_CURRENT_BINARY_DIR}"
-I "${CMAKE_CURRENT_SOURCE_DIR}/proto"
--plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin
"${CMAKE_CURRENT_SOURCE_DIR}/proto/service.proto"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/proto/service.proto"
)
set_source_files_properties(
"${proto_srcs}" "${proto_hdrs}" "${grpc_srcs}" "${grpc_hdrs}"
PROPERTIES GENERATED TRUE
)
add_library(proto_lib STATIC ${proto_srcs} ${grpc_srcs} proto/service.proto)
target_link_libraries(proto_lib PUBLIC gRPC::grpc++ ${Protobuf_LIBRARIES})
target_include_directories(proto_lib PUBLIC
${CMAKE_CURRENT_BINARY_DIR}
${Protobuf_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME} main.cpp
${IMGUI_SOURCES}
${IMPLOT_SOURCES}
@@ -48,10 +76,10 @@ add_executable(${PROJECT_NAME} main.cpp
include/LogWindow.h
)
# Provide Header Search Paths
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}
${Protobuf_INCLUDE_DIRS}
${IMGUI_DIR}
${IMGUI_DIR}/backends
${IMPLOT_DIR}
@@ -59,7 +87,6 @@ target_include_directories(${PROJECT_NAME} PRIVATE
${OPENGL_INCLUDE_DIR}
)
# Link Libraries
target_link_libraries(${PROJECT_NAME} PRIVATE
${GLFW_LIBRARIES}
OpenGL::GL
@@ -67,6 +94,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
pthread
dl
PkgConfig::LIBSERIALPORT
proto_lib
)
configure_file(style/dracula.theme ${CMAKE_CURRENT_BINARY_DIR}/dracula.theme COPYONLY)