Skip to content

Commit 67b68bb

Browse files
committed
[SYCL][UR] Improve support for preinstalled OpenCL deps
Signed-off-by: Sarnie, Nick <nick.sarnie@intel.com>
1 parent b62432d commit 67b68bb

File tree

5 files changed

+66
-34
lines changed

5 files changed

+66
-34
lines changed

opencl/CMakeLists.txt

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ if (MSVC)
1111
)
1212
endif()
1313

14-
# Repo URLs
15-
1614
set(OCL_HEADERS_REPO
1715
"https://github.com/KhronosGroup/OpenCL-Headers.git")
1816
set(OCL_LOADER_REPO
@@ -23,59 +21,70 @@ set(OCL_LOADER_REPO
2321
set(OCL_HEADERS_TAG 6eabe90aa7b6cff9c67800a2fe25a0cd88d8b749)
2422
set(OCL_LOADER_TAG ddf6c70230a79cdb8fcccfd3c775b09e6820f42e)
2523

24+
25+
find_package(OpenCL QUIET)
26+
2627
# OpenCL Headers
27-
if(NOT OpenCL_HEADERS)
28+
if(NOT OpenCL_FOUND)
29+
# Repo URLs
30+
2831
message(STATUS "Will fetch OpenCL headers from ${OCL_HEADERS_REPO}")
2932

3033
FetchContent_Declare(ocl-headers
3134
GIT_REPOSITORY ${OCL_HEADERS_REPO}
3235
GIT_TAG ${OCL_HEADERS_TAG}
33-
)
36+
)
37+
38+
FetchContent_MakeAvailable(ocl-headers)
39+
FetchContent_GetProperties(ocl-headers)
40+
set(OpenCL_INCLUDE_DIR
41+
${ocl-headers_SOURCE_DIR} CACHE PATH "Path to OpenCL Headers")
42+
target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=300)
43+
add_library(OpenCL-Headers ALIAS Headers)
3444
else()
35-
message(STATUS "OpenCL headers are added manually ${OpenCL_HEADERS}")
36-
37-
FetchContent_Declare(ocl-headers
38-
URL ${OpenCL_HEADERS}
45+
set(OPENCL_TEST_PROGRAM "#define CL_TARGET_OPENCL_VERSION 300
46+
#include <CL/cl_ext.h>
47+
#ifndef cl_khr_spirv_queries
48+
#error Unsupported header version
49+
#endif
50+
int main(int, char*[]) { cl_image_desc v; (void) v.mem_object; return 0; }"
51+
)
52+
file(WRITE "${CMAKE_BINARY_DIR}/test_opencl.c" "${OPENCL_TEST_PROGRAM}")
53+
try_compile(
54+
OPENCL_HEADERS_VERSION_SUPPORTED
55+
${CMAKE_BINARY_DIR}/cmake_try_compile
56+
SOURCES "${CMAKE_BINARY_DIR}/test_opencl.c"
3957
)
58+
if(NOT OPENCL_HEADERS_VERSION_SUPPORTED)
59+
message(FATAL_ERROR "Preinstalled OpenCL headers are not supported, "
60+
"use commit ${OCL_HEADERS_TAG}")
61+
endif()
62+
message(STATUS "Using OpenCL headers at ${OpenCL_INCLUDE_DIR}")
4063
endif()
4164

42-
FetchContent_MakeAvailable(ocl-headers)
43-
FetchContent_GetProperties(ocl-headers)
44-
set(OpenCL_INCLUDE_DIR
45-
${ocl-headers_SOURCE_DIR} CACHE PATH "Path to OpenCL Headers")
46-
47-
target_compile_definitions(Headers INTERFACE -DCL_TARGET_OPENCL_VERSION=300)
48-
add_library(OpenCL-Headers ALIAS Headers)
49-
5065
# OpenCL Library (ICD Loader)
5166

52-
# Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build
53-
set(OPENCL_ICD_LOADER_HEADERS_DIR
54-
${OpenCL_INCLUDE_DIR} CACHE PATH "Path to OpenCL Headers")
55-
5667
# LLVM build sets this OFF by default, but we need OpenCL to be built as shared
5768
# library.
5869
set(BUILD_SHARED_LIBS ON)
5970

60-
if(NOT OpenCL_LIBRARY_SRC)
71+
if(NOT OpenCL_FOUND)
72+
# Set OPENCL_ICD_LOADER_HEADERS_DIR, as prerequisite for ICD build
73+
set(OPENCL_ICD_LOADER_HEADERS_DIR
74+
${OpenCL_INCLUDE_DIR} CACHE PATH "Path to OpenCL Headers")
6175
message(STATUS "Will fetch OpenCL ICD Loader from ${OCL_LOADER_REPO}")
6276

6377
FetchContent_Declare(ocl-icd
6478
GIT_REPOSITORY ${OCL_LOADER_REPO}
6579
GIT_TAG ${OCL_LOADER_TAG}
66-
)
80+
)
81+
82+
FetchContent_MakeAvailable(ocl-icd)
83+
add_library(OpenCL-ICD ALIAS OpenCL)
6784
else()
68-
# TODO: add possibility to use prebuilt OpenCL library rather than building
69-
# together with llvm.
7085
message(STATUS
71-
"OpenCL ICD Loader sources added manually ${OpenCL_LIBRARY_SRC}")
72-
73-
FetchContent_Declare(ocl-icd
74-
URL ${OpenCL_LIBRARY_SRC}
75-
)
86+
"Using OpenCL ICD Loader at ${OpenCL_LIBRARY}")
7687
endif()
7788

78-
FetchContent_MakeAvailable(ocl-icd)
79-
add_library(OpenCL-ICD ALIAS OpenCL)
8089

8190
add_subdirectory(opencl-aot)

opencl/opencl-aot/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@ if(NOT MSVC)
2222
target_compile_options(${OPENCL_AOT_PROJECT_NAME} PRIVATE "-Wno-unused-parameter")
2323
endif()
2424

25+
if(OpenCL_FOUND)
2526
target_link_libraries(${OPENCL_AOT_PROJECT_NAME}
27+
PRIVATE
28+
OpenCL::OpenCL)
29+
else()
30+
target_link_libraries(${OPENCL_AOT_PROJECT_NAME}
2631
PRIVATE
2732
OpenCL-Headers
2833
OpenCL-ICD)
34+
endif()

sycl/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ if(OPENCL_FOUND EQUAL -1)
150150
message(FATAL_ERROR "opencl external project required but not found.")
151151
endif()
152152

153+
if(TARGET OpenCL-Headers)
153154
# Copy OpenCL Headers into sycl headers build directory
154155
# Compiler does automatic lookup bin/../include based on clang binary location,
155156
# e.g. when run LIT tests
@@ -159,7 +160,8 @@ file(COPY ${OpenCL_INCLUDE_DIR}/CL DESTINATION ${SYCL_INCLUDE_BUILD_DIR})
159160
install(DIRECTORY ${OpenCL_INCLUDE_DIR}/CL
160161
DESTINATION ${SYCL_INCLUDE_DIR}
161162
COMPONENT OpenCL-Headers)
162-
163+
endif()
164+
163165
# Option for enabling building the SYCL major release preview library.
164166
option(SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB "Enable build of the SYCL major release preview library" ON)
165167

sycl/cmake/modules/FetchUnifiedRuntime.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ if("hip" IN_LIST SYCL_ENABLE_BACKENDS)
5656
endif()
5757
if("opencl" IN_LIST SYCL_ENABLE_BACKENDS)
5858
set(UR_BUILD_ADAPTER_OPENCL ON)
59-
set(UR_OPENCL_ICD_LOADER_LIBRARY OpenCL-ICD CACHE FILEPATH
60-
"Path of the OpenCL ICD Loader library" FORCE)
59+
if(TARGET OpenCL-ICD)
60+
set(UR_OPENCL_ICD_LOADER_LIBRARY OpenCL-ICD CACHE FILEPATH
61+
"Path of the OpenCL ICD Loader library" FORCE)
62+
endif()
6163
endif()
6264
if("native_cpu" IN_LIST SYCL_ENABLE_BACKENDS)
6365
set(UR_BUILD_ADAPTER_NATIVE_CPU ON)

unified-runtime/source/adapters/opencl/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ set(OPENCL_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "OpenCL adapter director
88
set(UR_OPENCL_INCLUDE_DIR "" CACHE PATH "Directory containing the OpenCL Headers")
99
set(UR_OPENCL_ICD_LOADER_LIBRARY "" CACHE FILEPATH "Path of the OpenCL ICD Loader library")
1010

11+
if(NOT UR_OPENCL_INCLUDE_DIR AND NOT UR_OPENCL_ICD_LOADER_LIBRARY)
12+
find_package(OpenCL QUIET)
13+
if(OpenCL_FOUND)
14+
set(UR_OPENCL_INCLUDE_DIR "${OpenCL_INCLUDE_DIR}")
15+
set(UR_OPENCL_ICD_LOADER_LIBRARY "${OpenCL_LIBRARY_DIR}")
16+
endif()
17+
endif()
18+
1119
find_package(Threads REQUIRED)
1220

1321
set(TARGET_NAME ur_adapter_opencl)
@@ -97,6 +105,11 @@ target_compile_definitions(ur_adapter_opencl PRIVATE
97105
CL_USE_DEPRECATED_OPENCL_1_2_APIS
98106
)
99107

108+
# https://github.com/intel/llvm/issues/19648
109+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND LLVM_ENABLE_PEDANTIC)
110+
target_compile_options(ur_adapter_opencl PRIVATE -std=gnu++17)
111+
endif()
112+
100113
target_include_directories(${TARGET_NAME} PRIVATE
101114
${OpenCLIncludeDirectory}
102115
"${CMAKE_CURRENT_SOURCE_DIR}/../../"

0 commit comments

Comments
 (0)