Skip to content

Commit

Permalink
Merge pull request #6394 from vrnimje/cmake_options
Browse files Browse the repository at this point in the history
Adding option for installing Hwloc using CMake FetchContent
  • Loading branch information
hkaiser authored Jan 18, 2024
2 parents c0d79c8 + 209a03b commit b99b590
Show file tree
Hide file tree
Showing 5 changed files with 311 additions and 4 deletions.
50 changes: 50 additions & 0 deletions .github/workflows/linux_debug_fetch_hwloc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# 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 HWLoc fetch

on: [pull_request]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Install Boost
run: sudo apt install libboost-all-dev ninja-build

- name: Configure
shell: bash
run: |
cmake \
. \
-Bbuild \
-GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DHPX_WITH_MALLOC=system \
-DHPX_WITH_FETCH_ASIO=ON \
-DHPX_WITH_FETCH_HWLOC=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
81 changes: 81 additions & 0 deletions .github/workflows/macos_debug_fetch_hwloc.yml
Original file line number Diff line number Diff line change
@@ -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 HWLoc 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 boost 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_HWLOC=ON \
-DHPX_WITH_EXAMPLES=ON \
-DHPX_WITH_TESTS=ON \
-DHPX_WITH_TESTS_MAX_THREADS_PER_LOCALITY=3 \
-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"
61 changes: 61 additions & 0 deletions .github/workflows/windows_debug_vs2022_fetch_hwloc.yml
Original file line number Diff line number Diff line change
@@ -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 HWLoc fetch

on: [pull_request]

jobs:
build:
runs-on: windows-latest

steps:
- uses: actions/checkout@v4
- uses: jwlawson/[email protected]
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_ASIO=ON \
-DHPX_WITH_FETCH_HWLOC=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')
22 changes: 22 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -980,6 +980,16 @@ hpx_option(
ADVANCED
)

# Option for automatically fetching Hwloc
hpx_option(
HPX_WITH_FETCH_HWLOC
BOOL
"Use FetchContent to fetch Hwloc. By default an installed Hwloc will be used. (default: OFF)"
OFF
CATEGORY "Build Targets"
ADVANCED
)

# cmake-format: off
# LibCDS option
# NOTE: The libcds option is disabled for the 1.5.0 release as it is not ready
Expand Down Expand Up @@ -2322,6 +2332,18 @@ endif()

if(HPX_WITH_EXAMPLES)
add_hpx_pseudo_target(examples)
if(HPX_WITH_FETCH_HWLOC AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
add_custom_target(
HwlocDLL ALL
COMMAND ${CMAKE_COMMAND} -E make_directory
"${CMAKE_BINARY_DIR}/$<CONFIG>/bin/"
COMMAND
${CMAKE_COMMAND} -E copy_if_different
"${HWLOC_ROOT}/bin/libhwloc-15.dll"
"${CMAKE_BINARY_DIR}/$<CONFIG>/bin/"
)
add_hpx_pseudo_dependencies(examples HwlocDLL)
endif()
endif()

# ##############################################################################
Expand Down
101 changes: 97 additions & 4 deletions cmake/HPX_SetupHwloc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,102 @@
# 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)

find_package(Hwloc)
if(NOT Hwloc_FOUND)
hpx_error(
"Hwloc could not be found, please specify Hwloc_ROOT to point to the correct location"
if(NOT HPX_WITH_FETCH_HWLOC)
find_package(Hwloc)
if(NOT Hwloc_FOUND)
hpx_error(
"Hwloc could not be found, please specify Hwloc_ROOT to point to the correct location"
)
endif()
else()
set(HPX_WITH_HWLOC_VERSION "2.9")
set(HPX_WITH_HWLOC_RELEASE "2.9.3")
hpx_info(
"HPX_WITH_FETCH_HWLOC=${HPX_WITH_FETCH_HWLOC}, Hwloc v${HPX_WITH_HWLOC_RELEASE} will be fetched using CMake's FetchContent"
)
if(UNIX)
include(FetchContent)
fetchcontent_declare(
HWLoc
URL https://download.open-mpi.org/release/hwloc/v${HPX_WITH_HWLOC_VERSION}/hwloc-${HPX_WITH_HWLOC_RELEASE}.tar.gz
TLS_VERIFY true
)
if(NOT HWLoc_POPULATED)
fetchcontent_populate(HWLoc)
execute_process(
COMMAND
sh -c
"cd ${CMAKE_BINARY_DIR}/_deps/hwloc-src && ./configure --prefix=${CMAKE_BINARY_DIR}/_deps/hwloc-installed && make -j && make install"
)
endif()
set(HWLOC_ROOT "${CMAKE_BINARY_DIR}/_deps/hwloc-installed")
set(Hwloc_INCLUDE_DIR
${HWLOC_ROOT}/include
CACHE INTERNAL ""
)
if(APPLE)
set(Hwloc_LIBRARY
${HWLOC_ROOT}/lib/libhwloc.dylib
CACHE INTERNAL ""
)
else()
set(Hwloc_LIBRARY
${HWLOC_ROOT}/lib/libhwloc.so
CACHE INTERNAL ""
)
endif()

elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows" AND CMAKE_SIZEOF_VOID_P
EQUAL 8
)
fetchcontent_declare(
HWLoc
URL https://download.open-mpi.org/release/hwloc/v${HPX_WITH_HWLOC_VERSION}/hwloc-win64-build-${HPX_WITH_HWLOC_RELEASE}.zip
TLS_VERIFY true
)
if(NOT HWLoc_POPULATED)
fetchcontent_populate(HWLoc)
endif()
set(HWLOC_ROOT
"${CMAKE_BINARY_DIR}/_deps/hwloc-src"
CACHE INTERNAL ""
)
include_directories(${HWLOC_ROOT}/include)
link_directories(${HWLOC_ROOT}/lib)
set(Hwloc_INCLUDE_DIR
${HWLOC_ROOT}/include
CACHE INTERNAL ""
)
set(Hwloc_LIBRARY
${HWLOC_ROOT}/lib/libhwloc.dll.a
CACHE INTERNAL ""
)
else()
fetchcontent_declare(
HWLoc
URL https://download.open-mpi.org/release/hwloc/v${HPX_WITH_HWLOC_VERSION}/hwloc-win32-build-${HPX_WITH_HWLOC_RELEASE}.zip
TLS_VERIFY true
)
if(NOT HWLoc_POPULATED)
fetchcontent_populate(HWLoc)
endif()
set(HWLOC_ROOT
"${CMAKE_BINARY_DIR}/_deps/hwloc-src"
CACHE INTERNAL ""
)
include_directories(${HWLOC_ROOT}/include)
link_directories(${HWLOC_ROOT}/lib)
set(Hwloc_INCLUDE_DIR
${HWLOC_ROOT}/include
CACHE INTERNAL ""
)
set(Hwloc_LIBRARY
${HWLOC_ROOT}/lib/libhwloc.dll.a
CACHE INTERNAL ""
)
endif() # End hwloc installation

add_library(Hwloc::hwloc INTERFACE IMPORTED)
target_include_directories(Hwloc::hwloc INTERFACE ${Hwloc_INCLUDE_DIR})
target_link_libraries(Hwloc::hwloc INTERFACE ${Hwloc_LIBRARY})
endif()

0 comments on commit b99b590

Please sign in to comment.