| # Find Level Zero headers and libraries | |
| find_path(LIBOMPTARGET_DEP_LEVEL_ZERO_INCLUDE_DIR NAMES level_zero/ze_api.h) | |
| if(LIBOMPTARGET_DEP_LEVEL_ZERO_INCLUDE_DIR) | |
| find_library(LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY NAMES ze_loader) | |
| endif() | |
| # Create the library and add the default arguments. | |
| add_target_library(omptarget.rtl.level_zero LEVEL_ZERO) | |
| set(LEVEL_ZERO_SRC_FILES | |
| src/L0Context.cpp | |
| src/L0Device.cpp | |
| src/L0Event.cpp | |
| src/L0Kernel.cpp | |
| src/L0Memory.cpp | |
| src/L0Program.cpp | |
| src/L0Plugin.cpp | |
| src/L0Program.cpp | |
| src/L0Options.cpp | |
| src/L0Queue.cpp | |
| ) | |
| target_sources(omptarget.rtl.level_zero PRIVATE | |
| ${LEVEL_ZERO_SRC_FILES} | |
| ) | |
| target_include_directories(omptarget.rtl.level_zero PRIVATE | |
| ${CMAKE_CURRENT_SOURCE_DIR}/include | |
| ) | |
| target_include_directories(omptarget.rtl.level_zero PRIVATE | |
| ${LIBOMPTARGET_INCLUDE_DIR} | |
| ${LIBOMPTARGET_LLVM_INCLUDE_DIRS} | |
| ) | |
| if (WIN32 AND NOT "level_zero" IN_LIST LIBOMPTARGET_DLOPEN_PLUGINS) | |
| message(WARNING "Direct linking against level_zero library is not supported on " | |
| "Windows; falling back to dlopen. Add 'level_zero' to " | |
| "LIBOMPTARGET_DLOPEN_PLUGINS to silence this warning.") | |
| endif() | |
| if (LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY AND NOT "level_zero" IN_LIST LIBOMPTARGET_DLOPEN_PLUGINS AND NOT WIN32) | |
| message(STATUS "Building Level Zero NG plugin linked against level_zero library") | |
| target_include_directories(omptarget.rtl.level_zero PRIVATE | |
| ${LIBOMPTARGET_DEP_LEVEL_ZERO_INCLUDE_DIR} | |
| ) | |
| if(UNIX) | |
| target_link_libraries(omptarget.rtl.level_zero PRIVATE | |
| ${LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY}) | |
| elseif(WIN32) | |
| # Full path to the Level Zero library is recognized as a linker option, so we | |
| # separate directory and file name | |
| cmake_path(GET LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY FILENAME LEVEL_ZERO_LIBRARY_NAME) | |
| cmake_path(GET LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY PARENT_PATH LEVEL_ZERO_LIBRARY_PATH) | |
| target_link_libraries(omptarget.rtl.level_zero PRIVATE ${LEVEL_ZERO_LIBRARY_NAME} | |
| ${LIBOMP_LIB_FILE}) | |
| target_link_directories(omptarget.rtl.level_zero PRIVATE ${LEVEL_ZERO_LIBRARY_PATH}) | |
| else() | |
| message(FATAL_ERROR "Missing platform support") | |
| endif() | |
| else() | |
| message(STATUS "Building Level Zero NG plugin for dlopened level_zero") | |
| target_include_directories(omptarget.rtl.level_zero PRIVATE | |
| ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_l0 | |
| ) | |
| target_sources(omptarget.rtl.level_zero PRIVATE dynamic_l0/L0DynWrapper.cpp) | |
| endif() | |
| option(LIBOMPTARGET_FORCE_LEVELZERO_TESTS "Build Level Zero libomptarget tests" OFF) | |
| if (LIBOMPTARGET_FOUND_INTELGPU_GPU OR LIBOMPTARGET_FORCE_LEVELZERO_TESTS) | |
| # Report to the parent scope that we are building a plugin for intelgpu | |
| set(LIBOMPTARGET_SYSTEM_TARGETS | |
| "${LIBOMPTARGET_SYSTEM_TARGETS} spirv64-intel" PARENT_SCOPE) | |
| list(APPEND LIBOMPTARGET_TESTED_PLUGINS "omptarget.rtl.level_zero") | |
| set(LIBOMPTARGET_TESTED_PLUGINS "${LIBOMPTARGET_TESTED_PLUGINS}" PARENT_SCOPE) | |
| else() | |
| message(STATUS "Not generating Level Zero tests, no supported devices detected." | |
| " Use 'LIBOMPTARGET_FORCE_INTELGPU_TESTS' to override.") | |
| endif() |