diff --git a/BUILDING.md b/BUILDING.md index 20701d77f..e743d438f 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -27,6 +27,7 @@ But RPP is header-only library, so, without enabling any extra options is just c - `RPP_BUILD_EXAMPLES` - (ON/OFF) build examples of usage of RPP (default OFF) - `RPP_BUILD_SFML_CODE` - (ON/OFF) build RPP code related to SFML or not (default OFF) - requires SFML to be installed - `RPP_BUILD_QT_CODE` - (ON/OFF) build RPPQT related code (examples/tests)(rppqt module doesn't requires this one) (default OFF) - requires QT5/6 to be installed +- `RPP_BUILD_ASIO_CODE` - (ON/OFF) build RPPASIO related code (examples/tests)(rppasio module doesn't requires this one) (default OFF) - requires asio to be installed By default, it provides rpp and rppqt INTERFACE modules. diff --git a/CMakePresets.json b/CMakePresets.json index 2b2c7688d..30e88a578 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -138,6 +138,13 @@ "RPP_BUILD_QT_CODE" : "ON" } }, + { + "name" : "build-asio", + "hidden": true, + "cacheVariables": { + "RPP_BUILD_ASIO_CODE" : "ON" + } + }, { "name" : "use-conan", "hidden": true, @@ -160,7 +167,7 @@ }, { "name": "ci-coverage-gcc", - "inherits": ["ci-build", "build-tests", "build-qt", "ci-unix", "ci-gcc"], + "inherits": ["ci-build", "build-tests", "build-qt", "build-asio", "ci-unix", "ci-gcc"], "cacheVariables": { "RPP_ENABLE_COVERAGE": "ON", "CMAKE_CXX_FLAGS": "-O0 -g --coverage -fkeep-inline-functions -fkeep-static-functions -fprofile-arcs -ftest-coverage -fno-inline -fno-omit-frame-pointer -fno-optimize-sibling-calls", @@ -171,7 +178,7 @@ }, { "name": "ci-coverage-clang", - "inherits": ["ci-build", "build-tests", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "RPP_ENABLE_COVERAGE": "ON", "CMAKE_CXX_FLAGS": "-fprofile-instr-generate -fcoverage-mapping", @@ -182,58 +189,58 @@ }, { "name": "ci-sanitize-tsan", - "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "CMAKE_CXX_FLAGS": "-fsanitize=thread -g -O1" } }, { "name": "ci-sanitize-asan", - "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "CMAKE_CXX_FLAGS": "-fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer -g -O1" } }, { "name": "ci-sanitize-lsan", - "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "CMAKE_CXX_FLAGS": "-fsanitize=leak -fno-omit-frame-pointer -g -O1" } }, { "name": "ci-sanitize-msan", - "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "CMAKE_CXX_FLAGS": "-fsanitize=memory -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O2" } }, { "name": "ci-sanitize-ubsan", - "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "ci-unix", "ci-clang"], + "inherits": ["ci-build", "build-tests", "build-benchmarks", "build-qt", "build-asio", "ci-unix", "ci-clang"], "cacheVariables": { "CMAKE_CXX_FLAGS": "-fsanitize=undefined" } }, { "name": "ci-macos-tests", - "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-sfml", "ci-unix"] + "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-asio", "build-sfml", "ci-unix"] }, { "name": "ci-ubuntu-clang-tests", - "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-sfml", "ci-unix", "ci-clang", "cppcheck", "clang-tidy"] + "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-asio", "build-sfml", "ci-unix", "ci-clang", "cppcheck", "clang-tidy"] }, { "name": "ci-ubuntu-gcc-tests", - "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-sfml", "ci-unix", "ci-gcc", "cppcheck", "clang-tidy"] + "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-asio", "build-sfml", "ci-unix", "ci-gcc", "cppcheck", "clang-tidy"] }, { "name": "ci-windows-tests", - "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-sfml", "ci-win64"] + "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-asio", "build-sfml", "ci-win64"] }, { "name": "ci-ubuntu-clang-tests-no-checks", - "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-sfml", "ci-unix", "ci-clang" ] + "inherits": ["ci-build", "build-tests", "build-examples", "build-qt", "build-asio", "build-sfml", "ci-unix", "ci-clang" ] }, diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index cd7a23f8c..0479a6b9b 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -83,3 +83,8 @@ endif() if (RPP_BUILD_BENCHMARKS) rpp_fetch_library(nanobench https://github.com/martinus/nanobench.git master) endif() + +# ==================== ASIO ===================== +if (RPP_BUILD_ASIO_CODE) + find_package(asio REQUIRED) +endif() diff --git a/cmake/install-rules.cmake b/cmake/install-rules.cmake index 500b20bab..3b979d094 100644 --- a/cmake/install-rules.cmake +++ b/cmake/install-rules.cmake @@ -26,6 +26,12 @@ install( INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rppqt" ) +install( + TARGETS rppasio + EXPORT RPPTargets + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rppasio" +) + write_basic_package_version_file( "${package}ConfigVersion.cmake" COMPATIBILITY SameMajorVersion diff --git a/cmake/variables.cmake b/cmake/variables.cmake index 8d91fdb67..c76dd1f21 100644 --- a/cmake/variables.cmake +++ b/cmake/variables.cmake @@ -82,6 +82,7 @@ endfunction() # ------------ Options to tweak --------------------- option(RPP_BUILD_SFML_CODE "Enable SFML support in examples/code." OFF) option(RPP_BUILD_QT_CODE "Enable QT support in examples/code." OFF) +option(RPP_BUILD_ASIO_CODE "Enable ASIO support in examples/code." OFF) if (RPP_DEVELOPER_MODE) option(RPP_BUILD_TESTS "Build unit tests tree." OFF) @@ -100,6 +101,9 @@ if (RPP_DEVELOPER_MODE) if (RPP_BUILD_BENCHMARKS) set(CONAN_ARGS "${CONAN_ARGS};-o rpp/*:with_benchmarks=True") endif() + if (RPP_BUILD_ASIO_CODE) + set(CONAN_ARGS "${CONAN_ARGS};-o rpp/*:with_asio=True") + endif() endif() if(RPP_ENABLE_COVERAGE) diff --git a/conanfile.py b/conanfile.py index f7bb8f74a..fa7f4218d 100644 --- a/conanfile.py +++ b/conanfile.py @@ -11,14 +11,16 @@ class RppConan(ConanFile): "with_sfml" : [False, True], "with_tests" : [False, True], "with_cmake" : [False, True], - "with_benchmarks" : [False, True] + "with_benchmarks" : [False, True], + "with_asio" : [False, True] } default_options = { "with_grpc" : False, "with_sfml" : False, "with_tests": False, "with_cmake": False, - "with_benchmarks" : False + "with_benchmarks" : False, + "with_asio" : False } def requirements(self): @@ -32,6 +34,9 @@ def requirements(self): if self.options.with_sfml: self.requires("sfml/2.6.1", options={"audio": False}) + if self.options.with_asio: + self.requires("asio/1.30.2") + # if self.options.with_grpc: # self.requires("grpc/1.54.3", transitive_libs=True, transitive_headers=True) # self.requires("protobuf/3.21.12") diff --git a/src/extensions/CMakeLists.txt b/src/extensions/CMakeLists.txt index 63cf503d3..2b5453d20 100644 --- a/src/extensions/CMakeLists.txt +++ b/src/extensions/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(rppqt) +add_subdirectory(rppasio) diff --git a/src/extensions/rppasio/CMakeLists.txt b/src/extensions/rppasio/CMakeLists.txt new file mode 100644 index 000000000..f7fd97401 --- /dev/null +++ b/src/extensions/rppasio/CMakeLists.txt @@ -0,0 +1,11 @@ +# ReactivePlusPlus library +# +# Copyright Aleksey Loginov 2022 - present. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# https://www.boost.org/LICENSE_1_0.txt) +# +# Project home: https://github.com/victimsnino/ReactivePlusPlus +# + +rpp_add_library(rppasio) diff --git a/src/extensions/rppasio/rppasio/fwd.hpp b/src/extensions/rppasio/rppasio/fwd.hpp new file mode 100644 index 000000000..902181f1b --- /dev/null +++ b/src/extensions/rppasio/rppasio/fwd.hpp @@ -0,0 +1,23 @@ +// ReactivePlusPlus library +// +// Copyright Aleksey Loginov 2022 - present. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +// +// Project home: https://github.com/victimsnino/ReactivePlusPlus +// + +#pragma once + +/** + * @defgroup rppasio RPPASIO + * @brief RppAsio is extension of RPP which enables support of boost-asio library. + */ + + +/** + * @defgroup asio_schedulers Schedulers + * @ingroup rppasio + */ +#include diff --git a/src/extensions/rppasio/rppasio/rppasio.hpp b/src/extensions/rppasio/rppasio/rppasio.hpp new file mode 100644 index 000000000..92d130473 --- /dev/null +++ b/src/extensions/rppasio/rppasio/rppasio.hpp @@ -0,0 +1,14 @@ +// ReactivePlusPlus library +// +// Copyright Aleksey Loginov 2022 - present. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) +// +// Project home: https://github.com/victimsnino/ReactivePlusPlus +// + +#pragma once + +#include +#include diff --git a/src/extensions/rppasio/rppasio/schedulers.hpp b/src/extensions/rppasio/rppasio/schedulers.hpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/extensions/rppasio/rppasio/schedulers/asio.hpp b/src/extensions/rppasio/rppasio/schedulers/asio.hpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/extensions/rppasio/rppasio/schedulers/fwd.hpp b/src/extensions/rppasio/rppasio/schedulers/fwd.hpp new file mode 100644 index 000000000..e69de29bb diff --git a/src/extensions/rppqt/rppqt/fwd.hpp b/src/extensions/rppqt/rppqt/fwd.hpp index 586f7bf81..74b5c6a00 100644 --- a/src/extensions/rppqt/rppqt/fwd.hpp +++ b/src/extensions/rppqt/rppqt/fwd.hpp @@ -24,9 +24,7 @@ #include /** - * @defgroup schedulers Schedulers - * @brief Scheduler is the way to introduce multi-threading in your application via RPP - * @see https://reactivex.io/documentation/scheduler.html - * @ingroup rpp + * @defgroup qt_schedulers Schedulers + * @ingroup rppqt */ #include