if(OPENCV_SKIP_SAMPLES_SYCL) return() endif() ocv_install_example_src(sycl *.cpp *.hpp CMakeLists.txt) set(OPENCV_SYCL_SAMPLES_REQUIRED_DEPS opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui) ocv_check_dependencies(${OPENCV_SYCL_SAMPLES_REQUIRED_DEPS}) if(NOT BUILD_EXAMPLES OR NOT OCV_DEPENDENCIES_FOUND OR OPENCV_SKIP_SAMPLES_BUILD_SYCL) return() endif() if(CMAKE_VERSION VERSION_LESS "3.5") message(STATUS "SYCL samples require CMake 3.5+") return() endif() cmake_policy(VERSION 3.5) find_package(SYCL QUIET) # will oneAPI support this straightforward way? if(NOT SYCL_FOUND AND NOT OPENCV_SKIP_SAMPLES_SYCL_ONEDNN) # lets try scripts from oneAPI:oneDNN component if(NOT DEFINED DNNLROOT AND DEFINED ENV{DNNLROOT}) set(DNNLROOT "$ENV{DNNLROOT}") endif() # Some verions of called script violate CMake policy and may emit unrecoverable CMake errors # Use OPENCV_SKIP_SAMPLES_SYCL=1 / OPENCV_SKIP_SAMPLES_SYCL_ONEDNN to bypass this find_package(dnnl CONFIG QUIET HINTS "${DNNLROOT}") endif() if(NOT SYCL_FOUND AND NOT OPENCV_SKIP_SAMPLES_SYCL_COMPUTECPP) # lets try this SYCL SDK too: https://github.com/codeplaysoftware/computecpp-sdk find_package(ComputeCpp QUIET) if(ComputeCpp_FOUND) set(SYCL_TARGET ComputeCpp::ComputeCpp) set(SYCL_FLAGS ${ComputeCpp_FLAGS}) set(SYCL_INCLUDE_DIRS ${ComputeCpp_INCLUDE_DIRS}) set(SYCL_LIBRARIES ${ComputeCpp_LIBRARIES}) endif() endif() if(OPENCV_CMAKE_DEBUG_SYCL) ocv_cmake_dump_vars("SYCL") # OpenCV source tree is required endif() if(NOT SYCL_TARGET) message(STATUS "SYCL/OpenCL samples are skipped: SYCL SDK is required") message(STATUS " - check configuration of SYCL_DIR/SYCL_ROOT/CMAKE_MODULE_PATH") message(STATUS " - ensure that right compiler is selected from SYCL SDK (e.g, clang++): CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}") return() endif() project(sycl_samples) if(SYCL_FLAGS) # "target_link_libraries(... ${SYCL_TARGET})" is not enough. Hacking... set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYCL_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SYCL_FLAGS}") endif() ocv_include_modules_recurse(${OPENCV_SYCL_SAMPLES_REQUIRED_DEPS}) ocv_include_directories(${OpenCL_INCLUDE_DIR}) file(GLOB all_samples RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) foreach(sample_filename ${all_samples}) ocv_define_sample(tgt ${sample_filename} sycl) ocv_target_link_libraries(${tgt} PRIVATE ${OPENCV_LINKER_LIBS} ${OPENCV_SYCL_SAMPLES_REQUIRED_DEPS} ${SYCL_TARGET}) if(COMMAND add_sycl_to_target) # ComputeCpp add_sycl_to_target(TARGET ${tgt} SOURCES ${sample_filename}) endif() endforeach()