Skip to content

[NFC][SYCL] Refactor libdevice/cmake/modules/SYCLLibdevice.cmake #6049

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 51 additions & 186 deletions libdevice/cmake/modules/SYCLLibdevice.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,213 +32,76 @@ if (WIN32)
list(APPEND compile_opts -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH)
endif()

set(devicelib-obj-file ${obj_binary_dir}/libsycl-crt.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-file}
function(addSYCLLibDeviceObj input output)
set(extra_deps ${ARGN})
add_custom_command(OUTPUT ${obj_binary_dir}/${output}.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/crt_wrapper.cpp
-o ${devicelib-obj-file}
MAIN_DEPENDENCY crt_wrapper.cpp
DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
${CMAKE_CURRENT_SOURCE_DIR}/${input}.cpp
-o ${obj_binary_dir}/${output}.${lib-suffix}
MAIN_DEPENDENCY ${input}.cpp
DEPENDS device.h sycl-compiler ${extra_deps}
VERBATIM)
endfunction(addSYCLLibDeviceObj)

set(devicelib-obj-complex ${obj_binary_dir}/libsycl-complex.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-complex}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper.cpp
-o ${devicelib-obj-complex}
MAIN_DEPENDENCY complex_wrapper.cpp
DEPENDS device_complex.h device.h sycl-compiler
VERBATIM)

set(devicelib-obj-complex-fp64 ${obj_binary_dir}/libsycl-complex-fp64.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-complex-fp64}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/complex_wrapper_fp64.cpp
-o ${devicelib-obj-complex-fp64}
MAIN_DEPENDENCY complex_wrapper_fp64.cpp
DEPENDS device_complex.h device.h sycl-compiler
VERBATIM)

set(devicelib-obj-cmath ${obj_binary_dir}/libsycl-cmath.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-cmath}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper.cpp
-o ${devicelib-obj-cmath}
MAIN_DEPENDENCY cmath_wrapper.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

set(devicelib-obj-cmath-fp64 ${obj_binary_dir}/libsycl-cmath-fp64.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-cmath-fp64}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/cmath_wrapper_fp64.cpp
-o ${devicelib-obj-cmath-fp64}
MAIN_DEPENDENCY cmath_wrapper_fp64.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-cassert.spv
function(addSYCLLibDeviceSPV input output)
set(extra_deps ${ARGN})
add_custom_command(OUTPUT ${spv_binary_dir}/${output}.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp
-o ${spv_binary_dir}/libsycl-fallback-cassert.spv
MAIN_DEPENDENCY fallback-cassert.cpp
DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-cstring.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cstring.cpp
-o ${spv_binary_dir}/libsycl-fallback-cstring.spv
MAIN_DEPENDENCY fallback-cstring.cpp
DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-cassert.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cassert.cpp
-o ${obj_binary_dir}/libsycl-fallback-cassert.${lib-suffix}
MAIN_DEPENDENCY fallback-cassert.cpp
DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-cstring.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cstring.cpp
-o ${obj_binary_dir}/libsycl-fallback-cstring.${lib-suffix}
MAIN_DEPENDENCY fallback-cstring.cpp
DEPENDS wrapper.h device.h spirv_vars.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-complex.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp
-o ${spv_binary_dir}/libsycl-fallback-complex.spv
MAIN_DEPENDENCY fallback-complex.cpp
DEPENDS device_math.h device_complex.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-complex.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex.cpp
-o ${obj_binary_dir}/libsycl-fallback-complex.${lib-suffix}
MAIN_DEPENDENCY fallback-complex.cpp
DEPENDS device_math.h device_complex.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-complex-fp64.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp
-o ${spv_binary_dir}/libsycl-fallback-complex-fp64.spv
MAIN_DEPENDENCY fallback-complex-fp64.cpp
DEPENDS device_math.h device_complex.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-complex-fp64.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-complex-fp64.cpp
-o ${obj_binary_dir}/libsycl-fallback-complex-fp64.${lib-suffix}
MAIN_DEPENDENCY fallback-complex-fp64.cpp
DEPENDS device_math.h device_complex.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-cmath.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp
-o ${spv_binary_dir}/libsycl-fallback-cmath.spv
MAIN_DEPENDENCY fallback-cmath.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-cmath.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath.cpp
-o ${obj_binary_dir}/libsycl-fallback-cmath.${lib-suffix}
MAIN_DEPENDENCY fallback-cmath.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${spv_binary_dir}/libsycl-fallback-cmath-fp64.spv
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp
-o ${spv_binary_dir}/libsycl-fallback-cmath-fp64.spv
MAIN_DEPENDENCY fallback-cmath-fp64.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-fallback-cmath-fp64.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/fallback-cmath-fp64.cpp
-o ${obj_binary_dir}/libsycl-fallback-cmath-fp64.${lib-suffix}
MAIN_DEPENDENCY fallback-cmath-fp64.cpp
DEPENDS device_math.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-itt-stubs.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/itt_stubs.cpp
-o ${obj_binary_dir}/libsycl-itt-stubs.${lib-suffix}
MAIN_DEPENDENCY itt_stubs.cpp
DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-itt-compiler-wrappers.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/itt_compiler_wrappers.cpp
-o ${obj_binary_dir}/libsycl-itt-compiler-wrappers.${lib-suffix}
MAIN_DEPENDENCY itt_compiler_wrappers.cpp
DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
VERBATIM)

add_custom_command(OUTPUT ${obj_binary_dir}/libsycl-itt-user-wrappers.${lib-suffix}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/itt_user_wrappers.cpp
-o ${obj_binary_dir}/libsycl-itt-user-wrappers.${lib-suffix}
MAIN_DEPENDENCY itt_user_wrappers.cpp
DEPENDS device_itt.h spirv_vars.h device.h sycl-compiler
VERBATIM)
${CMAKE_CURRENT_SOURCE_DIR}/${input}.cpp
-o ${spv_binary_dir}/${output}.spv
MAIN_DEPENDENCY ${input}.cpp
DEPENDS device.h sycl-compiler ${extra_deps}
VERBATIM)
endfunction(addSYCLLibDeviceSPV input output)

function(addSYCLLibDeviceObjAndSPV input output)
addSYCLLibDeviceObj(${input} ${output} ${ARGN})
addSYCLLibDeviceSPV(${input} ${output} ${ARGN})
endfunction(addSYCLLibDeviceObjAndSPV input output)

addSYCLLibDeviceObj(crt_wrapper libsycl-crt wrapper.h spirv_vars.h)
addSYCLLibDeviceObj(complex_wrapper libsycl-complex device_complex.h)
addSYCLLibDeviceObj(complex_wrapper_fp64 libsycl-complex-fp64 device_complex.h)
addSYCLLibDeviceObj(cmath_wrapper libsycl-cmath device_math.h)
addSYCLLibDeviceObj(cmath_wrapper_fp64 libsycl-cmath-fp64 device_math.h)

addSYCLLibDeviceObj(itt_stubs libsycl-itt-stubs device_itt.h spirv_vars.h)
addSYCLLibDeviceObj(itt_compiler_wrappers libsycl-itt-compiler-wrappers device_itt.h spirv_vars.h)
addSYCLLibDeviceObj(itt_user_wrappers libsycl-itt-user-wrappers device_itt.h spirv_vars.h)

addSYCLLibDeviceObjAndSPV(fallback-cassert libsycl-fallback-cassert wrapper.h spirv_vars.h)
addSYCLLibDeviceObjAndSPV(fallback-cstring libsycl-fallback-cstring wrapper.h spirv_vars.h)
addSYCLLibDeviceObjAndSPV(fallback-complex libsycl-fallback-complex device_math.h device_complex.h)
addSYCLLibDeviceObjAndSPV(fallback-complex-fp64 libsycl-fallback-complex-fp64 device_math.h device_complex.h)
addSYCLLibDeviceObjAndSPV(fallback-cmath libsycl-fallback-cmath device_math.h)
addSYCLLibDeviceObjAndSPV(fallback-cmath-fp64 libsycl-fallback-cmath-fp64 device_math.h)

set(devicelib-obj-itt-files
${obj_binary_dir}/libsycl-itt-stubs.${lib-suffix}
${obj_binary_dir}/libsycl-itt-compiler-wrappers.${lib-suffix}
${obj_binary_dir}/libsycl-itt-user-wrappers.${lib-suffix}
)
)

add_custom_target(libsycldevice-obj DEPENDS
${devicelib-obj-file}
${devicelib-obj-complex}
${devicelib-obj-complex-fp64}
${devicelib-obj-cmath}
${devicelib-obj-cmath-fp64}
${obj_binary_dir}/libsycl-crt.${lib-suffix}
${obj_binary_dir}/libsycl-complex.${lib-suffix}
${obj_binary_dir}/libsycl-complex-fp64.${lib-suffix}
${obj_binary_dir}/libsycl-cmath.${lib-suffix}
${obj_binary_dir}/libsycl-cmath-fp64.${lib-suffix}
${devicelib-obj-itt-files}
)

add_custom_target(libsycldevice-spv DEPENDS
${spv_binary_dir}/libsycl-fallback-cassert.spv
${spv_binary_dir}/libsycl-fallback-cstring.spv
${spv_binary_dir}/libsycl-fallback-complex.spv
${spv_binary_dir}/libsycl-fallback-complex-fp64.spv
${spv_binary_dir}/libsycl-fallback-cmath.spv
${spv_binary_dir}/libsycl-fallback-cmath-fp64.spv
)
)

add_custom_target(libsycldevice-fallback-obj DEPENDS
${obj_binary_dir}/libsycl-fallback-cassert.${lib-suffix}
${obj_binary_dir}/libsycl-fallback-cstring.${lib-suffix}
Expand All @@ -247,10 +110,12 @@ add_custom_target(libsycldevice-fallback-obj DEPENDS
${obj_binary_dir}/libsycl-fallback-cmath.${lib-suffix}
${obj_binary_dir}/libsycl-fallback-cmath-fp64.${lib-suffix}
)

add_custom_target(libsycldevice DEPENDS
libsycldevice-obj
libsycldevice-fallback-obj
libsycldevice-spv)
libsycldevice-spv
)

# Place device libraries near the libsycl.so library in an install
# directory as well
Expand Down