-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
146 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
if(DPCPP_EXECUTABLE) | ||
get_filename_component( _dpcpp_path ${DPCPP_EXECUTABLE} PATH ) | ||
else(DPCPP_EXECUTABLE) | ||
set(_dpcpp_path "") | ||
endif(DPCPP_EXECUTABLE) | ||
find_program( DPCPP_EXECUTABLE NAMES dpcpp HINTS ${_dpcpp_path} ENV PATH ) | ||
mark_as_advanced( DPCPP_EXECUTABLE ) | ||
|
||
if( DPCPP_EXECUTABLE ) | ||
execute_process(COMMAND ${DPCPP_EXECUTABLE} --version | ||
RESULT_VARIABLE _res | ||
OUTPUT_VARIABLE _out | ||
ERROR_VARIABLE _err) | ||
if( _res EQUAL 0 ) | ||
string(REGEX MATCH "([^\n]+)" _ ${_out}) | ||
message(STATUS "Found dpcpp: ${DPCPP_EXECUTABLE} version ${CMAKE_MATCH_1}") | ||
|
||
get_filename_component( _dpcpp_dir ${DPCPP_EXECUTABLE} DIRECTORY ) | ||
get_filename_component( _dpcpp_lib_dir "${_dpcpp_dir}/../lib" ABSOLUTE ) | ||
|
||
find_library(SYCL_LIBRARY sycl HINTS "${_dpcpp_lib_dir}" "${SYCL_LIBRARY_DIR}" ENV "SYCL_LIBRARY_DIR") | ||
if( SYCL_LIBRARY ) | ||
message(STATUS "SYCL library: ${SYCL_LIBRARY}") | ||
|
||
get_filename_component( _dpcpp_inc_dir "${_dpcpp_dir}/../include" ABSOLUTE ) | ||
find_file(_sycl_include_file "sycl.hpp" HINTS "${_dpcpp_inc_dir}" "${_dpcpp_inc_dir}/sycl/CL" "${SYCL_INCLUDE_DIR}" ENV "SYCL_INCLUDE_DIR") | ||
if(_sycl_include_file) | ||
get_filename_component(SYCL_INCLUDE_DIR "${_sycl_include_file}" DIRECTORY) | ||
message(STATUS "SYCL include dir: ${SYCL_INCLUDE_DIR}") | ||
else(_sycl_include_file) | ||
message(WARNING "Found DPC++, and SYCL library, but could not find SYCL include directory. Define SYCL_INCLUDE_DIR to enable DPC++ support") | ||
set(DPCPP_EXECUTABLE OFF) | ||
endif(_sycl_include_file) | ||
else( SYCL_LIBRARY ) | ||
message(WARNING "Found DPC++, but did not find SYCL library. Define SYCL_LIBRARY_DIR to enable DPC++ support") | ||
set(DPCPP_EXECUTABLE OFF) | ||
endif( SYCL_LIBRARY ) | ||
else( _res EQUAL 0 ) | ||
set(DPCPP_EXECUTABLE OFF) | ||
message(WARNING "${DPCPP_EXECUTABLE} does not work: 'dpcpp -v' returned ${_res}, with error ${_err}") | ||
message(WARNING "dpc++ support is disabled, set DPCPP_EXECUTABLE to the path of dpcpp to enable DPC++ support, and/or fix your environment to run dpcpp") | ||
endif( _res EQUAL 0 ) | ||
endif( DPCPP_EXECUTABLE ) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
if(LEVEL_ZERO_FOUND) | ||
if(TARGET level_zero::ze_loader) | ||
message(STATUS "level-zero is found and TARGET level_zero::ze_loader is defined") | ||
return() | ||
endif(TARGET level_zero::ze_loader) | ||
|
||
# If the user defines LEVEL_ZERO_INCLUDE_DIR and LEVEL_ZERO_LIBRARY_DIR, CMake's find_package declares that LEVEL_ZERO_FOUND is 1, but does not define the target. | ||
check_library_exists("ze_loader" "zeInit" "${LEVEL_ZERO_LIBRARY_DIR}" LEVEL_ZERO_HAVE_ZE_LOADER) | ||
check_include_file("${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h" LEVEL_ZERO_HAVE_ZE_API_H) | ||
if(LEVEL_ZERO_HAVE_ZE_LOADER AND LEVEL_ZERO_HAVE_ZE_API_H) | ||
message(STATUS "Defining level_zero::ze_loader target with interface ${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h and library ${LEVEL_ZERO_LIBRARY_DIR}/libze_loader.so") | ||
add_library(level_zero::ze_loader UNKNOWN IMPORTED GLOBAL) | ||
set_property(TARGET level_zero::ze_loader PROPERTY IMPORTED_LOCATION "${LEVEL_ZERO_LIBRARY_DIR}/libze_loader.so") | ||
set_property(TARGET level_zero::ze_loader PROPERTY INTERFACE "${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h") | ||
include_directories("${LEVEL_ZERO_INCLUDE_DIR}/") | ||
return() | ||
else(LEVEL_ZERO_HAVE_ZE_LOADER AND LEVEL_ZERO_HAVE_ZE_API_H) | ||
if(NOT LEVEL_ZERO_HAVE_ZE_LOADER) | ||
message(STATUS "LEVEL_ZERO_FOUND is set, but could not find ze_loader library in ${LEVEL_ZERO_LIBRARY_DIR}") | ||
endif(NOT LEVEL_ZERO_HAVE_ZE_LOADER) | ||
if(NOT LEVEL_ZERO_HAVE_ZE_API_H) | ||
message(STATUS "LEVEL_ZERO_FOUND is set, but could not find level_zero/ze_api.h in ${LEVEL_ZERO_INCLUDE_DIR}") | ||
endif(NOT LEVEL_ZERO_HAVE_ZE_API_H) | ||
endif(LEVEL_ZERO_HAVE_ZE_LOADER AND LEVEL_ZERO_HAVE_ZE_API_H) | ||
endif(LEVEL_ZERO_FOUND) | ||
|
||
if(LEVEL_ZERO_ROOT_DIR) | ||
message(STATUS "Trying to locate level-zero library and headers under ${LEVEL_ZERO_ROOT_DIR}") | ||
find_library(ZE_LOADER_LIBRARY "ze_loader" HINTS "${LEVEL_ZERO_ROOT_DIR}/lib" "${LEVEL_ZERO_ROOT_DIR}/lib64" NO_DEFAULT_PATH) | ||
find_path (LEVEL_ZERO_INCLUDE_DIR NAMES "level_zero/ze_api.h" PATHS "${LEVEL_ZERO_ROOT_DIR}/include" NO_DEFAULT_PATH) | ||
|
||
if(ZE_LOADER_LIBRARY AND LEVEL_ZERO_INCLUDE_DIR) | ||
get_filename_component(ZE_LOADER_LIBRARY_DIR ${ZE_LOADER_LIBRARY} DIRECTORY) | ||
include(CheckLibraryExists) | ||
check_library_exists("ze_loader" "zeInit" ${ZE_LOADER_LIBRARY_DIR} ZE_LOADER_HAVE_ZEINIT) | ||
|
||
if(ZE_LOADER_HAVE_ZEINIT) | ||
message(STATUS "Found ze_loader library in ${ZE_LOADER_LIBRARY} and level_zero/ze_api.h in ${LEVEL_ZERO_INCLUDE_DIR}") | ||
add_library(level_zero::ze_loader UNKNOWN IMPORTED GLOBAL) | ||
set_property(TARGET level_zero::ze_loader PROPERTY IMPORTED_LOCATION "${ZE_LOADER_LIBRARY}") | ||
set_property(TARGET level_zero::ze_loader PROPERTY INTERFACE "${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h") | ||
include_directories("${LEVEL_ZERO_INCLUDE_DIR}/") | ||
set(LEVEL_ZERO_FOUND TRUE) | ||
else(ZE_LOADER_HAVE_ZEINIT) | ||
if(NOT ZE_LOADER_HAVE_ZEINIT) | ||
message(WARNING "Found ze_loader library under ${ZE_LOADER_LIBRARY}, but could not find symbol zeInit in this library -- falling back to package config search") | ||
endif(NOT ZE_LOADER_HAVE_ZEINIT) | ||
endif(ZE_LOADER_HAVE_ZEINIT) | ||
else(ZE_LOADER_LIBRARY AND LEVEL_ZERO_INCLUDE_DIR) | ||
if(NOT ZE_LOADER_LIBRARY) | ||
message(WARNING "Could not find ze_loader library under provided LEVEL_ZERO_ROOT_DIR='${LEVEL_ZERO_ROOT_DIR}' (tried subdirectories lib/ and lib64/) -- falling back to package config search") | ||
endif(NOT ZE_LOADER_LIBRARY) | ||
if(NOT LEVEL_ZERO_INCLUDE_DIR) | ||
message(WARNING "Cound not find level_zero/ze_api.h under provided LEVEL_ZERO_ROOT_DIR=${LEVEL_ZERO_ROOT_DIR}' (tried subdirectory include) -- falling back to package config search") | ||
endif(NOT LEVEL_ZERO_INCLUDE_DIR) | ||
endif(ZE_LOADER_LIBRARY AND LEVEL_ZERO_INCLUDE_DIR) | ||
endif(LEVEL_ZERO_ROOT_DIR) | ||
|
||
if(NOT LEVEL_ZERO_FOUND) | ||
find_package(PkgConfig QUIET) | ||
|
||
if(PKG_CONFIG_FOUND) | ||
pkg_check_modules(LEVEL_ZERO level-zero) | ||
if(LEVEL_ZERO_FOUND) | ||
pkg_get_variable(LEVEL_ZERO_LIBRARY_DIR level-zero libdir) | ||
pkg_get_variable(LEVEL_ZERO_INCLUDE_DIR level-zero includedir) | ||
#We double-check that the level-zero library is indeed where find_package claims it is | ||
find_library(_PARSEC_ZE_LOADER_LIBRARY_FOUND ze_loader PATHS "${LEVEL_ZERO_LIBRARY_DIR}/libze_loader.so" | ||
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_INSTALL_PREFIX) | ||
if( _PARSEC_ZE_LOADER_LIBRARY_FOUND ) | ||
add_library(level_zero::ze_loader UNKNOWN IMPORTED GLOBAL) | ||
set_property(TARGET level_zero::ze_loader PROPERTY IMPORTED_LOCATION "${LEVEL_ZERO_LIBRARY_DIR}/libze_loader.so") | ||
set_property(TARGET level_zero::ze_loader PROPERTY INTERFACE "${LEVEL_ZERO_INCLUDE_DIR}/level_zero/ze_api.h") | ||
include_directories("${LEVEL_ZERO_INCLUDE_DIR}/") | ||
else() | ||
message(WARNING "level-zero was found in `${LEVEL_ZERO_LIBRARY_DIR}` and `${LEVEL_ZERO_INCLUDE_DIR}` according to pkg-config, but ze_loader library is not in `${LEVEL_ZERO_LIBRARY_DIR}/libze_loader.so`. Deactivating level-zero. Provide -DLEVEL_ZERO_ROOT_DIR to specify the location of level zero manually.") | ||
set(LEVEL_ZERO_FOUND OFF CACHE BOOL "if level-zero was found" FORCE) | ||
endif() | ||
endif(LEVEL_ZERO_FOUND) | ||
endif(PKG_CONFIG_FOUND) | ||
endif(NOT LEVEL_ZERO_FOUND) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters