# A Cap'n Proto sample project.
#
# To build (non-MSVC):
#   1. Install Cap'n Proto somewhere ($PREFIX below):
#
#      mkdir capnproto/build
#      cd capnproto/build
#      cmake ../c++ -DCMAKE_INSTALL_PREFIX=$PREFIX
#      cmake --build . --target install
#      export PATH=$PREFIX/bin:$PATH
#
#   2. Ensure Cap'n Proto's executables are on the PATH, then build the sample project:
#
#      export PATH=$PREFIX/bin:$PATH
#      mkdir ../build-samples
#      cd ../build-samples
#      cmake ../c++/samples
#      cmake --build .
#
# Caveat for MSVC:
#
#   MSVC cannot yet build the Cap'n Proto executables, so there won't be any `$PREFIX/bin` directory
#   to put on the PATH. To work around this, you can use CMAKE_PREFIX_PATH or CMAKE_MODULE_PATH to
#   find the installed MSVC-built Cap'n Proto package, and set CAPNP_EXECUTABLE and
#   CAPNPC_CXX_EXECUTABLE to the MinGW-built executables manually.
#
#   Here's an example step 2, assuming a MinGW-built Cap'n Proto is installed at $PREFIX_MINGW and
#   an MSVC-built Cap'n Proto is installed at $PREFIX_MSVC:
#
#      mkdir ../build-samples
#      cd ../build-samples
#      cmake ../c++/samples -DCMAKE_PREFIX_PATH=$PREFIX_MSVC \
#          -DCAPNP_EXECUTABLE=$PREFIX_MINGW/bin/capnp.exe \
#          -DCAPNPC_CXX_EXECUTABLE=$PREFIX_MINGW/bin/capnpc-c++.exe
#      cmake --build .

project("Cap'n Proto Samples" CXX)
cmake_minimum_required(VERSION 3.0)

find_package(CapnProto CONFIG REQUIRED)

capnp_generate_cpp(addressbookSources addressbookHeaders addressbook.capnp)
add_executable(addressbook addressbook.c++ ${addressbookSources})
target_link_libraries(addressbook CapnProto::capnp)
target_include_directories(addressbook PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

capnp_generate_cpp(calculatorSources calculatorHeaders calculator.capnp)
add_executable(calculator-client calculator-client.c++ ${calculatorSources})
add_executable(calculator-server calculator-server.c++ ${calculatorSources})
target_link_libraries(calculator-client CapnProto::capnp-rpc)
target_link_libraries(calculator-server CapnProto::capnp-rpc)
target_include_directories(calculator-client PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(calculator-server PRIVATE ${CMAKE_CURRENT_BINARY_DIR})