Skip to content

Commit e65cf01

Browse files
committed
fix linking with ze_loader and cuda
1 parent d2934a0 commit e65cf01

File tree

9 files changed

+172
-166
lines changed

9 files changed

+172
-166
lines changed

CMakeLists.txt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -711,16 +711,31 @@ else()
711711
)
712712
endif()
713713

714-
if((UMF_BUILD_GPU_TESTS OR UMF_BUILD_GPU_EXAMPLES) AND UMF_BUILD_CUDA_PROVIDER)
715-
find_package(CUDA REQUIRED cuda)
716-
if(CUDA_LIBRARIES)
717-
set(UMF_CUDA_ENABLED TRUE)
718-
else()
719-
message(
720-
STATUS "Disabling tests and examples that use the CUDA provider "
721-
"because the CUDA libraries they require were not found.")
714+
if(UMF_BUILD_GPU_TESTS OR UMF_BUILD_GPU_EXAMPLES)
715+
if(UMF_BUILD_CUDA_PROVIDER)
716+
find_package(CUDA REQUIRED cuda)
717+
if(CUDA_LIBRARIES)
718+
set(UMF_CUDA_ENABLED TRUE)
719+
else()
720+
message(
721+
STATUS
722+
"Disabling tests and examples that use the CUDA Provider "
723+
"because the CUDA libraries they require were not found.")
724+
endif()
725+
endif()
726+
727+
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
728+
find_package(ZE_LOADER REQUIRED ze_loader)
729+
if(ZE_LOADER_LIBRARIES)
730+
set(UMF_LEVEL_ZERO_ENABLED TRUE)
731+
else()
732+
message(
733+
STATUS
734+
"Disabling tests and examples that use the Level Zero Provider "
735+
"because the Level Zero libraries they require were not found."
736+
)
737+
endif()
722738
endif()
723-
# TODO do the same for ze_loader
724739
endif()
725740

726741
add_subdirectory(src)

benchmark/CMakeLists.txt

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ function(add_umf_benchmark)
6060
LIBS ${BENCH_LIBS})
6161

6262
target_include_directories(
63-
${BENCH_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/include
64-
${UMF_CMAKE_SOURCE_DIR}/src/utils)
63+
${BENCH_NAME}
64+
PRIVATE ${UMF_CMAKE_SOURCE_DIR}/include
65+
${UMF_CMAKE_SOURCE_DIR}/src/utils
66+
${UMF_CMAKE_SOURCE_DIR}/test/common)
6567

6668
target_link_directories(${BENCH_NAME} PRIVATE ${ARG_LIBDIRS})
6769

@@ -87,16 +89,6 @@ function(add_umf_benchmark)
8789
set_property(TEST ${BENCH_NAME} PROPERTY ENVIRONMENT_MODIFICATION
8890
"${DLL_PATH_LIST}")
8991
endif()
90-
if(LINUX)
91-
# prepend LD_LIBRARY_PATH with ${CMAKE_BINARY_DIR}/lib it is required
92-
# because ${CMAKE_BINARY_DIR}/lib contains libze_loader.so and tests
93-
# should use it instead of system one.
94-
set_property(
95-
TEST ${BENCH_NAME}
96-
PROPERTY ENVIRONMENT_MODIFICATION
97-
"LD_LIBRARY_PATH=path_list_prepend:${CMAKE_BINARY_DIR}/lib"
98-
)
99-
endif()
10092

10193
if(UMF_POOL_JEMALLOC_ENABLED)
10294
target_compile_definitions(${BENCH_NAME}
@@ -106,19 +98,16 @@ function(add_umf_benchmark)
10698
target_compile_definitions(${BENCH_NAME}
10799
PRIVATE UMF_POOL_SCALABLE_ENABLED=1)
108100
endif()
109-
if(UMF_BUILD_LEVEL_ZERO_PROVIDER)
101+
if(UMF_LEVEL_ZERO_ENABLED)
110102
target_compile_definitions(${BENCH_NAME}
111103
PRIVATE UMF_PROVIDER_LEVEL_ZERO_ENABLED=1)
112-
target_include_directories(
113-
${BENCH_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/test/common
114-
${LEVEL_ZERO_INCLUDE_DIRS})
104+
target_include_directories(${BENCH_NAME}
105+
PRIVATE ${LEVEL_ZERO_INCLUDE_DIRS})
115106
endif()
116-
if(UMF_BUILD_CUDA_PROVIDER)
107+
if(UMF_CUDA_ENABLED)
117108
target_compile_definitions(${BENCH_NAME}
118109
PRIVATE UMF_BUILD_CUDA_PROVIDER=1)
119-
target_include_directories(
120-
${BENCH_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/test/common
121-
${CUDA_INCLUDE_DIRS})
110+
target_include_directories(${BENCH_NAME} PRIVATE ${CUDA_INCLUDE_DIRS})
122111
endif()
123112
if(UMF_BUILD_GPU_TESTS)
124113
target_compile_definitions(${BENCH_NAME} PRIVATE UMF_BUILD_GPU_TESTS=1)
@@ -131,8 +120,9 @@ set(LIB_DIRS ${LIBHWLOC_LIBRARY_DIRS})
131120
if(LINUX)
132121
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} m)
133122
endif()
134-
if(UMF_BUILD_GPU_TESTS AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
123+
if(UMF_BUILD_GPU_TESTS AND UMF_LEVEL_ZERO_ENABLED)
135124
set(SRCS_OPTIONAL ${SRCS_OPTIONAL} ../src/utils/utils_level_zero.cpp)
125+
set(LIB_DIRS ${LIB_DIRS} ${ZE_LOADER_LIBRARY_DIRS})
136126
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} ze_loader)
137127
# TODO add CUDA
138128
endif()

cmake/FindZE_LOADER.cmake

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright (C) 2025 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'ze_loader' using find_library()")
6+
7+
find_library(ZE_LOADER_LIBRARY NAMES libze_loader ze_loader)
8+
set(ZE_LOADER_LIBRARIES ${ZE_LOADER_LIBRARY})
9+
set(ZE_LOADER_INCLUDE_DIRS ${ZE_LOADER_INCLUDE_DIR})
10+
11+
get_filename_component(ZE_LOADER_LIB_DIR ${ZE_LOADER_LIBRARIES} DIRECTORY)
12+
set(ZE_LOADER_LIBRARY_DIRS ${ZE_LOADER_LIB_DIR})
13+
14+
if(WINDOWS)
15+
find_file(ZE_LOADER_DLL NAMES "ze_loader.dll")
16+
get_filename_component(ZE_LOADER_DLL_DIR ${ZE_LOADER_DLL} DIRECTORY)
17+
set(ZE_LOADER_DLL_DIRS ${ZE_LOADER_DLL_DIR})
18+
endif()
19+
20+
if(ZE_LOADER_LIBRARY)
21+
message(STATUS " Found ZE_LOADER using find_library()")
22+
message(STATUS " ZE_LOADER_LIBRARIES = ${ZE_LOADER_LIBRARIES}")
23+
message(STATUS " ZE_LOADER_INCLUDE_DIRS = ${ZE_LOADER_INCLUDE_DIRS}")
24+
message(STATUS " ZE_LOADER_LIBRARY_DIRS = ${ZE_LOADER_LIBRARY_DIRS}")
25+
if(WINDOWS)
26+
message(STATUS " ZE_LOADER_DLL_DIRS = ${ZE_LOADER_DLL_DIRS}")
27+
endif()
28+
else()
29+
set(MSG_NOT_FOUND "ZE_LOADER NOT found (set CMAKE_PREFIX_PATH to point the "
30+
"location)")
31+
if(ZE_LOADER_FIND_REQUIRED)
32+
message(FATAL_ERROR ${MSG_NOT_FOUND})
33+
else()
34+
message(WARNING ${MSG_NOT_FOUND})
35+
endif()
36+
endif()

examples/CMakeLists.txt

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ if(UMF_POOL_SCALABLE_ENABLED)
4141
endif()
4242
endif()
4343

44-
if(UMF_BUILD_GPU_EXAMPLES AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
44+
if(UMF_BUILD_GPU_EXAMPLES AND UMF_LEVEL_ZERO_ENABLED)
4545
set(EXAMPLE_NAME umf_example_level_zero_shared_memory)
4646

4747
add_umf_executable(
@@ -56,7 +56,8 @@ if(UMF_BUILD_GPU_EXAMPLES AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
5656
${UMF_CMAKE_SOURCE_DIR}/include
5757
${UMF_CMAKE_SOURCE_DIR}/examples/common)
5858

59-
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS})
59+
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS}
60+
${ZE_LOADER_LIBRARY_DIRS})
6061

6162
add_test(
6263
NAME ${EXAMPLE_NAME}
@@ -70,25 +71,13 @@ if(UMF_BUILD_GPU_EXAMPLES AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
7071
set_property(TEST ${EXAMPLE_NAME} PROPERTY ENVIRONMENT_MODIFICATION
7172
"${DLL_PATH_LIST}")
7273
endif()
73-
if(LINUX)
74-
# prepend LD_LIBRARY_PATH with ${CMAKE_BINARY_DIR}/lib it is required
75-
# because ${CMAKE_BINARY_DIR}/lib contains libze_loader.so and tests
76-
# should use it instead of system one.
77-
set_property(
78-
TEST ${EXAMPLE_NAME}
79-
PROPERTY ENVIRONMENT_MODIFICATION
80-
"LD_LIBRARY_PATH=path_list_prepend:${CMAKE_BINARY_DIR}/lib"
81-
)
82-
endif()
8374
else()
8475
message(STATUS "GPU Level Zero shared memory example requires "
8576
"UMF_BUILD_GPU_EXAMPLES and UMF_BUILD_LEVEL_ZERO_PROVIDER "
8677
"to be turned ON - skipping")
8778
endif()
8879

89-
if(UMF_BUILD_GPU_EXAMPLES
90-
AND UMF_BUILD_CUDA_PROVIDER
91-
AND UMF_CUDA_ENABLED)
80+
if(UMF_BUILD_GPU_EXAMPLES AND UMF_CUDA_ENABLED)
9281
set(EXAMPLE_NAME umf_example_cuda_shared_memory)
9382

9483
add_umf_executable(
@@ -127,7 +116,7 @@ endif()
127116
# TODO: it looks like there is some problem with IPC implementation in Level
128117
# Zero on windows
129118
if(UMF_BUILD_GPU_EXAMPLES
130-
AND UMF_BUILD_LEVEL_ZERO_PROVIDER
119+
AND UMF_LEVEL_ZERO_ENABLED
131120
AND LINUX)
132121
set(EXAMPLE_NAME umf_example_ipc_level_zero)
133122

@@ -143,7 +132,8 @@ if(UMF_BUILD_GPU_EXAMPLES
143132
${UMF_CMAKE_SOURCE_DIR}/include
144133
${UMF_CMAKE_SOURCE_DIR}/examples/common)
145134

146-
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS})
135+
target_link_directories(${EXAMPLE_NAME} PRIVATE ${LIBHWLOC_LIBRARY_DIRS}
136+
${ZE_LOADER_LIBRARY_DIRS})
147137

148138
add_test(
149139
NAME ${EXAMPLE_NAME}
@@ -157,16 +147,6 @@ if(UMF_BUILD_GPU_EXAMPLES
157147
set_property(TEST ${EXAMPLE_NAME} PROPERTY ENVIRONMENT_MODIFICATION
158148
"${DLL_PATH_LIST}")
159149
endif()
160-
if(LINUX)
161-
# prepend LD_LIBRARY_PATH with ${CMAKE_BINARY_DIR}/lib it is required
162-
# because ${CMAKE_BINARY_DIR}/lib contains libze_loader.so and tests
163-
# should use it instead of system one.
164-
set_property(
165-
TEST ${EXAMPLE_NAME}
166-
PROPERTY ENVIRONMENT_MODIFICATION
167-
"LD_LIBRARY_PATH=path_list_prepend:${CMAKE_BINARY_DIR}/lib"
168-
)
169-
endif()
170150
else()
171151
message(
172152
STATUS

examples/cmake/FindZE_LOADER.cmake

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright (C) 2025 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'ze_loader' using find_library()")
6+
7+
find_library(ZE_LOADER_LIBRARY NAMES libze_loader ze_loader)
8+
set(ZE_LOADER_LIBRARIES ${ZE_LOADER_LIBRARY})
9+
set(ZE_LOADER_INCLUDE_DIRS ${ZE_LOADER_INCLUDE_DIR})
10+
11+
get_filename_component(ZE_LOADER_LIB_DIR ${ZE_LOADER_LIBRARIES} DIRECTORY)
12+
set(ZE_LOADER_LIBRARY_DIRS ${ZE_LOADER_LIB_DIR})
13+
14+
if(WINDOWS)
15+
find_file(ZE_LOADER_DLL NAMES "ze_loader.dll")
16+
get_filename_component(ZE_LOADER_DLL_DIR ${ZE_LOADER_DLL} DIRECTORY)
17+
set(ZE_LOADER_DLL_DIRS ${ZE_LOADER_DLL_DIR})
18+
endif()
19+
20+
if(ZE_LOADER_LIBRARY)
21+
message(STATUS " Found ZE_LOADER using find_library()")
22+
message(STATUS " ZE_LOADER_LIBRARIES = ${ZE_LOADER_LIBRARIES}")
23+
message(STATUS " ZE_LOADER_INCLUDE_DIRS = ${ZE_LOADER_INCLUDE_DIRS}")
24+
message(STATUS " ZE_LOADER_LIBRARY_DIRS = ${ZE_LOADER_LIBRARY_DIRS}")
25+
if(WINDOWS)
26+
message(STATUS " ZE_LOADER_DLL_DIRS = ${ZE_LOADER_DLL_DIRS}")
27+
endif()
28+
else()
29+
set(MSG_NOT_FOUND "ZE_LOADER NOT found (set CMAKE_PREFIX_PATH to point the "
30+
"location)")
31+
if(ZE_LOADER_FIND_REQUIRED)
32+
message(FATAL_ERROR ${MSG_NOT_FOUND})
33+
else()
34+
message(WARNING ${MSG_NOT_FOUND})
35+
endif()
36+
endif()

examples/cuda_shared_memory/CMakeLists.txt

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,40 @@ if(NOT LIBHWLOC_FOUND)
2121
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
2222
endif()
2323

24-
find_package(CUDA REQUIRED cuda)
25-
24+
# the CUDA headers are fetched from the NVIDIA repository
2625
include(FetchContent)
2726

2827
set(CUDA_REPO "https://gitlab.com/nvidia/headers/cuda-individual/cudart.git")
2928
set(CUDA_TAG cuda-12.5.1)
30-
3129
message(STATUS "Fetching CUDA ${CUDA_TAG} from ${CUDA_REPO} ...")
3230

3331
FetchContent_Declare(
3432
cuda-headers
3533
GIT_REPOSITORY ${CUDA_REPO}
3634
GIT_TAG ${CUDA_TAG}
3735
EXCLUDE_FROM_ALL)
38-
FetchContent_MakeAvailable(cuda-headers)
36+
FetchContent_Populate(cuda-headers)
3937

4038
set(CUDA_INCLUDE_DIRS
4139
${cuda-headers_SOURCE_DIR}
4240
CACHE PATH "Path to CUDA headers")
43-
message(STATUS "CUDA include directory: ${CUDA_INCLUDE_DIRS}")
41+
42+
find_package(CUDA REQUIRED cuda)
43+
44+
set(CUDA_SM_LIBRARY_DIRS ${LIBUMF_LIBRARY_DIRS} ${LIBHWLOC_LIBRARY_DIRS}
45+
${CUDA_LIBRARY_DIRS})
46+
set(CUDA_SM_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS} ${LIBUMF_INCLUDE_DIRS}
47+
${UMF_EXAMPLE_DIR}/common)
48+
set(CUDA_SM_LIBS stdc++ ${CUDA_LIBRARIES} ${LIBUMF_LIBRARIES})
4449

4550
# build the example
4651
set(EXAMPLE_NAME umf_example_cuda_shared_memory)
4752
add_executable(${EXAMPLE_NAME} cuda_shared_memory.c)
48-
target_include_directories(
49-
${EXAMPLE_NAME} PRIVATE ${CUDA_INCLUDE_DIRS} ${LIBUMF_INCLUDE_DIRS}
50-
${UMF_EXAMPLE_DIR}/common)
51-
target_link_directories(
52-
${EXAMPLE_NAME}
53-
PRIVATE
54-
${LIBUMF_LIBRARY_DIRS}
55-
${LIBHWLOC_LIBRARY_DIRS}
56-
${CUDA_LIBRARY_DIRS})
53+
target_include_directories(${EXAMPLE_NAME} PRIVATE ${CUDA_SM_INCLUDE_DIRS})
54+
target_link_directories(${EXAMPLE_NAME} PRIVATE ${CUDA_SM_LIBRARY_DIRS})
5755
target_link_options(${EXAMPLE_NAME} PRIVATE "-Wl,--start-group")
58-
target_link_libraries(${EXAMPLE_NAME} PRIVATE stdc++ ${CUDA_LIBRARIES}
59-
${LIBUMF_LIBRARIES})
56+
target_link_libraries(${EXAMPLE_NAME} PRIVATE ${CUDA_SM_LIBS})
57+
target_link_options(${EXAMPLE_NAME} PRIVATE "-Wl,--end-group")
6058

6159
# an optional part - adds a test of this example
6260
add_test(
@@ -68,10 +66,10 @@ set_tests_properties(${EXAMPLE_NAME} PROPERTIES LABELS "example-standalone")
6866

6967
if(LINUX)
7068
# set LD_LIBRARY_PATH
69+
string(JOIN ":" CUDA_SM_LIBRARY_DIRS_JOINED ${CUDA_SM_LIBRARY_DIRS})
7170
set_property(
7271
TEST ${EXAMPLE_NAME}
7372
PROPERTY
7473
ENVIRONMENT_MODIFICATION
75-
"LD_LIBRARY_PATH=path_list_append:${LIBUMF_LIBRARY_DIRS};LD_LIBRARY_PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}"
76-
)
74+
"LD_LIBRARY_PATH=path_list_append:${CUDA_SM_LIBRARY_DIRS_JOINED}")
7775
endif()

0 commit comments

Comments
 (0)