Skip to content

Commit c89b4a2

Browse files
committed
Add option to disable hwloc
1 parent bb07950 commit c89b4a2

File tree

6 files changed

+96
-46
lines changed

6 files changed

+96
-46
lines changed

.github/workflows/basic.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ jobs:
2323
shared_library: ['OFF']
2424
level_zero_provider: ['ON']
2525
install_tbb: ['ON']
26+
disable_hwloc: ['OFF']
2627
include:
2728
- os: 'ubuntu-20.04'
2829
build_type: Release
@@ -69,6 +70,13 @@ jobs:
6970
shared_library: 'ON'
7071
level_zero_provider: 'ON'
7172
install_tbb: 'OFF'
73+
- os: 'ubuntu-22.04'
74+
build_type: Release
75+
compiler: {c: gcc, cxx: g++}
76+
shared_library: 'ON'
77+
level_zero_provider: 'ON'
78+
install_tbb: 'ON'
79+
disable_hwloc: 'ON'
7280
runs-on: ${{matrix.os}}
7381

7482
steps:
@@ -122,6 +130,7 @@ jobs:
122130
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
123131
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
124132
-DUMF_TESTS_FAIL_ON_SKIP=ON
133+
-DUMF_DISABLE_HWLOC=${{matrix.disable_hwloc}}
125134
126135
- name: Build UMF
127136
run: cmake --build ${{env.BUILD_DIR}} -j $(nproc)

CMakeLists.txt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ option(USE_TSAN "Enable ThreadSanitizer checks" OFF)
6161
option(USE_MSAN "Enable MemorySanitizer checks" OFF)
6262
option(USE_VALGRIND "Enable Valgrind instrumentation" OFF)
6363
option(USE_GCOV "Enable gcov support" OFF)
64+
option(
65+
UMF_DISABLE_HWLOC
66+
"Disable features that requires hwloc (OS provider, memory targets, topolgy discovery)"
67+
OFF)
6468

6569
# set UMF_PROXY_LIB_BASED_ON_POOL to one of: SCALABLE or JEMALLOC
6670
set(KNOWN_PROXY_LIB_POOLS SCALABLE JEMALLOC)
@@ -95,14 +99,17 @@ else()
9599
endif()
96100

97101
if(NOT UMF_LINK_HWLOC_STATICALLY)
98-
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
99-
if(NOT LIBHWLOC_FOUND)
100-
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
102+
if(NOT UMF_DISABLE_HWLOC)
103+
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
104+
if(NOT LIBHWLOC_FOUND)
105+
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
106+
endif()
107+
108+
# add PATH to DLL on Windows
109+
set(DLL_PATH_LIST
110+
"${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin"
111+
)
101112
endif()
102-
# add PATH to DLL on Windows
103-
set(DLL_PATH_LIST
104-
"${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin"
105-
)
106113
else()
107114
if(NOT WINDOWS)
108115
message(FATAL_ERROR "hwloc can be statically linked only on Windows")
@@ -329,7 +336,11 @@ if(UMF_BUILD_BENCHMARKS)
329336
endif()
330337

331338
if(UMF_BUILD_EXAMPLES)
332-
add_subdirectory(examples)
339+
if(NOT UMF_DISABLE_HWLOC)
340+
add_subdirectory(examples)
341+
else()
342+
message(WARNING "Examples cannot be build - hwloc disabled")
343+
endif()
333344
endif()
334345

335346
# Conditional configuration for Level Zero provider

examples/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ set(EXAMPLE_NAME umf_example_basic)
1818
add_umf_executable(
1919
NAME ${EXAMPLE_NAME}
2020
SRCS basic/basic.c
21-
LIBS umf hwloc)
21+
LIBS umf ${LIBHWLOC_LIBRARIES})
2222

2323
target_include_directories(
2424
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -172,7 +172,7 @@ if(LINUX)
172172
add_umf_executable(
173173
NAME ${EXAMPLE_NAME}
174174
SRCS memspace/memspace_numa.c
175-
LIBS umf hwloc numa)
175+
LIBS umf ${LIBHWLOC_LIBRARIES} numa)
176176

177177
target_include_directories(
178178
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -190,7 +190,7 @@ if(LINUX)
190190
add_umf_executable(
191191
NAME ${EXAMPLE_NAME}
192192
SRCS memspace/memspace_hmat.c
193-
LIBS umf hwloc numa)
193+
LIBS umf ${LIBHWLOC_LIBRARIES} numa)
194194

195195
target_include_directories(
196196
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils
@@ -209,7 +209,7 @@ if(LINUX)
209209
add_umf_executable(
210210
NAME ${EXAMPLE_NAME}
211211
SRCS custom_provider/file_provider.c
212-
LIBS umf hwloc)
212+
LIBS umf ${LIBHWLOC_LIBRARIES})
213213

214214
target_include_directories(
215215
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils

src/CMakeLists.txt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ set(BA_SOURCES
6161
${BA_SOURCES}
6262
PARENT_SCOPE)
6363

64+
set(HWLOC_DEPENDENT_SOURCES topology.c)
65+
6466
set(UMF_SOURCES
6567
${BA_SOURCES}
6668
libumf.c
@@ -74,8 +76,11 @@ set(UMF_SOURCES
7476
provider/provider_tracking.c
7577
critnib/critnib.c
7678
pool/pool_proxy.c
77-
pool/pool_scalable.c
78-
topology.c)
79+
pool/pool_scalable.c)
80+
81+
if(NOT UMF_DISABLE_HWLOC)
82+
set(UMF_SOURCES ${UMF_SOURCES} ${HWLOC_DEPENDENT_SOURCES})
83+
endif()
7984

8085
set(UMF_SOURCES_LINUX libumf_linux.c)
8186

@@ -93,16 +98,22 @@ set(UMF_SOURCES_COMMON_LINUX_MACOSX
9398
memspaces/memspace_highest_bandwidth.c
9499
memspaces/memspace_lowest_latency.c)
95100

96-
set(UMF_SOURCES_LINUX ${UMF_SOURCES_LINUX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
97-
provider/provider_os_memory_linux.c)
101+
if(NOT UMF_DISABLE_HWLOC)
102+
set(UMF_SOURCES_LINUX
103+
${UMF_SOURCES_LINUX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
104+
provider/provider_os_memory_linux.c)
98105

99-
set(UMF_SOURCES_MACOSX ${UMF_SOURCES_MACOSX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
100-
provider/provider_os_memory_macosx.c)
106+
set(UMF_SOURCES_MACOSX
107+
${UMF_SOURCES_MACOSX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
108+
provider/provider_os_memory_macosx.c)
101109

102-
set(UMF_SOURCES_WINDOWS ${UMF_SOURCES_WINDOWS} provider/provider_os_memory.c
103-
provider/provider_os_memory_windows.c)
110+
set(UMF_SOURCES_WINDOWS
111+
${UMF_SOURCES_WINDOWS} provider/provider_os_memory.c
112+
provider/provider_os_memory_windows.c)
113+
114+
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
115+
endif()
104116

105-
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
106117
set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS}
107118
${LIBHWLOC_LIBRARY_DIRS})
108119

@@ -121,11 +132,14 @@ elseif(MACOSX)
121132
endif()
122133

123134
if(UMF_BUILD_SHARED_LIBRARY)
135+
if(NOT UMF_DISABLE_HWLOC)
136+
set(HWLOC_LIB hwloc)
137+
endif()
124138
add_umf_library(
125139
NAME umf
126140
TYPE SHARED
127141
SRCS ${UMF_SOURCES}
128-
LIBS ${UMF_LIBS} hwloc
142+
LIBS ${UMF_LIBS} ${HWLOC_LIB}
129143
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.map
130144
WINDOWS_DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.def)
131145
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
@@ -143,6 +157,11 @@ else()
143157
LIBS ${UMF_LIBS})
144158
endif()
145159

160+
if(UMF_DISABLE_HWLOC)
161+
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
162+
UMF_NO_HWLOC=1)
163+
endif()
164+
146165
if(UMF_LINK_HWLOC_STATICALLY)
147166
add_dependencies(umf hwloc)
148167
endif()
@@ -190,6 +209,8 @@ install(TARGETS umf EXPORT ${PROJECT_NAME}-targets)
190209

191210
add_subdirectory(pool)
192211

193-
if(UMF_PROXY_LIB_ENABLED AND NOT UMF_LINK_HWLOC_STATICALLY)
212+
if(UMF_PROXY_LIB_ENABLED
213+
AND NOT UMF_LINK_HWLOC_STATICALLY
214+
AND NOT UMF_DISABLE_HWLOC)
194215
add_subdirectory(proxy_lib)
195216
endif()

src/libumf.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
#include "base_alloc_global.h"
1313
#include "memspace_internal.h"
1414
#include "provider_tracking.h"
15-
#include "topology.h"
1615
#include "utils_log.h"
16+
#if !defined(UMF_NO_HWLOC)
17+
#include "topology.h"
18+
#endif
1719

1820
umf_memory_tracker_handle_t TRACKER = NULL;
1921

@@ -30,7 +32,7 @@ int umfInit(void) {
3032

3133
void umfTearDown(void) {
3234
if (util_fetch_and_add64(&umfRefCount, -1) == 1) {
33-
#ifndef _WIN32
35+
#if !defined(_WIN32) && !defined(UMF_NO_HWLOC)
3436
umfMemspaceHostAllDestroy();
3537
umfMemspaceHighestCapacityDestroy();
3638
umfMemspaceHighestBandwidthDestroy();

test/CMakeLists.txt

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -152,26 +152,29 @@ endif()
152152

153153
if(UMF_BUILD_LIBUMF_POOL_DISJOINT
154154
AND UMF_BUILD_LIBUMF_POOL_JEMALLOC
155-
AND UMF_POOL_SCALABLE_ENABLED)
155+
AND UMF_POOL_SCALABLE_ENABLED
156+
AND (NOT UMF_DISABLE_HWLOC))
156157
add_umf_test(
157158
NAME c_api_multi_pool
158159
SRCS c_api/multi_pool.c
159160
LIBS disjoint_pool jemalloc_pool ${JEMALLOC_LIBRARIES})
160161
endif()
161162

162-
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
163+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC AND (NOT UMF_DISABLE_HWLOC))
163164
add_umf_test(
164165
NAME jemalloc_pool
165166
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
166167
LIBS jemalloc_pool)
167168
endif()
168169

169-
if(UMF_POOL_SCALABLE_ENABLED)
170+
if(UMF_POOL_SCALABLE_ENABLED AND (NOT UMF_DISABLE_HWLOC))
170171
add_umf_test(NAME scalable_pool SRCS pools/scalable_pool.cpp
171172
malloc_compliance_tests.cpp)
172173
endif()
173174

174-
if(LINUX) # OS-specific functions are implemented only for Linux now
175+
if(LINUX AND (NOT UMF_DISABLE_HWLOC)) # OS-specific functions are implemented
176+
# only for
177+
# Linux now
175178
if(PkgConfig_FOUND)
176179
pkg_check_modules(LIBNUMA numa)
177180
endif()
@@ -266,7 +269,9 @@ add_umf_test(
266269
LIBS ${UMF_UTILS_FOR_TEST})
267270

268271
# tests for the proxy library
269-
if(UMF_PROXY_LIB_ENABLED AND UMF_BUILD_SHARED_LIBRARY)
272+
if(UMF_PROXY_LIB_ENABLED
273+
AND UMF_BUILD_SHARED_LIBRARY
274+
AND NOT UMF_DISABLE_HWLOC)
270275
add_umf_test(
271276
NAME proxy_lib_basic
272277
SRCS ${BA_SOURCES_FOR_TEST} test_proxy_lib.cpp
@@ -317,22 +322,24 @@ function(add_umf_ipc_test)
317322
endfunction()
318323

319324
if(LINUX)
320-
build_umf_test(
321-
NAME
322-
ipc_os_prov_consumer
323-
SRCS
324-
ipc_os_prov_consumer.c
325-
common/ipc_common.c
326-
common/ipc_os_prov_common.c)
327-
build_umf_test(
328-
NAME
329-
ipc_os_prov_producer
330-
SRCS
331-
ipc_os_prov_producer.c
332-
common/ipc_common.c
333-
common/ipc_os_prov_common.c)
334-
add_umf_ipc_test(TEST ipc_os_prov_anon_fd)
335-
add_umf_ipc_test(TEST ipc_os_prov_shm)
325+
if(NOT UMF_DISABLE_HWLOC)
326+
build_umf_test(
327+
NAME
328+
ipc_os_prov_consumer
329+
SRCS
330+
ipc_os_prov_consumer.c
331+
common/ipc_common.c
332+
common/ipc_os_prov_common.c)
333+
build_umf_test(
334+
NAME
335+
ipc_os_prov_producer
336+
SRCS
337+
ipc_os_prov_producer.c
338+
common/ipc_common.c
339+
common/ipc_os_prov_common.c)
340+
add_umf_ipc_test(TEST ipc_os_prov_anon_fd)
341+
add_umf_ipc_test(TEST ipc_os_prov_shm)
342+
endif()
336343
if(UMF_BUILD_GPU_TESTS AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
337344
build_umf_test(
338345
NAME

0 commit comments

Comments
 (0)