@@ -71,130 +71,23 @@ set(SYCL_INCLUDE_DIR "include")
71
71
set (SYCL_INCLUDE_BUILD_DIR ${LLVM_BINARY_DIR} /${SYCL_INCLUDE_DIR} )
72
72
set (SYCL_INCLUDE_DEPLOY_DIR ${CMAKE_INSTALL_PREFIX} /${SYCL_INCLUDE_DIR} )
73
73
74
- # Find OpenCL headers and libraries installed in the system and use them to
75
- # build SYCL runtime.
76
- # WARNING: use with caution, building SYCL runtime with OpenCL implementation
77
- # instead of Khronos ICD loader might cause build and/or portability issues.
78
- option (OpenCL_BUILD_WITH_SYSTEM_SDK "Build SYCL with OpenCL coming from the build system" OFF )
79
-
80
- if ( (OpenCL_INCLUDE_DIR AND OpenCL_LIBRARY ) OR OpenCL_BUILD_WITH_SYSTEM_SDK )
81
- find_package (OpenCL )
82
- endif ()
83
-
84
- include (ExternalProject )
85
-
86
- # By default, whenever cmake is re-run, the external project's sources will be
87
- # updated, which might be annoying - let's have a possibility to disable that as
88
- # not every external project which is used here is being updated often
89
- # Single toggle to control all external projects
90
- option (SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE
91
- "Perform automatic update step for external projects (OpenCL Headers, OpenCL ICD, etc.)" OFF )
92
- # More precise controls for each particular external project are documented
93
- # near each ExternalProject_Add
94
-
95
- if ( NOT OpenCL_INCLUDE_DIRS )
96
- message (STATUS "OpenCL_INCLUDE_DIRS is missing. Will try to download OpenCL headers from github.com" )
97
- set (OpenCL_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR} /OpenCL/inc" )
98
- if (NOT DEFINED SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE )
99
- set (SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE} )
100
- endif ()
101
- ExternalProject_Add (ocl-headers
102
- GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-Headers.git
103
- GIT_TAG 23710f1b99186065c1768fc3098ba681adc0f253
104
- UPDATE_DISCONNECTED ${SYCL_EP_OCL_HEADERS_SKIP_AUTO_UPDATE}
105
- SOURCE_DIR ${OpenCL_INCLUDE_DIRS}
106
- CONFIGURE_COMMAND ""
107
- BUILD_COMMAND ${CMAKE_COMMAND} -E copy_directory ${OpenCL_INCLUDE_DIRS} /CL ${SYCL_INCLUDE_BUILD_DIR} /sycl/CL
108
- INSTALL_COMMAND ""
109
- STEP_TARGETS build
110
- COMMENT "Downloading OpenCL headers."
111
- LOG_DOWNLOAD 1
112
- LOG_UPDATE 1
113
- LOG_BUILD 1
114
- )
115
- add_definitions (-DCL_TARGET_OPENCL_VERSION=220 )
116
- else ()
117
- add_custom_target ( ocl-headers ALL
118
- DEPENDS ${OpenCL_INCLUDE_DIRS}
119
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${OpenCL_INCLUDE_DIRS} /CL ${SYCL_INCLUDE_BUILD_DIR} /sycl/CL
120
- COMMENT "Copying OpenCL headers ..."
121
- )
122
- endif ()
123
-
124
- if ( NOT OpenCL_LIBRARIES )
125
- message (STATUS "OpenCL_LIBRARIES is missing. Will try to download OpenCL ICD Loader from github.com" )
126
- if (MSVC )
127
- set (OpenCL_LIBRARIES
128
- "${LLVM_LIBRARY_OUTPUT_INTDIR} /${CMAKE_STATIC_LIBRARY_PREFIX} OpenCL${CMAKE_STATIC_LIBRARY_SUFFIX} " )
129
- list (APPEND AUX_CMAKE_FLAGS -DOPENCL_ICD_LOADER_REQUIRE_WDK=OFF )
130
- else ()
131
- set (OpenCL_LIBRARIES
132
- "${LLVM_LIBRARY_OUTPUT_INTDIR} /${CMAKE_SHARED_LIBRARY_PREFIX} OpenCL${CMAKE_SHARED_LIBRARY_SUFFIX} " )
133
- endif ()
134
- if (CMAKE_C_COMPILER )
135
- list (APPEND AUX_CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} )
136
- endif ()
137
- if (CMAKE_CXX_COMPILER )
138
- list (APPEND AUX_CMAKE_FLAGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} )
139
- endif ()
140
- file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /icd_build )
141
- set (OpenCL_ICD_LOADER_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR} /OpenCL/icd" )
142
- if (NOT DEFINED SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE )
143
- set (SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE ${SYCL_EXTERNAL_PROJECTS_SKIP_AUTO_UPDATE} )
144
- endif ()
145
- ExternalProject_Add (ocl-icd
146
- GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-ICD-Loader.git
147
- GIT_TAG 5f8249691ec8c25775789498951f8e9eb62c201d
148
- UPDATE_DISCONNECTED ${SYCL_EP_OCL_ICD_SKIP_AUTO_UPDATE}
149
- SOURCE_DIR ${OpenCL_ICD_LOADER_SOURCE_DIR}
150
- BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR} /icd_build"
151
- INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR} /icd_install"
152
- CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
153
- -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
154
- -DOPENCL_ICD_LOADER_HEADERS_DIR=${OpenCL_INCLUDE_DIRS}
155
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
156
- -DCMAKE_INSTALL_LIBDIR:PATH=lib${LLVM_LIBDIR_SUFFIX}
157
- ${AUX_CMAKE_FLAGS}
158
- STEP_TARGETS configure,build,install
159
- DEPENDS ocl-headers
160
- BUILD_BYPRODUCTS ${OpenCL_LIBRARIES}
161
- LOG_DOWNLOAD 1
162
- LOG_UPDATE 1
163
- LOG_CONFIGURE 1
164
- LOG_BUILD 1
165
- LOG_INSTALL 1
166
- )
167
- ExternalProject_Add_Step (ocl-icd llvminstall
168
- COMMAND ${CMAKE_COMMAND} -E copy_directory <INSTALL_DIR>/ ${LLVM_BINARY_DIR}
169
- COMMENT "Installing ocl-icd into the LLVM binary directory"
170
- DEPENDEES install
171
- )
172
- # Optionally install the ICD library along with LLVM.
173
- option (OpenCL_INSTALL_KHRONOS_ICD_LOADER
174
- "Install the Khronos ICD Loader built as part of LLVM" OFF )
175
- if (OpenCL_INSTALL_KHRONOS_ICD_LOADER )
176
- install (DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /icd_install/"
177
- DESTINATION "."
178
- COMPONENT opencl-icd
179
- )
180
- endif ()
181
- else ()
182
- file (GLOB ICD_LOADER_SRC "${OpenCL_LIBRARIES} *" )
183
- file (COPY ${ICD_LOADER_SRC} DESTINATION ${LLVM_LIBRARY_OUTPUT_INTDIR} )
184
- add_custom_target (ocl-icd DEPENDS ${OpenCL_LIBRARIES} COMMENT "Copying OpenCL ICD Loader ..." )
185
- endif ()
186
-
187
- set (OPENCL_INCLUDE "${OpenCL_INCLUDE_DIRS} " )
188
-
189
- add_library (OpenCL-Headers INTERFACE )
190
- add_library (OpenCL::Headers ALIAS OpenCL-Headers )
191
- target_include_directories (OpenCL-Headers
192
- INTERFACE ${OPENCL_INCLUDE}
193
- )
194
- install (DIRECTORY ${OPENCL_INCLUDE} /CL
195
- DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR} /sycl
196
- COMPONENT opencl-headers
197
- )
74
+ # LLVM build sets this OFF by default, but we need OpenCL to be built as shared
75
+ # library.
76
+ set (BUILD_SHARED_LIBS ON )
77
+ # second argument is not used, it's required since first arg is not a real
78
+ # subdirectory
79
+ add_subdirectory (../opencl ${CMAKE_CURRENT_BINARY_DIR} /opencl_deps )
80
+
81
+ # Copy OpenCL Headers into sycl headers build directory
82
+ # Compiler does automatic lookup bin/../include based on clang binary location,
83
+ # e.g. when run LIT tests
84
+ file (COPY ${OPENCL_ICD_LOADER_HEADERS_DIR} /CL
85
+ DESTINATION ${SYCL_INCLUDE_BUILD_DIR} /sycl )
86
+
87
+ # Include OpenCL Headers into final bundle.
88
+ install (DIRECTORY ${OPENCL_ICD_LOADER_HEADERS_DIR} /CL
89
+ DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR} /sycl
90
+ COMPONENT OpenCL-Headers )
198
91
199
92
option (SYCL_BUILD_PI_CUDA
200
93
"Enables the CUDA backend for the Plugin Interface" OFF )
@@ -207,13 +100,13 @@ string(TIMESTAMP __SYCL_COMPILER_VERSION "%Y%m%d")
207
100
set (version_header "${sycl_inc_dir} /CL/sycl/version.hpp" )
208
101
configure_file ("${version_header} .in" "${version_header} " )
209
102
210
- # Copy SYCL headers
103
+ # Copy SYCL headers from sources to build directory
211
104
add_custom_target (sycl-headers ALL
212
105
COMMAND ${CMAKE_COMMAND} -E copy_directory ${sycl_inc_dir} /sycl ${SYCL_INCLUDE_BUILD_DIR} /sycl
213
106
COMMAND ${CMAKE_COMMAND} -E copy_directory ${sycl_inc_dir} /CL ${SYCL_INCLUDE_BUILD_DIR} /sycl/CL
214
107
COMMENT "Copying SYCL headers ..." )
215
108
216
- # Configure SYCL headers
109
+ # Copy SYCL headers from sources to install directory
217
110
install (DIRECTORY "${sycl_inc_dir} /sycl" DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR} COMPONENT sycl-headers )
218
111
install (DIRECTORY "${sycl_inc_dir} /CL" DESTINATION ${SYCL_INCLUDE_DEPLOY_DIR} /sycl COMPONENT sycl-headers )
219
112
@@ -353,7 +246,7 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS
353
246
sycl-post-link
354
247
sycl-ls
355
248
clang-resource-headers
356
- opencl-headers
249
+ OpenCL-Headers
357
250
sycl-headers
358
251
sycl-headers-extras
359
252
sycl
@@ -363,8 +256,8 @@ set( SYCL_TOOLCHAIN_DEPLOY_COMPONENTS
363
256
${XPTIFW_LIBS}
364
257
)
365
258
366
- if (OpenCL_INSTALL_KHRONOS_ICD_LOADER AND TARGET ocl-icd )
367
- list (APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS opencl-icd )
259
+ if (OpenCL_INSTALL_KHRONOS_ICD_LOADER AND TARGET OpenCL-ICD )
260
+ list (APPEND SYCL_TOOLCHAIN_DEPLOY_COMPONENTS OpenCL-ICD )
368
261
endif ()
369
262
370
263
if (SYCL_BUILD_PI_CUDA )
0 commit comments