|  | include_guard() | 
|  |  | 
|  | include(CheckCXXCompilerFlag) | 
|  | include(FindPackageHandleStandardArgs) | 
|  |  | 
|  | if("${DPCPP_SYCL_TARGET}" STREQUAL "amdgcn-amd-amdhsa" AND | 
|  | "${DPCPP_SYCL_ARCH}" STREQUAL "") | 
|  | message(FATAL_ERROR "Architecture required for AMD DPCPP builds," | 
|  | " please specify in DPCPP_SYCL_ARCH") | 
|  | endif() | 
|  |  | 
|  | set(DPCPP_USER_FLAGS "" CACHE STRING | 
|  | "Additional user-specified compiler flags for DPC++") | 
|  |  | 
|  | get_filename_component(DPCPP_BIN_DIR ${CMAKE_CXX_COMPILER} DIRECTORY) | 
|  | find_library(DPCPP_LIB_DIR NAMES sycl sycl6 PATHS "${DPCPP_BIN_DIR}/../lib") | 
|  |  | 
|  | add_library(DPCPP::DPCPP INTERFACE IMPORTED) | 
|  |  | 
|  | set(DPCPP_FLAGS "-fsycl;-fsycl-targets=${DPCPP_SYCL_TARGET};-fsycl-unnamed-lambda;${DPCPP_USER_FLAGS};-ftemplate-backtrace-limit=0") | 
|  | if(NOT "${DPCPP_SYCL_ARCH}" STREQUAL "") | 
|  | if("${DPCPP_SYCL_TARGET}" STREQUAL "amdgcn-amd-amdhsa") | 
|  | list(APPEND DPCPP_FLAGS "-Xsycl-target-backend") | 
|  | list(APPEND DPCPP_FLAGS "--offload-arch=${DPCPP_SYCL_ARCH}") | 
|  | elseif("${DPCPP_SYCL_TARGET}" STREQUAL "nvptx64-nvidia-cuda") | 
|  | list(APPEND DPCPP_FLAGS "-Xsycl-target-backend") | 
|  | list(APPEND DPCPP_FLAGS "--cuda-gpu-arch=${DPCPP_SYCL_ARCH}") | 
|  | endif() | 
|  | endif() | 
|  |  | 
|  | if(UNIX) | 
|  | set_target_properties(DPCPP::DPCPP PROPERTIES | 
|  | INTERFACE_COMPILE_OPTIONS "${DPCPP_FLAGS}" | 
|  | INTERFACE_LINK_OPTIONS "${DPCPP_FLAGS}" | 
|  | INTERFACE_LINK_LIBRARIES ${DPCPP_LIB_DIR} | 
|  | INTERFACE_INCLUDE_DIRECTORIES "${DPCPP_BIN_DIR}/../include/sycl;${DPCPP_BIN_DIR}/../include") | 
|  | message(STATUS ">>>>>>>>> DPCPP INCLUDE DIR: ${DPCPP_BIN_DIR}/../include/sycl") | 
|  | else() | 
|  | set_target_properties(DPCPP::DPCPP PROPERTIES | 
|  | INTERFACE_COMPILE_OPTIONS "${DPCPP_FLAGS}" | 
|  | INTERFACE_LINK_LIBRARIES ${DPCPP_LIB_DIR} | 
|  | INTERFACE_INCLUDE_DIRECTORIES "${DPCPP_BIN_DIR}/../include/sycl") | 
|  | endif() | 
|  |  | 
|  | function(add_sycl_to_target) | 
|  | set(options) | 
|  | set(one_value_args TARGET) | 
|  | set(multi_value_args SOURCES) | 
|  | cmake_parse_arguments(SB_ADD_SYCL | 
|  | "${options}" | 
|  | "${one_value_args}" | 
|  | "${multi_value_args}" | 
|  | ${ARGN} | 
|  | ) | 
|  | target_compile_options(${SB_ADD_SYCL_TARGET} PUBLIC ${DPCPP_FLAGS}) | 
|  | target_link_libraries(${SB_ADD_SYCL_TARGET} DPCPP::DPCPP) | 
|  | target_compile_features(${SB_ADD_SYCL_TARGET} PRIVATE cxx_std_17) | 
|  | get_target_property(target_type ${SB_ADD_SYCL_TARGET} TYPE) | 
|  | if (NOT target_type STREQUAL "OBJECT_LIBRARY") | 
|  | target_link_options(${SB_ADD_SYCL_TARGET} PUBLIC ${DPCPP_FLAGS}) | 
|  | endif() | 
|  | endfunction() |