Skip to content

Commit 9f4b0a6

Browse files
committed
[OpenCL] Fetch headers/icd-loader by default
Introduces the follow CMake options: * `UR_OPENCL_INCLUDE_DIR` - directory containing the OpenCL Headers * `UR_OPENCL_ICD_LOADER_LIBRARY` - path of the OpenCL ICD Loader library In the event that `UR_OPENCL_INCLUDE_DIR` is not specified, clone [KhronosGroup/OpenCL-Headers](https://github.com/KhronosGroup/OpenCL-Headers.git). In the event that `UR_OPENCL_ICD_LOADER_LIBRARY` is not specified, first inspect the system with `find_package(OpenCL 3.0)` and use that if found. Otherwise, clone [KhronosGroup/OpenCL-ICD-Loader](https://github.com/KhronosGroup/OpenCL-ICD-Loader.git).
1 parent 0250c64 commit 9f4b0a6

File tree

1 file changed

+77
-46
lines changed

1 file changed

+77
-46
lines changed

source/adapters/opencl/CMakeLists.txt

Lines changed: 77 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,65 +5,96 @@
55

66
set(OPENCL_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "OpenCL adapter directory")
77

8+
set(UR_OPENCL_INCLUDE_DIR "" CACHE PATH "Directory containing the OpenCL Headers")
9+
set(UR_OPENCL_ICD_LOADER_LIBRARY "" CACHE FILEPATH "Path of the OpenCL ICD Loader library")
10+
11+
find_package(Threads REQUIRED)
12+
813
set(TARGET_NAME ur_adapter_opencl)
914

10-
add_ur_adapter(${TARGET_NAME}
11-
SHARED
12-
${CMAKE_CURRENT_SOURCE_DIR}/ur_interface_loader.cpp
13-
${CMAKE_CURRENT_SOURCE_DIR}/adapter.hpp
14-
${CMAKE_CURRENT_SOURCE_DIR}/adapter.cpp
15-
${CMAKE_CURRENT_SOURCE_DIR}/command_buffer.hpp
16-
${CMAKE_CURRENT_SOURCE_DIR}/command_buffer.cpp
17-
${CMAKE_CURRENT_SOURCE_DIR}/common.hpp
18-
${CMAKE_CURRENT_SOURCE_DIR}/common.cpp
19-
${CMAKE_CURRENT_SOURCE_DIR}/context.hpp
20-
${CMAKE_CURRENT_SOURCE_DIR}/context.cpp
21-
${CMAKE_CURRENT_SOURCE_DIR}/device.hpp
22-
${CMAKE_CURRENT_SOURCE_DIR}/device.cpp
23-
${CMAKE_CURRENT_SOURCE_DIR}/enqueue.cpp
24-
${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
25-
${CMAKE_CURRENT_SOURCE_DIR}/image.cpp
26-
${CMAKE_CURRENT_SOURCE_DIR}/kernel.cpp
27-
${CMAKE_CURRENT_SOURCE_DIR}/memory.cpp
28-
${CMAKE_CURRENT_SOURCE_DIR}/platform.hpp
29-
${CMAKE_CURRENT_SOURCE_DIR}/platform.cpp
30-
${CMAKE_CURRENT_SOURCE_DIR}/program.cpp
31-
${CMAKE_CURRENT_SOURCE_DIR}/queue.cpp
32-
${CMAKE_CURRENT_SOURCE_DIR}/sampler.cpp
33-
${CMAKE_CURRENT_SOURCE_DIR}/usm.cpp
34-
${CMAKE_CURRENT_SOURCE_DIR}/usm_p2p.cpp
35-
${CMAKE_CURRENT_SOURCE_DIR}/../../ur/ur.cpp
36-
${CMAKE_CURRENT_SOURCE_DIR}/../../ur/ur.hpp
15+
add_ur_adapter(${TARGET_NAME} SHARED
16+
${CMAKE_CURRENT_SOURCE_DIR}/ur_interface_loader.cpp
17+
${CMAKE_CURRENT_SOURCE_DIR}/adapter.hpp
18+
${CMAKE_CURRENT_SOURCE_DIR}/adapter.cpp
19+
${CMAKE_CURRENT_SOURCE_DIR}/command_buffer.hpp
20+
${CMAKE_CURRENT_SOURCE_DIR}/command_buffer.cpp
21+
${CMAKE_CURRENT_SOURCE_DIR}/common.hpp
22+
${CMAKE_CURRENT_SOURCE_DIR}/common.cpp
23+
${CMAKE_CURRENT_SOURCE_DIR}/context.hpp
24+
${CMAKE_CURRENT_SOURCE_DIR}/context.cpp
25+
${CMAKE_CURRENT_SOURCE_DIR}/device.hpp
26+
${CMAKE_CURRENT_SOURCE_DIR}/device.cpp
27+
${CMAKE_CURRENT_SOURCE_DIR}/enqueue.cpp
28+
${CMAKE_CURRENT_SOURCE_DIR}/event.cpp
29+
${CMAKE_CURRENT_SOURCE_DIR}/image.cpp
30+
${CMAKE_CURRENT_SOURCE_DIR}/kernel.cpp
31+
${CMAKE_CURRENT_SOURCE_DIR}/memory.cpp
32+
${CMAKE_CURRENT_SOURCE_DIR}/platform.hpp
33+
${CMAKE_CURRENT_SOURCE_DIR}/platform.cpp
34+
${CMAKE_CURRENT_SOURCE_DIR}/program.cpp
35+
${CMAKE_CURRENT_SOURCE_DIR}/queue.cpp
36+
${CMAKE_CURRENT_SOURCE_DIR}/sampler.cpp
37+
${CMAKE_CURRENT_SOURCE_DIR}/usm.cpp
38+
${CMAKE_CURRENT_SOURCE_DIR}/usm_p2p.cpp
39+
${CMAKE_CURRENT_SOURCE_DIR}/../../ur/ur.cpp
40+
${CMAKE_CURRENT_SOURCE_DIR}/../../ur/ur.hpp
3741
)
3842

3943
set_target_properties(${TARGET_NAME} PROPERTIES
40-
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
41-
SOVERSION "${PROJECT_VERSION_MAJOR}"
44+
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
45+
SOVERSION "${PROJECT_VERSION_MAJOR}"
4246
)
4347

44-
find_package(Threads REQUIRED)
48+
if(UR_OPENCL_INCLUDE_DIR)
49+
set(OpenCLIncludeDirectory ${UR_OPENCL_INCLUDE_DIR})
50+
else()
51+
FetchContent_Declare(OpenCL-Headers
52+
GIT_REPOSITORY "https://github.com/KhronosGroup/OpenCL-Headers.git"
53+
GIT_TAG main
54+
)
55+
FetchContent_MakeAvailable(OpenCL-Headers)
56+
FetchContent_GetProperties(OpenCL-Headers
57+
SOURCE_DIR OpenCLIncludeDirectory
58+
)
59+
endif()
4560

46-
# The OpenCL target can be set manually on upstream cmake to avoid using find_package().
47-
if (NOT UR_OPENCL_ICD_LOADER_LIBRARY)
48-
find_package(OpenCL REQUIRED)
49-
message(STATUS "OpenCL_LIBRARY: ${OpenCL_LIBRARY}")
50-
message(STATUS "OpenCL_INCLUDE_DIR: ${OpenCL_INCLUDE_DIR}")
51-
set(UR_OPENCL_ICD_LOADER_LIBRARY OpenCL::OpenCL)
61+
# The OpenCL target can be set manually on upstream cmake to avoid using
62+
# find_package().
63+
if(UR_OPENCL_ICD_LOADER_LIBRARY)
64+
set(OpenCLICDLoaderLibrary ${UR_OPENCL_ICD_LOADER_LIBRARY})
65+
else()
66+
find_package(OpenCL 3.0)
67+
if(OpenCL_FOUND)
68+
set(OpenCLICDLoaderLibrary OpenCL::OpenCL)
69+
else()
70+
FetchContent_Declare(OpenCL-ICD-Loader
71+
GIT_REPOSITORY "https://github.com/KhronosGroup/OpenCL-ICD-Loader.git"
72+
GIT_TAG main
73+
)
74+
FetchContent_MakeAvailable(OpenCL-ICD-Loader)
75+
set(OpenCLICDLoaderLibrary ${PROJECT_BINARY_DIR}/lib/libOpenCL.so)
76+
endif()
5277
endif()
5378

79+
message(STATUS "OpenCL Include Directory: ${OpenCLIncludeDirectory}")
80+
message(STATUS "OpenCL ICD Loader Library: ${OpenCLICDLoaderLibrary}")
81+
5482
# Suppress a compiler message about undefined CL_TARGET_OPENCL_VERSION.
5583
# Define all symbols up to OpenCL 3.0.
56-
target_compile_definitions(ur_adapter_opencl PRIVATE CL_TARGET_OPENCL_VERSION=300 CL_USE_DEPRECATED_OPENCL_1_2_APIS)
57-
58-
target_link_libraries(${TARGET_NAME} PRIVATE
59-
${PROJECT_NAME}::headers
60-
${PROJECT_NAME}::common
61-
${PROJECT_NAME}::unified_malloc_framework
62-
Threads::Threads
63-
${UR_OPENCL_ICD_LOADER_LIBRARY}
84+
target_compile_definitions(ur_adapter_opencl PRIVATE
85+
CL_TARGET_OPENCL_VERSION=300
86+
CL_USE_DEPRECATED_OPENCL_1_2_APIS
6487
)
6588

6689
target_include_directories(${TARGET_NAME} PRIVATE
67-
"${CMAKE_CURRENT_SOURCE_DIR}/../../"
68-
${OpenCL_INCLUDE_DIR}
90+
${OpenCLIncludeDirectory}
91+
"${CMAKE_CURRENT_SOURCE_DIR}/../../"
92+
)
93+
94+
target_link_libraries(${TARGET_NAME} PRIVATE
95+
${PROJECT_NAME}::headers
96+
${PROJECT_NAME}::common
97+
${PROJECT_NAME}::unified_malloc_framework
98+
Threads::Threads
99+
${OpenCLICDLoaderLibrary}
69100
)

0 commit comments

Comments
 (0)