diff --git a/.github/workflows/linux_debug_fetch_boost.yml b/.github/workflows/linux_debug_fetch_boost.yml new file mode 100644 index 000000000000..b9075783fdea --- /dev/null +++ b/.github/workflows/linux_debug_fetch_boost.yml @@ -0,0 +1,45 @@ +# Copyright (c) 2024 Vedant Nimje +# +# SPDX-License-Identifier: BSL-1.0 +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +name: Linux CI (Debug) with Boost Fetch + +on: [pull_request] + +jobs: + build: + runs-on: ubuntu-latest + container: stellargroup/build_env:14 + + steps: + - uses: actions/checkout@v4 + - name: Configure + shell: bash + run: | + cmake \ + . \ + -Bbuild \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Debug \ + -DHPX_WITH_MALLOC=system \ + -DHPX_WITH_FETCH_ASIO=ON \ + -DHPX_WITH_FETCH_BOOST=ON \ + -DHPX_WITH_EXAMPLES=ON \ + -DHPX_WITH_TESTS=ON \ + -DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=2 \ + -DHPX_WITH_CHECK_MODULE_DEPENDENCIES=On + - name: Build + shell: bash + run: | + cmake --build build --target all + cmake --build build --target examples + - name: Test + shell: bash + run: | + cd build + ctest \ + --output-on-failure \ + --tests-regex tests.examples \ + --exclude-regex tests.examples.transpose.transpose_block_numa diff --git a/.github/workflows/macos_debug_fetch_boost.yml b/.github/workflows/macos_debug_fetch_boost.yml new file mode 100644 index 000000000000..4386e5a4e800 --- /dev/null +++ b/.github/workflows/macos_debug_fetch_boost.yml @@ -0,0 +1,81 @@ +# Copyright (c) 2024 Vedant Nimje +# +# SPDX-License-Identifier: BSL-1.0 +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +name: macOS CI (Debug) with Boost Fetch + +on: [pull_request] + +jobs: + build: + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + # Workaround for https://github.com/actions/virtual-environments/issues/2322 + rm -rf /usr/local/bin/2to3* + rm -rf /usr/local/bin/idle3* + rm -rf /usr/local/bin/pydoc3* + rm -rf /usr/local/bin/python3* + brew upgrade + brew update && \ + brew install --overwrite python-tk && \ + brew install --overwrite hwloc gperftools ninja && \ + brew upgrade cmake + - name: Configure + shell: bash + run: | + cmake \ + -H. \ + -Bbuild \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Debug \ + -DHPX_WITH_FETCH_ASIO=ON \ + -DHPX_WITH_FETCH_BOOST=ON \ + -DHPX_WITH_EXAMPLES=ON \ + -DHPX_WITH_TESTS=ON \ + -DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=2 \ + -DHPX_WITH_CHECK_MODULE_DEPENDENCIES=On + - name: Build + shell: bash + run: | + cmake --build build --target all + cmake --build build --target tests + - name: Test + shell: bash + run: | + cd build + ctest --output-on-failure \ + --exclude-regex \ + "tests.examples.quickstart.1d_wave_equation|\ + tests.examples.transpose.transpose_block_numa|\ + tests.performance.local.wait_all_timings|\ + tests.regressions.components.distributed.tcp.bulk_new_3054|\ + tests.regressions.dynamic_counters_loaded_1508|\ + tests.regressions.lcos.wait_all_hang_1946|\ + tests.regressions.modules.async_combinators.wait_all_hang_1946|\ + tests.regressions.modules.collectives.distributed.tcp.broadcast_apply|\ + tests.regressions.modules.collectives.distributed.tcp.broadcast_unwrap_future_2885|\ + tests.regressions.modules.collectives.distributed.tcp.remote_latch|\ + tests.regressions.modules.compute_local.parallel_fill_4132|\ + tests.regressions.util.distributed.tcp.zero_copy_parcels_1001_no_zero_copy_optimization|\ + tests.regressions.modules.performance_counters.dynamic_counters_loaded_1508|\ + tests.regressions.modules.performance_counters.statistics_2666|\ + tests.unit.modules.runtime_components.distributed.tcp.migrate_component|\ + tests.unit.modules.runtime_components.distributed.tcp.migrate_polymorphic_component|\ + tests.unit.modules.algorithms.default_construct|\ + tests.unit.modules.algorithms.destroy|\ + tests.unit.modules.algorithms.foreach_executors|\ + tests.unit.modules.algorithms.max_element|\ + tests.unit.modules.algorithms.replace_copy_if|\ + tests.unit.modules.compute_local.numa_allocator|\ + tests.unit.modules.execution.standalone_thread_pool_executor|\ + tests.unit.modules.resource_partitioner.used_pus|\ + tests.unit.modules.segmented_algorithms.distributed.tcp.partitioned_vector|\ + tests.unit.threads.distributed.tcp.thread_stacksize|\ + tests.unit.topology.numa_allocator|\ + tests.unit.modules.runtime_components.distributed.tcp.migrate_polymorphic_component" diff --git a/.github/workflows/windows_debug_vs2022_fetch_boost.yml b/.github/workflows/windows_debug_vs2022_fetch_boost.yml new file mode 100644 index 000000000000..1e7a7e5f8123 --- /dev/null +++ b/.github/workflows/windows_debug_vs2022_fetch_boost.yml @@ -0,0 +1,61 @@ +# Copyright (c) 2024 Vedant Nimje +# +# SPDX-License-Identifier: BSL-1.0 +# Distributed under the Boost Software License, Version 1.0. (See accompanying +# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +name: Windows CI (Debug, VS2022 toolset) with Boost Fetch + +on: [pull_request] + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + - uses: jwlawson/actions-setup-cmake@v1.14 + with: + cmake-version: '3.22.x' + - name: Install dependencies + run: | + md C:\projects + $client = new-object System.Net.WebClient + $client.DownloadFile("https://rostam.cct.lsu.edu/download/builder/vcpkg-export-hpx-dependencies-2022.7z","C:\projects\vcpkg-export-hpx-dependencies.7z") + 7z x C:\projects\vcpkg-export-hpx-dependencies.7z -y -oC:\projects\vcpkg + - name: Configure + shell: bash + run: | + cmake . -Bbuild -G'Visual Studio 17 2022' \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_TOOLCHAIN_FILE='C:/projects/vcpkg/scripts/buildsystems/vcpkg.cmake' \ + -DHPX_WITH_FETCH_BOOST=ON \ + -DHPX_WITH_FETCH_ASIO=ON \ + -DHPX_WITH_EXAMPLES=ON \ + -DHPX_WITH_TESTS=ON \ + -DHPX_WITH_TESTS_UNIT=ON \ + -DHPX_WITH_DEPRECATION_WARNINGS=OFF \ + -DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=2 \ + -DHPX_COROUTINES_WITH_SWAP_CONTEXT_EMULATION=ON \ + -DHPX_WITH_CHECK_MODULE_DEPENDENCIES=On + - name: Build + shell: bash + run: | + cmake --build build --config Debug \ + --target ALL_BUILD \ + -- -maxcpucount:2 -verbosity:minimal -nologo + - name: Install + shell: bash + run: | + cmake --install build --config Debug + - name: Test + run: | + Set-Alias -Name grep -Value 'C:\Program Files\Git\usr\bin\grep.exe' + Set-Alias -Name sed -Value 'C:\Program Files\Git\usr\bin\sed.exe' + cd build + ctest ` + --output-on-failure ` + --build-config Debug ` + --tests-regex tests.examples ` + --exclude-regex ` + $(grep -v -e ^# -e ^$ D:/a/hpx/hpx/.github/workflows/tests.examples.targets | sed ':b;N;$!bb;s/\n/|/g') diff --git a/CMakeLists.txt b/CMakeLists.txt index 996c66ba25e3..ff03f869940a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -958,6 +958,15 @@ if(HPX_WITH_APEX) ) endif() +hpx_option( + HPX_WITH_FETCH_BOOST + BOOL + "Use FetchContent to fetch Boost. By default an installed Boost will be used. (default: OFF)" + OFF + CATEGORY "Build Targets" + ADVANCED +) + # Options for automatically fetching Asio hpx_option( HPX_WITH_FETCH_ASIO diff --git a/cmake/HPX_SetupBoost.cmake b/cmake/HPX_SetupBoost.cmake index 873d7724a714..86d2d3fa7e75 100644 --- a/cmake/HPX_SetupBoost.cmake +++ b/cmake/HPX_SetupBoost.cmake @@ -5,6 +5,70 @@ # Distributed under the Boost Software License, Version 1.0. (See accompanying # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +if(HPX_WITH_FETCH_BOOST) + set(HPX_WITH_BOOST_VERSION "1.84.0") + hpx_info( + "HPX_WITH_FETCH_BOOST=${HPX_WITH_FETCH_BOOST}, Boost v${HPX_WITH_BOOST_VERSION} will be fetched using CMake's FetchContent" + ) + include(FetchContent) + fetchcontent_declare( + Boost + URL https://github.com/boostorg/boost/releases/download/boost-${HPX_WITH_BOOST_VERSION}/boost-${HPX_WITH_BOOST_VERSION}.tar.gz + TLS_VERIFY true + DOWNLOAD_EXTRACT_TIMESTAMP true + ) + fetchcontent_populate(Boost) + set(HPX_WITH_BUILD_FETCHED_BOOST + "Execute process" + CACHE STRING "Used by command line tool to build fetched Boost" + ) + set(HPX_WITH_BUILD_FETCHED_BOOST_CHECK + "" + CACHE + STRING + "for internal use only, do not modify. Checks if fetched Boost is built" + ) + + if(NOT HPX_WITH_BUILD_FETCHED_BOOST STREQUAL + HPX_WITH_BUILD_FETCHED_BOOST_CHECK + ) + if(WIN32) + execute_process( + COMMAND + cmd /C + "cd ${CMAKE_BINARY_DIR}\\_deps\\boost-src && .\\bootstrap.bat && .\\b2 headers cxxflags=/std:c++${HPX_CXX_STANDARD}" + ) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + execute_process( + COMMAND + sh -c + "cd ${CMAKE_BINARY_DIR}/_deps/boost-src && ./bootstrap.sh --prefix=${CMAKE_BINARY_DIR}/_deps/boost-installed && ./b2 && ./b2 install --prefix=${CMAKE_BINARY_DIR}/_deps/boost-installed cxxflags=--std=c++${HPX_CXX_STANDARD}" + ) + else() + execute_process( + COMMAND + sh -c + "cd ${CMAKE_BINARY_DIR}/_deps/boost-src && ./bootstrap.sh && ./b2 headers cxxflags=--std=c++${HPX_CXX_STANDARD}" + ) + endif() + set(HPX_WITH_BUILD_FETCHED_BOOST_CHECK + ${HPX_WITH_BUILD_FETCHED_BOOST} + CACHE + INTERNAL + "for internal use only, do not modify. Checks if fetched Boost is built" + ) + endif() + + set(Boost_DIR + "${CMAKE_BINARY_DIR}/_deps/boost-src" + CACHE INTERNAL "" + ) + set(Boost_INCLUDE_DIR + "${CMAKE_BINARY_DIR}/_deps/boost-src" + CACHE INTERNAL "" + ) +endif() + # In case find_package(HPX) is called multiple times if(NOT TARGET hpx_dependencies_boost) # We first try to find the required minimum set of Boost libraries. This will