You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.8 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(SimpleRPCExample CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# include source includes
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
# find python interpreter
find_package(Python3 COMPONENTS Interpreter REQUIRED)
set(GENERATED_DIR ${CMAKE_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${GENERATED_DIR})
set(RPC_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_rpc.py)
set(RPC_TEMPLATES ${CMAKE_CURRENT_SOURCE_DIR}/tools/templates)
# inputs to parse
set(RPC_INPUTS
${CMAKE_CURRENT_SOURCE_DIR}/src/MyService.h
)
# command to run generator
add_custom_command(
OUTPUT
${GENERATED_DIR}/MyService.proxy.h
${GENERATED_DIR}/MyService.proxy.cpp
${GENERATED_DIR}/MyService.skeleton.h
${GENERATED_DIR}/MyService.skeleton.cpp
COMMAND ${CMAKE_COMMAND} -E echo "Generating RPC stubs..."
COMMAND ${Python3_EXECUTABLE} ${RPC_GENERATOR} --out-dir ${GENERATED_DIR}
--compile-commands ${CMAKE_BINARY_DIR}/compile_commands.json
--templates ${RPC_TEMPLATES}
${RPC_INPUTS}
DEPENDS ${RPC_GENERATOR} ${RPC_TEMPLATES} ${RPC_INPUTS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running RPC code generator"
VERBATIM
)
include_directories(${GENERATED_DIR})
add_custom_target(rpc_generated DEPENDS
${GENERATED_DIR}/MyService.proxy.h
${GENERATED_DIR}/MyService.proxy.cpp
${GENERATED_DIR}/MyService.skeleton.h
${GENERATED_DIR}/MyService.skeleton.cpp
)
# Server
add_executable(server
src/server.cpp
src/MyService.cpp
${GENERATED_DIR}/MyService.skeleton.cpp
)
add_dependencies(server rpc_generated)
# Client
add_executable(client
src/client.cpp
${GENERATED_DIR}/MyService.proxy.cpp
)
add_dependencies(client rpc_generated)