@@ -2,10 +2,13 @@ set(obj_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
2
2
if (WIN32 )
3
3
set (lib-suffix obj)
4
4
set (spv_binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY} " )
5
+ set (install_dest_spv bin)
5
6
else ()
6
7
set (lib-suffix o)
7
8
set (spv_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY} " )
9
+ set (install_dest_spv lib${LLVM_LIBDIR_SUFFIX} )
8
10
endif ()
11
+ set (install_dest_lib lib${LLVM_LIBDIR_SUFFIX} )
9
12
set (clang $<TARGET_FILE:clang>)
10
13
11
14
string (CONCAT sycl_targets_opt
@@ -22,266 +25,83 @@ set(compile_opts
22
25
# Disable warnings for the host compilation, where
23
26
# we declare all functions as 'static'.
24
27
-Wno-undefined-internal
25
- # Force definition of CL_SYCL_LANGUAGE_VERSION, as long as
26
- # SYCL specific code is guarded by it.
27
- -sycl-std=2017
28
+ -sycl-std=2020
28
29
)
29
30
30
31
if (WIN32 )
31
32
list (APPEND compile_opts -D_ALLOW_RUNTIME_LIBRARY_MISMATCH)
32
33
list (APPEND compile_opts -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH)
33
34
endif ()
34
35
35
- set (devicelib-obj-file ${obj_binary_dir} /libsycl-crt.${lib-suffix })
36
- add_custom_command (OUTPUT ${devicelib-obj-file}
37
- COMMAND ${clang} -fsycl -c
38
- ${compile_opts} ${sycl_targets_opt}
39
- ${CMAKE_CURRENT_SOURCE_DIR} /crt_wrapper.cpp
40
- -o ${devicelib-obj-file}
41
- MAIN_DEPENDENCY crt_wrapper.cpp
42
- DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
43
- VERBATIM )
44
-
45
- set (devicelib-obj-complex ${obj_binary_dir} /libsycl-complex.${lib-suffix })
46
- add_custom_command (OUTPUT ${devicelib-obj-complex}
47
- COMMAND ${clang} -fsycl -c
48
- ${compile_opts} ${sycl_targets_opt}
49
- ${CMAKE_CURRENT_SOURCE_DIR} /complex_wrapper.cpp
50
- -o ${devicelib-obj-complex}
51
- MAIN_DEPENDENCY complex_wrapper.cpp
52
- DEPENDS device_complex.h device.h sycl-compiler
53
- VERBATIM )
54
-
55
- set (devicelib-obj-complex-fp64 ${obj_binary_dir} /libsycl-complex-fp64.${lib-suffix })
56
- add_custom_command (OUTPUT ${devicelib-obj-complex-fp64}
57
- COMMAND ${clang} -fsycl -c
58
- ${compile_opts} ${sycl_targets_opt}
59
- ${CMAKE_CURRENT_SOURCE_DIR} /complex_wrapper_fp64.cpp
60
- -o ${devicelib-obj-complex-fp64}
61
- MAIN_DEPENDENCY complex_wrapper_fp64.cpp
62
- DEPENDS device_complex.h device.h sycl-compiler
63
- VERBATIM )
64
-
65
- set (devicelib-obj-cmath ${obj_binary_dir} /libsycl-cmath.${lib-suffix })
66
- add_custom_command (OUTPUT ${devicelib-obj-cmath}
67
- COMMAND ${clang} -fsycl -c
68
- ${compile_opts} ${sycl_targets_opt}
69
- ${CMAKE_CURRENT_SOURCE_DIR} /cmath_wrapper.cpp
70
- -o ${devicelib-obj-cmath}
71
- MAIN_DEPENDENCY cmath_wrapper.cpp
72
- DEPENDS device_math.h device.h sycl-compiler
73
- VERBATIM )
74
-
75
- set (devicelib-obj-cmath-fp64 ${obj_binary_dir} /libsycl-cmath-fp64.${lib-suffix })
76
- add_custom_command (OUTPUT ${devicelib-obj-cmath-fp64}
77
- COMMAND ${clang} -fsycl -c
78
- ${compile_opts} ${sycl_targets_opt}
79
- ${CMAKE_CURRENT_SOURCE_DIR} /cmath_wrapper_fp64.cpp
80
- -o ${devicelib-obj-cmath-fp64}
81
- MAIN_DEPENDENCY cmath_wrapper_fp64.cpp
82
- DEPENDS device_math.h device.h sycl-compiler
83
- VERBATIM )
84
-
85
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-cassert.spv
86
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
87
- ${compile_opts}
88
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cassert.cpp
89
- -o ${spv_binary_dir} /libsycl-fallback-cassert.spv
90
- MAIN_DEPENDENCY fallback-cassert.cpp
91
- DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
92
- VERBATIM )
93
-
94
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-cstring.spv
95
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
96
- ${compile_opts}
97
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cstring.cpp
98
- -o ${spv_binary_dir} /libsycl-fallback-cstring.spv
99
- MAIN_DEPENDENCY fallback-cstring.cpp
100
- DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
101
- VERBATIM )
102
-
103
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-cassert.${lib-suffix }
104
- COMMAND ${clang} -fsycl -c
105
- ${compile_opts} ${sycl_targets_opt}
106
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cassert.cpp
107
- -o ${obj_binary_dir} /libsycl-fallback-cassert.${lib-suffix }
108
- MAIN_DEPENDENCY fallback-cassert.cpp
109
- DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
110
- VERBATIM )
111
-
112
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-cstring.${lib-suffix }
113
- COMMAND ${clang} -fsycl -c
114
- ${compile_opts} ${sycl_targets_opt}
115
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cstring.cpp
116
- -o ${obj_binary_dir} /libsycl-fallback-cstring.${lib-suffix }
117
- MAIN_DEPENDENCY fallback-cstring.cpp
118
- DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
119
- VERBATIM )
120
-
121
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-complex.spv
122
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
123
- ${compile_opts}
124
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-complex.cpp
125
- -o ${spv_binary_dir} /libsycl-fallback-complex.spv
126
- MAIN_DEPENDENCY fallback-complex.cpp
127
- DEPENDS device_math.h device_complex.h device.h sycl-compiler
128
- VERBATIM )
129
-
130
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-complex.${lib-suffix }
131
- COMMAND ${clang} -fsycl -c
132
- ${compile_opts} ${sycl_targets_opt}
133
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-complex.cpp
134
- -o ${obj_binary_dir} /libsycl-fallback-complex.${lib-suffix }
135
- MAIN_DEPENDENCY fallback-complex.cpp
136
- DEPENDS device_math.h device_complex.h device.h sycl-compiler
137
- VERBATIM )
138
-
139
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-complex-fp64.spv
140
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
141
- ${compile_opts}
142
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-complex-fp64.cpp
143
- -o ${spv_binary_dir} /libsycl-fallback-complex-fp64.spv
144
- MAIN_DEPENDENCY fallback-complex-fp64.cpp
145
- DEPENDS device_math.h device_complex.h device.h sycl-compiler
146
- VERBATIM )
147
-
148
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-complex-fp64.${lib-suffix }
149
- COMMAND ${clang} -fsycl -c
150
- ${compile_opts} ${sycl_targets_opt}
151
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-complex-fp64.cpp
152
- -o ${obj_binary_dir} /libsycl-fallback-complex-fp64.${lib-suffix }
153
- MAIN_DEPENDENCY fallback-complex-fp64.cpp
154
- DEPENDS device_math.h device_complex.h device.h sycl-compiler
155
- VERBATIM )
156
-
157
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-cmath.spv
158
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
159
- ${compile_opts}
160
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cmath.cpp
161
- -o ${spv_binary_dir} /libsycl-fallback-cmath.spv
162
- MAIN_DEPENDENCY fallback-cmath.cpp
163
- DEPENDS device_math.h device.h sycl-compiler
164
- VERBATIM )
165
-
166
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-cmath.${lib-suffix }
167
- COMMAND ${clang} -fsycl -c
168
- ${compile_opts} ${sycl_targets_opt}
169
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cmath.cpp
170
- -o ${obj_binary_dir} /libsycl-fallback-cmath.${lib-suffix }
171
- MAIN_DEPENDENCY fallback-cmath.cpp
172
- DEPENDS device_math.h device.h sycl-compiler
173
- VERBATIM )
36
+ add_custom_target (libsycldevice-obj)
37
+ add_custom_target (libsycldevice-spv)
174
38
175
- add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-cmath-fp64.spv
176
- COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
177
- ${compile_opts}
178
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cmath-fp64.cpp
179
- -o ${spv_binary_dir} /libsycl-fallback-cmath-fp64.spv
180
- MAIN_DEPENDENCY fallback-cmath-fp64.cpp
181
- DEPENDS device_math.h device.h sycl-compiler
182
- VERBATIM )
183
-
184
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-cmath-fp64.${lib-suffix }
185
- COMMAND ${clang} -fsycl -c
186
- ${compile_opts} ${sycl_targets_opt}
187
- ${CMAKE_CURRENT_SOURCE_DIR} /fallback-cmath-fp64.cpp
188
- -o ${obj_binary_dir} /libsycl-fallback-cmath-fp64.${lib-suffix }
189
- MAIN_DEPENDENCY fallback-cmath-fp64.cpp
190
- DEPENDS device_math.h device.h sycl-compiler
191
- VERBATIM )
192
-
193
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-itt-stubs.${lib-suffix }
194
- COMMAND ${clang} -fsycl -c
195
- ${compile_opts} ${sycl_targets_opt}
196
- ${CMAKE_CURRENT_SOURCE_DIR} /itt_stubs.cpp
197
- -o ${obj_binary_dir} /libsycl-itt-stubs.${lib-suffix }
198
- MAIN_DEPENDENCY itt_stubs.cpp
199
- DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
200
- VERBATIM )
201
-
202
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-itt-compiler-wrappers.${lib-suffix }
203
- COMMAND ${clang} -fsycl -c
204
- ${compile_opts} ${sycl_targets_opt}
205
- ${CMAKE_CURRENT_SOURCE_DIR} /itt_compiler_wrappers.cpp
206
- -o ${obj_binary_dir} /libsycl-itt-compiler-wrappers.${lib-suffix }
207
- MAIN_DEPENDENCY itt_compiler_wrappers.cpp
208
- DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
209
- VERBATIM )
210
-
211
- add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-itt-user-wrappers.${lib-suffix }
212
- COMMAND ${clang} -fsycl -c
213
- ${compile_opts} ${sycl_targets_opt}
214
- ${CMAKE_CURRENT_SOURCE_DIR} /itt_user_wrappers.cpp
215
- -o ${obj_binary_dir} /libsycl-itt-user-wrappers.${lib-suffix }
216
- MAIN_DEPENDENCY itt_user_wrappers.cpp
217
- DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
218
- VERBATIM )
219
-
220
- set (devicelib-obj-itt-files
221
- ${obj_binary_dir} /libsycl-itt-stubs.${lib-suffix }
222
- ${obj_binary_dir} /libsycl-itt-compiler-wrappers.${lib-suffix }
223
- ${obj_binary_dir} /libsycl-itt-user-wrappers.${lib-suffix }
224
- )
225
-
226
- add_custom_target (libsycldevice-obj DEPENDS
227
- ${devicelib-obj-file}
228
- ${devicelib-obj-complex}
229
- ${devicelib-obj-complex-fp64}
230
- ${devicelib-obj-cmath}
231
- ${devicelib-obj-cmath-fp64}
232
- ${devicelib-obj-itt-files }
233
- )
234
- add_custom_target (libsycldevice-spv DEPENDS
235
- ${spv_binary_dir} /libsycl-fallback-cassert.spv
236
- ${spv_binary_dir} /libsycl-fallback-cstring.spv
237
- ${spv_binary_dir} /libsycl-fallback-complex.spv
238
- ${spv_binary_dir} /libsycl-fallback-complex-fp64.spv
239
- ${spv_binary_dir} /libsycl-fallback-cmath.spv
240
- ${spv_binary_dir} /libsycl-fallback-cmath-fp64.spv
241
- )
242
- add_custom_target (libsycldevice-fallback-obj DEPENDS
243
- ${obj_binary_dir} /libsycl-fallback-cassert.${lib-suffix }
244
- ${obj_binary_dir} /libsycl-fallback-cstring.${lib-suffix }
245
- ${obj_binary_dir} /libsycl-fallback-complex.${lib-suffix }
246
- ${obj_binary_dir} /libsycl-fallback-complex-fp64.${lib-suffix }
247
- ${obj_binary_dir} /libsycl-fallback-cmath.${lib-suffix }
248
- ${obj_binary_dir} /libsycl-fallback-cmath-fp64.${lib-suffix }
249
- )
250
39
add_custom_target (libsycldevice DEPENDS
251
40
libsycldevice-obj
252
- libsycldevice-fallback-obj
253
41
libsycldevice-spv)
254
42
255
- # Place device libraries near the libsycl.so library in an install
256
- # directory as well
257
- if (WIN32 )
258
- set (install_dest_spv bin)
259
- else ()
260
- set (install_dest_spv lib${LLVM_LIBDIR_SUFFIX} )
261
- endif ()
262
-
263
- set (install_dest_lib lib${LLVM_LIBDIR_SUFFIX} )
264
-
265
- install (FILES ${devicelib-obj-file}
266
- ${obj_binary_dir} /libsycl-fallback-cassert.${lib-suffix }
267
- ${obj_binary_dir} /libsycl-fallback-cstring.${lib-suffix }
268
- ${devicelib-obj-complex}
269
- ${obj_binary_dir} /libsycl-fallback-complex.${lib-suffix }
270
- ${devicelib-obj-complex-fp64}
271
- ${obj_binary_dir} /libsycl-fallback-complex-fp64.${lib-suffix }
272
- ${devicelib-obj-cmath}
273
- ${obj_binary_dir} /libsycl-fallback-cmath.${lib-suffix }
274
- ${devicelib-obj-cmath-fp64}
275
- ${obj_binary_dir} /libsycl-fallback-cmath-fp64.${lib-suffix }
276
- ${devicelib-obj-itt-files }
277
- DESTINATION ${install_dest_lib}
278
- COMPONENT libsycldevice)
279
-
280
- install (FILES ${spv_binary_dir} /libsycl-fallback-cassert.spv
281
- ${spv_binary_dir} /libsycl-fallback-cstring.spv
282
- ${spv_binary_dir} /libsycl-fallback-complex.spv
283
- ${spv_binary_dir} /libsycl-fallback-complex-fp64.spv
284
- ${spv_binary_dir} /libsycl-fallback-cmath.spv
285
- ${spv_binary_dir} /libsycl-fallback-cmath-fp64.spv
286
- DESTINATION ${install_dest_spv}
287
- COMPONENT libsycldevice)
43
+ function (add_devicelib_obj obj_filename)
44
+ cmake_parse_arguments (OBJ "" "" "SRC;DEP" ${ARGN} )
45
+ set (devicelib-obj-file ${obj_binary_dir} /${obj_filename} .${lib-suffix })
46
+ add_custom_command (OUTPUT ${devicelib-obj-file}
47
+ COMMAND ${clang} -fsycl -c
48
+ ${compile_opts} ${sycl_targets_opt}
49
+ ${CMAKE_CURRENT_SOURCE_DIR} /${OBJ_SRC}
50
+ -o ${devicelib-obj-file}
51
+ MAIN_DEPENDENCY ${OBJ_SRC}
52
+ DEPENDS ${OBJ_DEP}
53
+ VERBATIM )
54
+ set (devicelib-obj-target ${obj_filename} -obj)
55
+ add_custom_target (${devicelib-obj-target } DEPENDS ${devicelib-obj-file})
56
+ add_dependencies (libsycldevice-obj ${devicelib-obj-target })
57
+ install (FILES ${devicelib-obj-file}
58
+ DESTINATION ${install_dest_lib}
59
+ COMPONENT libsycldevice)
60
+ endfunction ()
61
+
62
+ function (add_devicelib_spv spv_filename)
63
+ cmake_parse_arguments (SPV "" "" "SRC;DEP" ${ARGN} )
64
+ set (devicelib-spv-file ${spv_binary_dir} /${spv_filename} .spv)
65
+ add_custom_command (OUTPUT ${devicelib-spv-file}
66
+ COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
67
+ ${compile_opts}
68
+ ${CMAKE_CURRENT_SOURCE_DIR} /${SPV_SRC}
69
+ -o ${devicelib-spv-file}
70
+ MAIN_DEPENDENCY ${SPV_SRC}
71
+ DEPENDS ${SPV_DEP}
72
+ VERBATIM )
73
+ set (devicelib-spv-target ${spv_filename} -spv)
74
+ add_custom_target (${devicelib-spv-target } DEPENDS ${devicelib-spv-file})
75
+ add_dependencies (libsycldevice-spv ${devicelib-spv-target })
76
+ install (FILES ${devicelib-spv-file}
77
+ DESTINATION ${install_dest_spv}
78
+ COMPONENT libsycldevice)
79
+ endfunction ()
80
+
81
+ function (add_fallback_devicelib fallback_filename)
82
+ cmake_parse_arguments (FB "" "" "SRC;DEP" ${ARGN} )
83
+ add_devicelib_spv(${fallback_filename} SRC ${FB_SRC} DEP ${FB_DEP} )
84
+ add_devicelib_obj(${fallback_filename} SRC ${FB_SRC} DEP ${FB_DEP} )
85
+ endfunction ()
86
+
87
+ set (crt_obj_deps wrapper.h device.h spirv_vars.h sycl-compiler)
88
+ set (complex_obj_deps device_complex.h device.h sycl-compiler)
89
+ set (cmath_obj_deps device_math.h device.h sycl-compiler)
90
+ set (itt_obj_deps device_itt.h spirv_vars.h device.h sycl-compiler)
91
+
92
+ add_devicelib_obj(libsycl-itt-stubs SRC itt_stubs.cpp DEP ${itt_obj_deps} )
93
+ add_devicelib_obj(libsycl-itt-compiler-wrappers SRC itt_compiler_wrappers.cpp DEP ${itt_obj_deps} )
94
+ add_devicelib_obj(libsycl-itt-user-wrappers SRC itt_user_wrappers.cpp DEP ${itt_obj_deps} )
95
+
96
+ add_devicelib_obj(libsycl-crt SRC crt_wrapper.cpp DEP ${crt_obj_deps} )
97
+ add_devicelib_obj(libsycl-complex SRC complex_wrapper.cpp DEP ${complex_obj_deps} )
98
+ add_devicelib_obj(libsycl-complex-fp64 SRC complex_wrapper_fp64.cpp DEP ${complex_obj_deps} )
99
+ add_devicelib_obj(libsycl-cmath SRC cmath_wrapper.cpp DEP ${cmath_obj_deps} )
100
+ add_devicelib_obj(libsycl-cmath-fp64 SRC cmath_wrapper_fp64.cpp DEP ${cmath_obj_deps} )
101
+
102
+ add_fallback_devicelib(libsycl-fallback-cassert SRC fallback-cassert.cpp DEP ${crt_obj_deps} )
103
+ add_fallback_devicelib(libsycl-fallback-cstring SRC fallback-cstring.cpp DEP ${crt_obj_deps} )
104
+ add_fallback_devicelib(libsycl-fallback-complex SRC fallback-complex.cpp DEP ${complex_obj_deps} )
105
+ add_fallback_devicelib(libsycl-fallback-complex-fp64 SRC fallback-complex-fp64.cpp DEP ${complex_obj_deps} )
106
+ add_fallback_devicelib(libsycl-fallback-cmath SRC fallback-cmath.cpp DEP ${cmath_obj_deps} )
107
+ add_fallback_devicelib(libsycl-fallback-cmath-fp64 SRC fallback-cmath-fp64.cpp DEP ${cmath_obj_deps} )
0 commit comments