127 lines
4.6 KiB
CMake
127 lines
4.6 KiB
CMake
add_custom_target(all_examples)
|
|
|
|
function(add_example folder name)
|
|
add_executable(${name} ${folder}/${name}.cpp ${ARGN})
|
|
set_target_properties(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${folder}")
|
|
install(FILES ${folder}/${name}.cpp
|
|
DESTINATION ${CMAKE_INSTALL_DATADIR}/caf/examples/${folder})
|
|
add_dependencies(${name} all_examples)
|
|
endfunction()
|
|
|
|
function(add_core_example folder name)
|
|
add_example(${folder} ${name} ${ARGN})
|
|
target_link_libraries(${name} PRIVATE CAF::internal CAF::core)
|
|
endfunction()
|
|
|
|
# -- examples for CAF::core ----------------------------------------------------
|
|
|
|
# introductionary applications
|
|
add_core_example(. aout)
|
|
add_core_example(. hello_world)
|
|
|
|
# basic message passing primitives
|
|
add_core_example(message_passing calculator)
|
|
add_core_example(message_passing cell)
|
|
add_core_example(message_passing dancing_kirby)
|
|
add_core_example(message_passing delegating)
|
|
add_core_example(message_passing divider)
|
|
add_core_example(message_passing fan_out_request)
|
|
add_core_example(message_passing fixed_stack)
|
|
add_core_example(message_passing promises)
|
|
add_core_example(message_passing request)
|
|
add_core_example(message_passing typed_calculator)
|
|
|
|
# flow API
|
|
add_core_example(flow from-callable)
|
|
add_core_example(flow observe-on)
|
|
add_core_example(flow spsc-buffer-resource)
|
|
|
|
# dynamic behavior changes using 'become'
|
|
add_core_example(dynamic_behavior skip_messages)
|
|
add_core_example(dynamic_behavior dining_philosophers)
|
|
|
|
# adding custom message types
|
|
add_core_example(custom_type custom_types_1)
|
|
add_core_example(custom_type custom_types_2)
|
|
add_core_example(custom_type custom_types_3)
|
|
add_core_example(custom_type custom_types_4)
|
|
|
|
# testing DSL
|
|
add_example(testing ping_pong)
|
|
target_link_libraries(ping_pong PRIVATE CAF::internal CAF::core CAF::test)
|
|
add_test(NAME "examples.ping-pong" COMMAND ping_pong -r300 -n -v5)
|
|
|
|
# -- examples for CAF::io ------------------------------------------------------
|
|
|
|
if(TARGET CAF::io)
|
|
|
|
function(add_io_example folder name)
|
|
add_example(${folder} ${name} ${ARGN})
|
|
target_link_libraries(${name} PRIVATE CAF::internal CAF::io)
|
|
endfunction()
|
|
|
|
# basic remoting
|
|
add_io_example(remoting group_chat)
|
|
add_io_example(remoting group_server)
|
|
add_io_example(remoting remote_spawn)
|
|
add_io_example(remoting distributed_calculator)
|
|
|
|
# basic I/O with brokers
|
|
add_io_example(broker simple_broker)
|
|
add_io_example(broker simple_http_broker)
|
|
|
|
if(CAF_ENABLE_PROTOBUF_EXAMPLES)
|
|
find_package(Protobuf REQUIRED)
|
|
if(NOT PROTOBUF_PROTOC_EXECUTABLE)
|
|
message(FATAL_ERROR "CMake was unable to set PROTOBUF_PROTOC_EXECUTABLE")
|
|
endif()
|
|
protobuf_generate_cpp(ProtoSources ProtoHeaders "${CMAKE_CURRENT_SOURCE_DIR}/remoting/pingpong.proto")
|
|
include_directories(${PROTOBUF_INCLUDE_DIR})
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
add_executable(protobuf_broker broker/protobuf_broker.cpp ${ProtoSources})
|
|
target_link_libraries(protobuf_broker
|
|
PRIVATE ${PROTOBUF_LIBRARIES} CAF::internal CAF::io)
|
|
add_dependencies(protobuf_broker all_examples)
|
|
endif()
|
|
|
|
if(CAF_ENABLE_QT6_EXAMPLES)
|
|
find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)
|
|
qt6_wrap_ui(GROUP_CHAT_UI_HDR qtsupport/chatwindow.ui)
|
|
qt6_wrap_cpp(GROUP_CHAT_MOC_SRC qtsupport/chatwidget.hpp)
|
|
# generated headers will be in cmake build directory
|
|
add_executable(qt_group_chat
|
|
qtsupport/qt_group_chat.cpp
|
|
qtsupport/chatwidget.cpp
|
|
${GROUP_CHAT_MOC_SRC}
|
|
${GROUP_CHAT_UI_HDR})
|
|
target_link_libraries(qt_group_chat
|
|
CAF::io
|
|
CAF::internal
|
|
Qt6::Core
|
|
Qt6::Gui
|
|
Qt6::Widgets)
|
|
target_include_directories(qt_group_chat PRIVATE
|
|
qtsupport
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${Qt6Core_INCLUDE_DIRS}
|
|
${Qt6Gui_INCLUDE_DIRS}
|
|
${Qt6Widgets_INCLUDE_DIRS})
|
|
if (CMAKE_VERSION VERSION_LESS 3.8)
|
|
message(STATUS "Note: build fails if Qt6 sets incompatible -std=ARG flag")
|
|
else()
|
|
set_property(TARGET qt_group_chat PROPERTY CXX_STANDARD 17)
|
|
endif()
|
|
add_dependencies(qt_group_chat all_examples)
|
|
endif()
|
|
|
|
if(CAF_ENABLE_CURL_EXAMPLES)
|
|
find_package(CURL REQUIRED)
|
|
add_executable(curl_fuse curl/curl_fuse.cpp)
|
|
include_directories(${CURL_INCLUDE_DIRS})
|
|
target_link_libraries(curl_fuse ${CURL_LIBRARY} CAF::io CAF::internal)
|
|
add_dependencies(curl_fuse all_examples)
|
|
endif()
|
|
|
|
endif()
|