@@ -13,11 +13,7 @@ endif()
13
13
set (install_dest_lib lib${LLVM_LIBDIR_SUFFIX} )
14
14
15
15
set (clang $< TARGET_FILE:clang> )
16
- set (llvm-link $< TARGET_FILE:llvm-link> )
17
- set (llc $< TARGET_FILE:llc> )
18
- set (llvm-spirv $< TARGET_FILE:llvm-spirv> )
19
16
set (llvm-ar $< TARGET_FILE:llvm-ar> )
20
- set (clang-offload-bundler $< TARGET_FILE:clang-offload-bundler> )
21
17
22
18
string (CONCAT sycl_targets_opt
23
19
"-fsycl-targets="
@@ -120,162 +116,131 @@ add_fallback_devicelib(libsycl-fallback-complex-fp64 SRC fallback-complex-fp64.c
120
116
add_fallback_devicelib (libsycl-fallback-cmath SRC fallback-cmath.cpp DEP ${cmath_obj_deps} )
121
117
add_fallback_devicelib (libsycl-fallback-cmath-fp64 SRC fallback-cmath-fp64.cpp DEP ${cmath_obj_deps} )
122
118
123
- # imf fallback is different, we have many separate sources instead of single one including all functions.
124
- # So, we need to combine all LLVM IR to a complete one and run llvm-spirv for it.
125
119
file (MAKE_DIRECTORY ${obj_binary_dir} /libdevice )
126
- set (bc_binary_dir ${obj_binary_dir} /libdevice )
127
-
128
- set (fallback-imf-src imf_utils/float_convert.cpp
129
- imf_utils/half_convert.cpp
130
- imf_utils/integer_misc.cpp
131
- imf/imf_inline_fp32.cpp )
132
- set (fallback-imf-fp64-src imf_utils/double_convert.cpp
133
- imf/imf_inline_fp64.cpp )
134
- set (wrapper-imf-src imf_wrapper.cpp imf_wrapper_fp64.cpp )
135
- set (imf-src ${wrapper-imf-src} ${fallback-imf-src} ${fallback-imf-fp64-src} )
136
-
137
- add_custom_target (imf-fallback-spv
138
- COMMAND ${llvm-spirv}
139
- ${bc_binary_dir} /fallback-imf-spir64-unknown-unknown.bc
140
- -o ${spv_binary_dir} /libsycl-fallback-imf.spv )
141
- add_custom_target (imf-fp64-fallback-spv
142
- COMMAND ${llvm-spirv}
143
- ${bc_binary_dir} /fallback-imf-fp64-spir64-unknown-unknown.bc
144
- -o ${spv_binary_dir} /libsycl-fallback-imf-fp64.spv )
145
-
146
- add_dependencies (libsycldevice-spv imf-fallback-spv )
147
- add_dependencies (libsycldevice-spv imf-fp64-fallback-spv )
120
+ set (imf_fallback_src_dir ${obj_binary_dir} /libdevice )
121
+ set (imf_src_dir ${CMAKE_CURRENT_SOURCE_DIR} )
122
+ set (imf_fallback_fp32_deps device.h device_imf.hpp imf_half.hpp
123
+ imf_utils/integer_misc.cpp
124
+ imf_utils/float_convert.cpp
125
+ imf_utils/half_convert.cpp
126
+ imf/imf_inline_fp32.cpp )
127
+ set (imf_fallback_fp64_deps device.h device_imf.hpp imf_half.hpp
128
+ imf_utils/double_convert.cpp
129
+ imf/imf_inline_fp64.cpp )
130
+ set (imf_fp32_fallback_src ${imf_fallback_src_dir} /imf_fp32_fallback.cpp )
131
+ set (imf_fp64_fallback_src ${imf_fallback_src_dir} /imf_fp64_fallback.cpp )
132
+
133
+ add_custom_command (OUTPUT ${imf_fp32_fallback_src}
134
+ COMMAND ${CMAKE_COMMAND} -D SRC_DIR=${imf_src_dir}
135
+ -D DEST_DIR=${imf_fallback_src_dir}
136
+ -D FP64=0
137
+ -P ${CMAKE_CURRENT_SOURCE_DIR} /cmake/modules/ImfSrcConcate.cmake
138
+ DEPENDS ${imf_fallback_fp32_deps} )
139
+
140
+ add_custom_command (OUTPUT ${imf_fp64_fallback_src}
141
+ COMMAND ${CMAKE_COMMAND} -D SRC_DIR=${imf_src_dir}
142
+ -D DEST_DIR=${imf_fallback_src_dir}
143
+ -D FP64=1
144
+ -P ${CMAKE_CURRENT_SOURCE_DIR} /cmake/modules/ImfSrcConcate.cmake
145
+ DEPENDS ${imf_fallback_fp64_deps} )
146
+
147
+ add_custom_target (get_imf_fallback_fp32 DEPENDS ${imf_fp32_fallback_src} )
148
+ add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-imf.spv
149
+ COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
150
+ ${compile_opts} -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
151
+ ${imf_fp32_fallback_src}
152
+ -o ${spv_binary_dir} /libsycl-fallback-imf.spv
153
+ DEPENDS ${imf_fallback_fp32_deps} get_imf_fallback_fp32
154
+ VERBATIM )
155
+
156
+ add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-imf.${lib-suffix}
157
+ COMMAND ${clang} -fsycl -c
158
+ ${compile_opts} ${sycl_targets_opt}
159
+ ${imf_fp32_fallback_src} -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
160
+ -o ${obj_binary_dir} /libsycl-fallback-imf.${lib-suffix}
161
+ DEPENDS ${imf_fallback_fp32_deps} get_imf_fallback_fp32
162
+ VERBATIM )
163
+
164
+ add_custom_command (OUTPUT ${obj_binary_dir} /fallback-imf-fp32-host.${lib-suffix}
165
+ COMMAND ${clang} -c -D__LIBDEVICE_HOST_IMPL__
166
+ -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
167
+ ${imf_fp32_fallback_src}
168
+ -o ${obj_binary_dir} /fallback-imf-fp32-host.${lib-suffix}
169
+ DEPENDS ${imf_fallback_fp32_deps} get_imf_fallback_fp32
170
+ VERBATIM )
171
+
172
+ add_custom_target (get_imf_fallback_fp64 DEPENDS ${imf_fp64_fallback_src} )
173
+ add_custom_command (OUTPUT ${spv_binary_dir} /libsycl-fallback-imf-fp64.spv
174
+ COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
175
+ ${compile_opts} -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
176
+ ${imf_fp64_fallback_src}
177
+ -o ${spv_binary_dir} /libsycl-fallback-imf-fp64.spv
178
+ DEPENDS ${imf_fallback_fp64_deps} get_imf_fallback_fp64
179
+ VERBATIM )
180
+
181
+ add_custom_command (OUTPUT ${obj_binary_dir} /libsycl-fallback-imf-fp64.${lib-suffix}
182
+ COMMAND ${clang} -fsycl -c -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
183
+ ${compile_opts} ${sycl_targets_opt}
184
+ ${imf_fp64_fallback_src}
185
+ -o ${obj_binary_dir} /libsycl-fallback-imf-fp64.${lib-suffix}
186
+ DEPENDS ${imf_fallback_fp64_deps} get_imf_fallback_fp64
187
+ VERBATIM )
188
+
189
+ add_custom_command (OUTPUT ${obj_binary_dir} /fallback-imf-fp64-host.${lib-suffix}
190
+ COMMAND ${clang} -c -D__LIBDEVICE_HOST_IMPL__
191
+ -I ${CMAKE_CURRENT_SOURCE_DIR} /imf
192
+ ${imf_fp64_fallback_src}
193
+ -o ${obj_binary_dir} /fallback-imf-fp64-host.${lib-suffix}
194
+ DEPENDS ${imf_fallback_fp64_deps} get_imf_fallback_fp64
195
+ VERBATIM )
196
+
197
+ add_custom_target (imf_fallback_fp32_spv DEPENDS ${spv_binary_dir} /libsycl-fallback-imf.spv )
198
+ add_custom_target (imf_fallback_fp32_obj DEPENDS ${obj_binary_dir} /libsycl-fallback-imf.${lib-suffix} )
199
+ add_custom_target (imf_fallback_fp32_host_obj DEPENDS ${obj_binary_dir} /fallback-imf-fp32-host.${lib-suffix} )
200
+ add_dependencies (libsycldevice-spv imf_fallback_fp32_spv )
201
+ add_dependencies (libsycldevice-obj imf_fallback_fp32_obj )
202
+
203
+ add_custom_target (imf_fallback_fp64_spv DEPENDS ${spv_binary_dir} /libsycl-fallback-imf-fp64.spv )
204
+ add_custom_target (imf_fallback_fp64_obj DEPENDS ${obj_binary_dir} /libsycl-fallback-imf-fp64.${lib-suffix} )
205
+ add_custom_target (imf_fallback_fp64_host_obj DEPENDS ${obj_binary_dir} /fallback-imf-fp64-host.${lib-suffix} )
206
+ add_dependencies (libsycldevice-spv imf_fallback_fp64_spv )
207
+ add_dependencies (libsycldevice-obj imf_fallback_fp64_obj )
208
+
209
+ add_custom_command (OUTPUT ${obj_binary_dir} /imf-fp32-host.${lib-suffix}
210
+ COMMAND ${clang} -c -D__LIBDEVICE_HOST_IMPL__
211
+ ${CMAKE_CURRENT_SOURCE_DIR} /imf_wrapper.cpp
212
+ -o ${obj_binary_dir} /imf-fp32-host.${lib-suffix}
213
+ MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR} /imf_wrapper.cpp
214
+ DEPENDS ${imf_obj_deps}
215
+ VERBATIM )
216
+
217
+ add_custom_command (OUTPUT ${obj_binary_dir} /imf-fp64-host.${lib-suffix}
218
+ COMMAND ${clang} -c -D__LIBDEVICE_HOST_IMPL__
219
+ ${CMAKE_CURRENT_SOURCE_DIR} /imf_wrapper_fp64.cpp
220
+ -o ${obj_binary_dir} /imf-fp64-host.${lib-suffix}
221
+ MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR} /imf_wrapper_fp64.cpp
222
+ DEPENDS ${imf_obj_deps}
223
+ VERBATIM )
224
+
225
+ add_custom_target (imf_fp32_host_obj DEPENDS ${obj_binary_dir} /imf-fp32-host.${lib-suffix} )
226
+ add_custom_target (imf_fp64_host_obj DEPENDS ${obj_binary_dir} /imf-fp64-host.${lib-suffix} )
227
+ add_custom_target (imf_host_obj
228
+ COMMAND ${llvm-ar} rcs ${obj_binary_dir} /${devicelib_host_static}
229
+ ${obj_binary_dir} /imf-fp32-host.${lib-suffix}
230
+ ${obj_binary_dir} /fallback-imf-fp32-host.${lib-suffix}
231
+ ${obj_binary_dir} /imf-fp64-host.${lib-suffix}
232
+ ${obj_binary_dir} /fallback-imf-fp64-host.${lib-suffix}
233
+ DEPENDS imf_fp32_host_obj imf_fallback_fp32_host_obj imf_fp64_host_obj imf_fallback_fp64_host_obj
234
+ VERBATIM )
235
+ add_dependencies (libsycldevice-obj imf_host_obj )
148
236
install (FILES ${spv_binary_dir} /libsycl-fallback-imf.spv
149
237
${spv_binary_dir} /libsycl-fallback-imf-fp64.spv
150
238
DESTINATION ${install_dest_spv}
151
239
COMPONENT libsycldevice )
152
240
153
- set (sycl_offload_targets sycl-spir64_x86_64-unknown-unknown
154
- sycl-spir64_gen-unknown-unknown
155
- sycl-spir64_fpga-unknown-unknown
156
- sycl-spir64-unknown-unknow
157
- host-x86_64-unknown-linux-gnu )
158
-
159
- string (REPLACE ";" "," sycl_offload_targets "${sycl_offload_targets} " )
160
- set (imf-offload-inputs ${bc_binary_dir} /fallback-imf-spir64-unknown-unknown.bc
161
- ${bc_binary_dir} /fallback-imf-spir64_x86_64-unknown-unknown.bc
162
- ${bc_binary_dir} /fallback-imf-spir64_gen-unknown-unknown.bc
163
- ${bc_binary_dir} /fallback-imf-spir64_fpga-unknown-unknown.bc
164
- ${bc_binary_dir} /fallback-imf-dummy-host.bc )
165
- string (REPLACE ";" "," imf-offload-inputs "${imf-offload-inputs}" )
166
- add_custom_target (imf-fallback-obj
167
- COMMAND ${clang-offload-bundler} -type=o -targets=${sycl_offload_targets}
168
- -outputs=${obj_binary_dir}/libsycl-fallback-imf.${lib-suffix}
169
- -inputs=${imf-offload-inputs} )
170
-
171
- add_dependencies (libsycldevice-obj imf-fallback-obj )
172
-
173
- set (imf-fp64-offload-inputs ${bc_binary_dir} /fallback-imf-fp64-spir64-unknown-unknown.bc
174
- ${bc_binary_dir} /fallback-imf-fp64-spir64_x86_64-unknown-unknown.bc
175
- ${bc_binary_dir} /fallback-imf-fp64-spir64_gen-unknown-unknown.bc
176
- ${bc_binary_dir} /fallback-imf-fp64-spir64_fpga-unknown-unknown.bc
177
- ${bc_binary_dir} /fallback-imf-fp64-dummy-host.bc )
178
- string (REPLACE ";" "," imf-fp64-offload-inputs "${imf-fp64-offload-inputs}" )
179
- add_custom_target (imf-fp64-fallback-obj
180
- COMMAND ${clang-offload-bundler} -type=o -targets=${sycl_offload_targets}
181
- -outputs=${obj_binary_dir}/libsycl-fallback-imf-fp64.${lib-suffix}
182
- -inputs=${imf-fp64-offload-inputs} )
183
-
184
- add_dependencies (libsycldevice-obj imf-fp64-fallback-obj )
185
-
186
241
install (FILES ${obj_binary_dir} /libsycl-fallback-imf.${lib-suffix}
187
242
${obj_binary_dir} /libsycl-fallback-imf-fp64.${lib-suffix}
243
+ ${obj_binary_dir} /${devicelib_host_static}
188
244
DESTINATION ${install_dest_lib}
189
245
COMPONENT libsycldevice )
190
246
191
- function (add_devicelib_bc src_file sycl_target )
192
- cmake_parse_arguments (BC "" "" "DEPS;DEPED" ${ARGN} )
193
- get_filename_component (fn ${src_file} NAME_WE )
194
- set (temp_bc_fn ${fn} -${sycl_target}.bc )
195
- set (devicelib-bc ${bc_binary_dir} /${temp_bc_fn} )
196
- if (sycl_target STREQUAL "dummy-host" )
197
- set (bc_compile_flags -c -emit-llvm )
198
- elseif (sycl_target STREQUAL "host" )
199
- set (bc_compile_flags -c -emit-llvm -D__LIBDEVICE_HOST_IMPL__ )
200
- else ()
201
- set (bc_compile_flags -fsycl -fsycl-device-only -fsycl-targets=${sycl_target} )
202
- endif ()
203
- if (WIN32 )
204
- list (APPEND bc_compile_flags -D_ALLOW_RUNTIME_LIBRARY_MISMATCH )
205
- list (APPEND bc_compile_flags -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH )
206
- endif ()
207
- add_custom_command (OUTPUT ${devicelib-bc}
208
- COMMAND ${clang} ${bc_compile_flags}
209
- ${CMAKE_CURRENT_SOURCE_DIR} /${src_file}
210
- -o ${devicelib-bc}
211
- MAIN_DEPENDENCY ${src_file}
212
- DEPENDS ${BC_DEPS}
213
- VERBATIM )
214
- add_custom_target (${temp_bc_fn} DEPENDS ${devicelib-bc} )
215
- add_dependencies (${BC_DEPED} ${temp_bc_fn} )
216
- endfunction ()
217
-
218
- function (merge_devicelib_bc bc_filename sycl_target )
219
- cmake_parse_arguments (FBC "" "" "SRCS;DEPS;DEPED" ${ARGN} )
220
- set (bc_file_list )
221
- foreach (src ${FBC_SRCS} )
222
- get_filename_component (fn ${src} NAME_WE )
223
- set (temp_bc_fn ${fn} -${sycl_target}.bc )
224
- list (APPEND bc_file_list ${bc_binary_dir} /${temp_bc_fn} )
225
- endforeach ()
226
- set (bc_target ${bc_filename} -${sycl_target} )
227
- add_custom_target (${bc_target}
228
- COMMAND ${llvm-link} ${bc_file_list} -o ${bc_binary_dir} /${bc_target}.bc
229
- VERBATIM )
230
- foreach (src ${FBC_SRCS} )
231
- add_devicelib_bc (${src} ${sycl_target}
232
- DEPS ${FBC_DEPS}
233
- DEPED ${bc_target} )
234
- endforeach ()
235
- foreach (deped ${FBC_DEPED} )
236
- add_dependencies (${deped} ${bc_target} )
237
- endforeach ()
238
- endfunction ()
239
-
240
- set (imf_sycl_targets spir64_x86_64-unknown-unknown
241
- spir64_gen-unknown-unknown
242
- spir64_fpga-unknown-unknown
243
- spir64-unknown-unknown
244
- dummy-host )
245
-
246
- foreach (imf_target ${imf_sycl_targets} )
247
- if (imf_target STREQUAL "spir64-unknown-unknown" )
248
- set (deped_list imf-fallback-obj imf-fallback-spv )
249
- set (deped64_list imf-fp64-fallback-obj imf-fp64-fallback-spv )
250
- else ()
251
- set (deped_list imf-fallback-obj )
252
- set (deped64_list imf-fp64-fallback-obj )
253
- endif ()
254
- merge_devicelib_bc (fallback-imf ${imf_target}
255
- SRCS ${fallback-imf-src}
256
- DEPS ${imf_obj_deps}
257
- DEPED ${deped_list} )
258
-
259
- merge_devicelib_bc (fallback-imf-fp64 ${imf_target}
260
- SRCS ${fallback-imf-fp64-src}
261
- DEPS ${imf_obj_deps}
262
- DEPED ${deped64_list} )
263
- endforeach ()
264
-
265
- add_custom_target (imf-host-obj
266
- COMMAND ${llc} -filetype=obj
267
- ${bc_binary_dir} /imf-host.bc -o
268
- ${bc_binary_dir} /imf-host.${lib-suffix}
269
- COMMAND ${llvm-ar} rcs ${obj_binary_dir} /${devicelib_host_static} ${bc_binary_dir} /imf-host.${lib-suffix}
270
- VERBATIM )
271
-
272
- add_dependencies (libsycldevice imf-host-obj )
273
-
274
- install (FILES ${obj_binary_dir} /${devicelib_host_static}
275
- DESTINATION ${install_dest_lib}
276
- COMPONENT libsycldevice )
277
-
278
- merge_devicelib_bc (imf host
279
- SRCS ${imf-src}
280
- DEPS ${imf_obj_deps}
281
- DEPED imf-host-obj )
0 commit comments