# 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/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 (LIBOMPTARGET_DEP_LEVEL_ZERO_LIBRARY AND NOT "level_zero" IN_LIST LIBOMPTARGET_DLOPEN_PLUGINS) 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()