Skip to content

[SYCL][libdevice] Simplify SYCL libdevice cmake file. #6037

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

Merged
merged 7 commits into from
Apr 26, 2022
Merged
Show file tree
Hide file tree
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
322 changes: 71 additions & 251 deletions libdevice/cmake/modules/SYCLLibdevice.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ set(obj_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
if (WIN32)
set(lib-suffix obj)
set(spv_binary_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(install_dest_spv bin)
else()
set(lib-suffix o)
set(spv_binary_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
set(install_dest_spv lib${LLVM_LIBDIR_SUFFIX})
endif()
set(install_dest_lib lib${LLVM_LIBDIR_SUFFIX})
set(clang $<TARGET_FILE:clang>)

string(CONCAT sycl_targets_opt
Expand All @@ -22,266 +25,83 @@ set(compile_opts
# Disable warnings for the host compilation, where
# we declare all functions as 'static'.
-Wno-undefined-internal
# Force definition of CL_SYCL_LANGUAGE_VERSION, as long as
# SYCL specific code is guarded by it.
-sycl-std=2017
-sycl-std=2020
)

if (WIN32)
list(APPEND compile_opts -D_ALLOW_RUNTIME_LIBRARY_MISMATCH)
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}
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
VERBATIM)

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
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_target(libsycldevice-obj)
add_custom_target(libsycldevice-spv)

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)

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}
${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}
${obj_binary_dir}/libsycl-fallback-complex.${lib-suffix}
${obj_binary_dir}/libsycl-fallback-complex-fp64.${lib-suffix}
${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)

# Place device libraries near the libsycl.so library in an install
# directory as well
if (WIN32)
set(install_dest_spv bin)
else()
set(install_dest_spv lib${LLVM_LIBDIR_SUFFIX})
endif()

set(install_dest_lib lib${LLVM_LIBDIR_SUFFIX})

install(FILES ${devicelib-obj-file}
${obj_binary_dir}/libsycl-fallback-cassert.${lib-suffix}
${obj_binary_dir}/libsycl-fallback-cstring.${lib-suffix}
${devicelib-obj-complex}
${obj_binary_dir}/libsycl-fallback-complex.${lib-suffix}
${devicelib-obj-complex-fp64}
${obj_binary_dir}/libsycl-fallback-complex-fp64.${lib-suffix}
${devicelib-obj-cmath}
${obj_binary_dir}/libsycl-fallback-cmath.${lib-suffix}
${devicelib-obj-cmath-fp64}
${obj_binary_dir}/libsycl-fallback-cmath-fp64.${lib-suffix}
${devicelib-obj-itt-files}
DESTINATION ${install_dest_lib}
COMPONENT libsycldevice)

install(FILES ${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
DESTINATION ${install_dest_spv}
COMPONENT libsycldevice)
function(add_devicelib_obj obj_filename)
cmake_parse_arguments(OBJ "" "" "SRC;DEP" ${ARGN})
set(devicelib-obj-file ${obj_binary_dir}/${obj_filename}.${lib-suffix})
add_custom_command(OUTPUT ${devicelib-obj-file}
COMMAND ${clang} -fsycl -c
${compile_opts} ${sycl_targets_opt}
${CMAKE_CURRENT_SOURCE_DIR}/${OBJ_SRC}
-o ${devicelib-obj-file}
MAIN_DEPENDENCY ${OBJ_SRC}
DEPENDS ${OBJ_DEP}
VERBATIM)
set(devicelib-obj-target ${obj_filename}-obj)
add_custom_target(${devicelib-obj-target} DEPENDS ${devicelib-obj-file})
add_dependencies(libsycldevice-obj ${devicelib-obj-target})
install(FILES ${devicelib-obj-file}
DESTINATION ${install_dest_lib}
COMPONENT libsycldevice)
endfunction()

function(add_devicelib_spv spv_filename)
cmake_parse_arguments(SPV "" "" "SRC;DEP" ${ARGN})
set(devicelib-spv-file ${spv_binary_dir}/${spv_filename}.spv)
add_custom_command(OUTPUT ${devicelib-spv-file}
COMMAND ${clang} -fsycl-device-only -fno-sycl-use-bitcode
${compile_opts}
${CMAKE_CURRENT_SOURCE_DIR}/${SPV_SRC}
-o ${devicelib-spv-file}
MAIN_DEPENDENCY ${SPV_SRC}
DEPENDS ${SPV_DEP}
VERBATIM)
set(devicelib-spv-target ${spv_filename}-spv)
add_custom_target(${devicelib-spv-target} DEPENDS ${devicelib-spv-file})
add_dependencies(libsycldevice-spv ${devicelib-spv-target})
install(FILES ${devicelib-spv-file}
DESTINATION ${install_dest_spv}
COMPONENT libsycldevice)
endfunction()

function(add_fallback_devicelib fallback_filename)
cmake_parse_arguments(FB "" "" "SRC;DEP" ${ARGN})
add_devicelib_spv(${fallback_filename} SRC ${FB_SRC} DEP ${FB_DEP})
add_devicelib_obj(${fallback_filename} SRC ${FB_SRC} DEP ${FB_DEP})
endfunction()

set(crt_obj_deps wrapper.h device.h spirv_vars.h sycl-compiler)
set(complex_obj_deps device_complex.h device.h sycl-compiler)
set(cmath_obj_deps device_math.h device.h sycl-compiler)
set(itt_obj_deps device_itt.h spirv_vars.h device.h sycl-compiler)

add_devicelib_obj(libsycl-itt-stubs SRC itt_stubs.cpp DEP ${itt_obj_deps})
add_devicelib_obj(libsycl-itt-compiler-wrappers SRC itt_compiler_wrappers.cpp DEP ${itt_obj_deps})
add_devicelib_obj(libsycl-itt-user-wrappers SRC itt_user_wrappers.cpp DEP ${itt_obj_deps})

add_devicelib_obj(libsycl-crt SRC crt_wrapper.cpp DEP ${crt_obj_deps})
add_devicelib_obj(libsycl-complex SRC complex_wrapper.cpp DEP ${complex_obj_deps})
add_devicelib_obj(libsycl-complex-fp64 SRC complex_wrapper_fp64.cpp DEP ${complex_obj_deps} )
add_devicelib_obj(libsycl-cmath SRC cmath_wrapper.cpp DEP ${cmath_obj_deps})
add_devicelib_obj(libsycl-cmath-fp64 SRC cmath_wrapper_fp64.cpp DEP ${cmath_obj_deps} )

add_fallback_devicelib(libsycl-fallback-cassert SRC fallback-cassert.cpp DEP ${crt_obj_deps})
add_fallback_devicelib(libsycl-fallback-cstring SRC fallback-cstring.cpp DEP ${crt_obj_deps})
add_fallback_devicelib(libsycl-fallback-complex SRC fallback-complex.cpp DEP ${complex_obj_deps})
add_fallback_devicelib(libsycl-fallback-complex-fp64 SRC fallback-complex-fp64.cpp DEP ${complex_obj_deps} )
add_fallback_devicelib(libsycl-fallback-cmath SRC fallback-cmath.cpp DEP ${cmath_obj_deps})
add_fallback_devicelib(libsycl-fallback-cmath-fp64 SRC fallback-cmath-fp64.cpp DEP ${cmath_obj_deps})
3 changes: 2 additions & 1 deletion libdevice/cmath_wrapper_fp64.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//==--- cmath_wrapper.cpp - wrappers for C math library functions ----------==//
//==--- cmath_wrapper_fp64.cpp - wrappers for double precision C math library
// functions ----------==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand Down
3 changes: 2 additions & 1 deletion libdevice/complex_wrapper_fp64.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//==--- complex_wrapper.cpp - wrappers for C99 complex math functions ------==//
//==--- complex_wrapper_fp64.cpp - wrappers for double precision C99 complex
// math functions ------==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand Down
3 changes: 2 additions & 1 deletion libdevice/fallback-cmath-fp64.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//==--- fallback-cmath.cpp - fallback implementation of math functions -----==//
//==--- fallback-cmath-fp64.cpp - fallback implementation of double precision
// math functions -----==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand Down
4 changes: 2 additions & 2 deletions libdevice/fallback-complex-fp64.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//==----- fallback-complex.cpp - complex math functions for SPIR-V device --==//
//==----- fallback-complex-fp64.cpp - double precision complex math functions
// for SPIR-V device --==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
Expand All @@ -7,7 +8,6 @@
//===----------------------------------------------------------------------===//

#include "device_complex.h"
#include "device_math.h"

#ifdef __SPIR__
#include <cmath>
Expand Down
1 change: 0 additions & 1 deletion libdevice/fallback-complex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//

#include "device_complex.h"
#include "device_math.h"

#ifdef __SPIR__
#include <cmath>
Expand Down