mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-12 19:20:36 +08:00
63 lines
2.3 KiB
CMake
63 lines
2.3 KiB
CMake
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()
|