@@ -11,8 +11,6 @@ if (MSVC)
11
11
)
12
12
endif ()
13
13
14
- # Repo URLs
15
-
16
14
set (OCL_HEADERS_REPO
17
15
"https://github.com/KhronosGroup/OpenCL-Headers.git" )
18
16
set (OCL_LOADER_REPO
@@ -23,59 +21,70 @@ set(OCL_LOADER_REPO
23
21
set (OCL_HEADERS_TAG 6eabe90aa7b6cff9c67800a2fe25a0cd88d8b749 )
24
22
set (OCL_LOADER_TAG ddf6c70230a79cdb8fcccfd3c775b09e6820f42e )
25
23
24
+
25
+ find_package (OpenCL QUIET )
26
+
26
27
# OpenCL Headers
27
- if (NOT OpenCL_HEADERS )
28
+ if (NOT OpenCL_FOUND )
29
+ # Repo URLs
30
+
28
31
message (STATUS "Will fetch OpenCL headers from ${OCL_HEADERS_REPO} " )
29
32
30
33
FetchContent_Declare (ocl-headers
31
34
GIT_REPOSITORY ${OCL_HEADERS_REPO}
32
35
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 )
34
44
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"
39
57
)
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} " )
40
63
endif ()
41
64
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
-
50
65
# OpenCL Library (ICD Loader)
51
66
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
-
56
67
# LLVM build sets this OFF by default, but we need OpenCL to be built as shared
57
68
# library.
58
69
set (BUILD_SHARED_LIBS ON )
59
70
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" )
61
75
message (STATUS "Will fetch OpenCL ICD Loader from ${OCL_LOADER_REPO} " )
62
76
63
77
FetchContent_Declare (ocl-icd
64
78
GIT_REPOSITORY ${OCL_LOADER_REPO}
65
79
GIT_TAG ${OCL_LOADER_TAG}
66
- )
80
+ )
81
+
82
+ FetchContent_MakeAvailable (ocl-icd )
83
+ add_library (OpenCL-ICD ALIAS OpenCL )
67
84
else ()
68
- # TODO: add possibility to use prebuilt OpenCL library rather than building
69
- # together with llvm.
70
85
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} " )
76
87
endif ()
77
88
78
- FetchContent_MakeAvailable (ocl-icd )
79
- add_library (OpenCL-ICD ALIAS OpenCL )
80
89
81
90
add_subdirectory (opencl-aot )
0 commit comments