diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f2487c0..d9ebc3f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ name: CI on: push: - branches: ["master"] + branches: ["master", "0.7-dev"] pull_request: jobs: @@ -63,6 +63,7 @@ jobs: cmake \ --build $RESTINIO_BUILD_DIR \ --config ${{ matrix.build_type }} \ + --parallel ${NUMBER_OF_PROCESSORS} \ --verbose - name: Test shell: bash @@ -77,76 +78,137 @@ jobs: Build-Linux: # The type of runner that the job will run on - name: Ubuntu-22.04 (${{ matrix.compiler.cname }}, ${{ matrix.build_type }}, C++${{ matrix.compiler.cppstd }}) + name: Ubuntu-22.04 (${{ matrix.build_settings.toolset }}-${{ matrix.build_settings.toolset_version }}, ${{ matrix.build_type }}, C++${{ matrix.build_settings.cppstd }}, ${{matrix.build_settings.asio_source}} asio) runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - compiler: - - cname: gcc-9 - cxxname: g++-9 - ar: gcc-ar-9 + build_settings: + - toolset: gcc + toolset_version: 9 cppstd: 17 + asio_source: standalone - - cname: gcc-12 - cxxname: g++-12 - ar: gcc-ar-12 + - toolset: gcc + toolset_version: 9 cppstd: 17 - - cname: gcc-12 - cxxname: g++-12 - ar: gcc-ar-12 + asio_source: boost + + - toolset: gcc + toolset_version: 9 + cppstd: 17 + asio_source: boost-system-package + + - toolset: gcc + toolset_version: 12 + cppstd: 17 + asio_source: standalone + - toolset: gcc + toolset_version: 12 cppstd: 20 + asio_source: standalone + - toolset: gcc + toolset_version: 12 + cppstd: 20 + asio_source: boost - - cname: clang-13 - cxxname: clang++-13 - ar: llvm-ar-13 + - toolset: clang + toolset_version: 13 cppstd: 17 + asio_source: standalone - - cname: clang-15 - cxxname: clang++-15 - ar: llvm-ar-15 + - toolset: clang + toolset_version: 15 cppstd: 17 - - cname: clang-15 - cxxname: clang++-15 - ar: llvm-ar-15 + asio_source: standalone + - toolset: clang + toolset_version: 15 cppstd: 20 + asio_source: standalone build_type: - Release - Debug env: - CC: ${{ matrix.compiler.cname }} - CXX: ${{ matrix.compiler.cxxname }} - AR: ${{ matrix.compiler.ar }} - RESTINIO_BUILD_DIR: _build_${{ matrix.compiler.cname }}_cpp${{ matrix.compiler.cppstd }}_${{ matrix.build_type }} + RESTINIO_BUILD_TAG: ${{ matrix.build_settings.toolset }}-${{ matrix.build_settings.toolset_version }}_cpp${{ matrix.build_settings.cppstd }}_${{ matrix.build_type }}_${{matrix.build_settings.asio_source}}_asio steps: - uses: actions/checkout@v3 - - name: Print env + - name: Prepare env run: | echo github.event.action: ${{ github.event.action }} echo github.event_name: ${{ github.event_name }} + echo "RESTINIO_BUILD_DIR=_build_${RESTINIO_BUILD_TAG}" >> $GITHUB_ENV + echo "CC=${{ matrix.build_settings.toolset }}-${{ matrix.build_settings.toolset_version }}" >> $GITHUB_ENV + if [ "${{ matrix.build_settings.toolset }}" == "gcc" ]; then + echo "CXX=g++-${{ matrix.build_settings.toolset_version }}" >> $GITHUB_ENV + echo "AR=gcc-ar-${{ matrix.build_settings.toolset_version }}" >> $GITHUB_ENV + else + echo "CXX=clang++-${{ matrix.build_settings.toolset_version }}" >> $GITHUB_ENV + echo "AR=llvm-ar-${{ matrix.build_settings.toolset_version }}" >> $GITHUB_ENV + fi - name: Install dependencies run: | sudo gem install Mxx_ru + if [ "${{ matrix.build_settings.asio_source }}" == "boost-system-package" ]; then + sudo apt-get update && sudo apt-get install -y libboost-all-dev + fi + mxxruexternals - name: Configure + if: ${{ matrix.build_settings.asio_source == 'standalone' }} + shell: bash + run: | + cd dev + cmake \ + -B ${RESTINIO_BUILD_DIR} \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DRESTINIO_EXPLICIT_CPPSTD=${{ matrix.build_settings.cppstd }} \ + -DRESTINIO_TEST_SUFFIX=" [${RESTINIO_BUILD_TAG}]" + + - name: Obtain Boost + if: ${{ matrix.build_settings.asio_source == 'boost' }} + uses: MarkusJx/install-boost@v2.4.4 + id: install-boost + with: + boost_version: 1.83.0 + boost_install_dir: ${{github.workspace}}/local_boost + toolset: ${{ matrix.build_settings.toolset }} + platform_version: 22.04 + + - name: Configure + if: ${{ matrix.build_settings.asio_source == 'boost' }} shell: bash run: | - mxxruexternals cd dev cmake \ -B ${RESTINIO_BUILD_DIR} \ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ - -DRESTINIO_EXPLICIT_CPPSTD=${{ matrix.compiler.cppstd }} \ - -DRESTINIO_TEST_SUFFIX=" [${{ matrix.compiler.cname }}_cpp${{ matrix.compiler.cppstd }}_${{ matrix.build_type }}]" + -DRESTINIO_EXPLICIT_CPPSTD=${{ matrix.build_settings.cppstd }} \ + -DRESTINIO_ASIO_SOURCE=boost \ + -DBOOST_ROOT=${{ steps.install-boost.outputs.BOOST_ROOT }} \ + -DRESTINIO_TEST_SUFFIX=" [${RESTINIO_BUILD_TAG}]" + + - name: Configure + if: ${{ matrix.build_settings.asio_source == 'boost-system-package' }} + shell: bash + run: | + cd dev + cmake \ + -B ${RESTINIO_BUILD_DIR} \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DRESTINIO_EXPLICIT_CPPSTD=${{ matrix.build_settings.cppstd }} \ + -DRESTINIO_ASIO_SOURCE=boost \ + -DRESTINIO_TEST_SUFFIX=" [${RESTINIO_BUILD_TAG}]" + - name: Build working-directory: ./dev shell: bash run: | cmake \ --build $RESTINIO_BUILD_DIR \ + --parallel $(nproc) \ --verbose - name: Test shell: bash @@ -202,6 +264,7 @@ jobs: run: | cmake \ --build $RESTINIO_BUILD_DIR \ + --parallel $(sysctl -n hw.ncpu) \ --verbose - name: Test shell: bash diff --git a/dev/CMakeLists.txt b/dev/CMakeLists.txt index bc50c066..318c7496 100644 --- a/dev/CMakeLists.txt +++ b/dev/CMakeLists.txt @@ -137,7 +137,7 @@ if (RESTINIO_ASIO_SOURCE STREQUAL "standalone") endif () else () if (NOT RESTINIO_USE_SYSTEM_BOOST_ASIO) - find_package(Boost REQUIRED) + find_package(Boost REQUIRED COMPONENTS headers regex) endif () endif () diff --git a/dev/restinio/CMakeLists.txt b/dev/restinio/CMakeLists.txt index 683cce47..23988565 100644 --- a/dev/restinio/CMakeLists.txt +++ b/dev/restinio/CMakeLists.txt @@ -77,6 +77,8 @@ elseif (RESTINIO_ASIO_SOURCE STREQUAL "boost") "Unable to identify how to depend on Boost::asio. " "Giving up...") endif () + + target_compile_definitions(${RESTINIO_LIBRARY_NAME} INTERFACE RESTINIO_USE_BOOST_ASIO) else () message(FATAL_ERROR "Invalid value for RESTINIO_ASIO_SOURCE (${RESTINIO_ASIO_SOURCE})") endif () diff --git a/dev/test/handle_requests/async_chained_handlers_2/main.cpp b/dev/test/handle_requests/async_chained_handlers_2/main.cpp index 256a8222..d6db6b49 100644 --- a/dev/test/handle_requests/async_chained_handlers_2/main.cpp +++ b/dev/test/handle_requests/async_chained_handlers_2/main.cpp @@ -15,6 +15,8 @@ #include "../../common/test_extra_data_factory.ipp" +#include + using atomic_counter_t = std::atomic< unsigned int >; template< typename Extra_Data_Factory > @@ -156,6 +158,7 @@ tc_fixed_size_chain() std::array< so_5::mbox_t, 4u > destinations; + std::promise< void > coop_registered_promise; so_5::wrapped_env_t sobjectizer{ [&]( so_5::environment_t & env ) { env.introduce_coop( @@ -170,8 +173,10 @@ tc_fixed_size_chain() destinations[ 0u ] = coop.make_agent< dummy_stage_t >( stages_completed, destinations[ 1u ] )->so_direct_mbox(); } ); + coop_registered_promise.set_value(); } }; + coop_registered_promise.get_future().get(); http_server_t http_server{ restinio::own_io_context(), @@ -255,22 +260,25 @@ tc_fixed_size_chain_accept_in_middle() std::array< so_5::mbox_t, 4u > destinations; + std::promise< void > coop_registered_promise; so_5::wrapped_env_t sobjectizer{ [&]( so_5::environment_t & env ) { env.introduce_coop( so_5::disp::active_obj::make_dispatcher( env ).binder(), [&]( so_5::coop_t & coop ) { - destinations[ 3u ] = coop.make_agent< dummy_stage_t >( - stages_completed, destinations[ 0u ] )->so_direct_mbox(); - destinations[ 2u ] = coop.make_agent< dummy_stage_t >( - stages_completed, destinations[ 3u ] )->so_direct_mbox(); destinations[ 1u ] = coop.make_agent< response_maker_t >( stages_completed )->so_direct_mbox(); destinations[ 0u ] = coop.make_agent< dummy_stage_t >( stages_completed, destinations[ 1u ] )->so_direct_mbox(); + destinations[ 3u ] = coop.make_agent< dummy_stage_t >( + stages_completed, destinations[ 0u ] )->so_direct_mbox(); + destinations[ 2u ] = coop.make_agent< dummy_stage_t >( + stages_completed, destinations[ 3u ] )->so_direct_mbox(); } ); + coop_registered_promise.set_value(); } }; + coop_registered_promise.get_future().get(); http_server_t http_server{ restinio::own_io_context(), @@ -354,6 +362,7 @@ tc_fixed_size_chain_response_with_pause() std::array< so_5::mbox_t, 2u > destinations; + std::promise< void > coop_registered_promise; so_5::wrapped_env_t sobjectizer{ [&]( so_5::environment_t & env ) { env.introduce_coop( @@ -364,8 +373,10 @@ tc_fixed_size_chain_response_with_pause() destinations[ 0u ] = coop.make_agent< dummy_stage_t >( stages_completed, destinations[ 1u ] )->so_direct_mbox(); } ); + coop_registered_promise.set_value(); } }; + coop_registered_promise.get_future().get(); http_server_t http_server{ restinio::own_io_context(), @@ -444,6 +455,7 @@ tc_growable_size_chain() std::array< so_5::mbox_t, 4u > destinations; + std::promise< void > coop_registered_promise; so_5::wrapped_env_t sobjectizer{ [&]( so_5::environment_t & env ) { env.introduce_coop( @@ -458,8 +470,10 @@ tc_growable_size_chain() destinations[ 0u ] = coop.make_agent< dummy_stage_t >( stages_completed, destinations[ 1u ] )->so_direct_mbox(); } ); + coop_registered_promise.set_value(); } }; + coop_registered_promise.get_future().get(); typename request_handler_t::builder_t handler_builder; @@ -552,6 +566,7 @@ tc_growable_size_chain_accept_in_middle() std::array< so_5::mbox_t, 4u > destinations; + std::promise< void > coop_registered_promise; so_5::wrapped_env_t sobjectizer{ [&]( so_5::environment_t & env ) { env.introduce_coop( @@ -566,8 +581,10 @@ tc_growable_size_chain_accept_in_middle() destinations[ 0u ] = coop.make_agent< dummy_stage_t >( stages_completed, destinations[ 1u ] )->so_direct_mbox(); } ); + coop_registered_promise.set_value(); } }; + coop_registered_promise.get_future().get(); typename request_handler_t::builder_t handler_builder; diff --git a/dev/test/router/express_boost_regex/CMakeLists.txt b/dev/test/router/express_boost_regex/CMakeLists.txt index 540b9799..e0278c19 100644 --- a/dev/test/router/express_boost_regex/CMakeLists.txt +++ b/dev/test/router/express_boost_regex/CMakeLists.txt @@ -8,5 +8,4 @@ set(UNITTEST_SRCFILES main.cpp ) include(${CMAKE_SOURCE_DIR}/cmake/unittest.cmake) -TARGET_INCLUDE_DIRECTORIES(${UNITTEST} PRIVATE ${Boost_INCLUDE_DIRS}) -TARGET_LINK_LIBRARIES(${UNITTEST} PRIVATE ${Boost_REGEX_LIBRARY}) +TARGET_LINK_LIBRARIES(${UNITTEST} PRIVATE Boost::regex) diff --git a/dev/test/router/express_router_boost_regex/CMakeLists.txt b/dev/test/router/express_router_boost_regex/CMakeLists.txt index 98744083..ca8f0cfd 100644 --- a/dev/test/router/express_router_boost_regex/CMakeLists.txt +++ b/dev/test/router/express_router_boost_regex/CMakeLists.txt @@ -1,5 +1,5 @@ set(UNITTEST _unit.test.router.express_router_boost_regex) include(${CMAKE_SOURCE_DIR}/cmake/unittest.cmake) -TARGET_INCLUDE_DIRECTORIES(${UNITTEST} PRIVATE ${Boost_INCLUDE_DIRS}) -TARGET_LINK_LIBRARIES(${UNITTEST} PRIVATE ${Boost_REGEX_LIBRARY}) +TARGET_LINK_LIBRARIES(${UNITTEST} PRIVATE Boost::regex) + diff --git a/dev/test/router/express_router_boost_regex_bench/CMakeLists.txt b/dev/test/router/express_router_boost_regex_bench/CMakeLists.txt index 4704e298..292034df 100644 --- a/dev/test/router/express_router_boost_regex_bench/CMakeLists.txt +++ b/dev/test/router/express_router_boost_regex_bench/CMakeLists.txt @@ -1,5 +1,4 @@ set(TEST_BENCH _test.router.express_router_boost_regex_bench) include(${CMAKE_SOURCE_DIR}/cmake/testbench.cmake) -TARGET_INCLUDE_DIRECTORIES(${TEST_BENCH} PRIVATE ${Boost_INCLUDE_DIRS}) -TARGET_LINK_LIBRARIES(${TEST_BENCH} PRIVATE ${Boost_REGEX_LIBRARY}) +TARGET_LINK_LIBRARIES(${TEST_BENCH} PRIVATE Boost::regex) diff --git a/externals.rb b/externals.rb index 11166cad..8fac1b19 100644 --- a/externals.rb +++ b/externals.rb @@ -1,5 +1,5 @@ MxxRu::arch_externals :so5 do |e| - e.url 'https://github.com/Stiffstream/sobjectizer/archive/v.5.8.1.tar.gz' + e.url 'https://github.com/Stiffstream/sobjectizer/archive/v.5.8.1.1.tar.gz' e.map_dir 'dev/so_5' => 'dev' end