@@ -2,10 +2,13 @@ set(obj_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
22if (WIN32 )
33 set (lib-suffix obj)
44 set (spv_binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY} " )
5+ set (install_dest_spv bin)
56else ()
67 set (lib-suffix o)
78 set (spv_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY} " )
9+ set (install_dest_spv lib${LLVM_LIBDIR_SUFFIX} )
810endif ()
11+ set (install_dest_lib lib${LLVM_LIBDIR_SUFFIX} )
912set (clang $<TARGET_FILE:clang>)
1013
1114string (CONCAT sycl_targets_opt
@@ -22,266 +25,83 @@ set(compile_opts
2225 # Disable warnings for the host compilation, where
2326 # we declare all functions as 'static'.
2427 -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
2829 )
2930
3031if (WIN32 )
3132 list (APPEND compile_opts -D_ALLOW_RUNTIME_LIBRARY_MISMATCH)
3233 list (APPEND compile_opts -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH)
3334endif ()
3435
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)
17438
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- )
25039add_custom_target (libsycldevice DEPENDS
25140 libsycldevice-obj
252- libsycldevice-fallback-obj
25341 libsycldevice-spv)
25442
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