Chat

 # Copyright (C) 2023 The Qt Company Ltd.
 # SPDX-License-Identifier: BSD-3-Clause

 cmake_minimum_required(VERSION 3.16)

 project(GrpcChatServer LANGUAGES CXX)

 # Qt6::Grpc module is not used directly in this project. But this allows to find Qt6::Grpc's
 # dependencies without setting extra cmake module paths.
 find_package(Qt6 COMPONENTS Grpc)
 find_package(WrapgRPCPlugin)
 find_package(WrapgRPC)

 if(NOT TARGET WrapgRPC::WrapgRPCPlugin OR NOT TARGET WrapProtoc::WrapProtoc
     OR NOT TARGET WrapgRPC::WrapLibgRPC)
     message(WARNING "Dependencies of QtGrpc test server not found. Skipping.")
     return()
 endif()

 set(proto_files "${CMAKE_CURRENT_LIST_DIR}/../proto/simplechat.proto")
 set(out_dir "${CMAKE_CURRENT_BINARY_DIR}")

 set(generated_files
     "${out_dir}/simplechat.pb.h" "${out_dir}/simplechat.pb.cc"
     "${out_dir}/simplechat.grpc.pb.h" "${out_dir}/simplechat.grpc.pb.cc")

 add_custom_command(
     OUTPUT ${generated_files}
     COMMAND
     $<TARGET_FILE:WrapProtoc::WrapProtoc>
     ARGS
     --grpc_out "${out_dir}"
     --cpp_out "${out_dir}"
     "-I${CMAKE_CURRENT_LIST_DIR}/../proto/"
     --plugin=protoc-gen-grpc=$<TARGET_FILE:WrapgRPC::WrapgRPCPlugin>
     "${proto_files}"
     WORKING_DIRECTORY ${out_dir}
     DEPENDS "${proto_files}"
     COMMENT "Generating gRPC ${target} sources..."
     COMMAND_EXPAND_LISTS
     VERBATIM
 )

 set_source_files_properties(${generated_files} PROPERTIES GENERATED TRUE)

 add_executable(grpcchatserver
     ${generated_files}
     main.cpp
 )

 # If libprotobuf is not built with -fPIE enabled we cannot link it to the executables built
 # with -fPIE.
 # TODO: Re-enable PIE once QTBUG-111485 is fixed.
 set_target_properties(grpcchatserver PROPERTIES POSITION_INDEPENDENT_CODE FALSE)

 target_include_directories(grpcchatserver PRIVATE ${out_dir})
 target_link_libraries(grpcchatserver PRIVATE WrapgRPC::WrapLibgRPC)

 install(TARGETS grpcchatserver
     RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
     BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
     LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
 )