From 2b5f45d04faab4883e78ee1cec85dbc3e6e5e30f Mon Sep 17 00:00:00 2001 From: Nikita Grigorian Date: Mon, 17 Mar 2025 20:15:55 -0700 Subject: [PATCH 1/3] Fix Level Zero Loader detection when statically linked SYCL nightly and future builds now link libur_adapter_level_zero to the level zero loader statically, so detecting through readelf is no longer possible For this case, we instead set the default Level Zero Loader filename to be 'libze_loader.so.1,' which is likely to not change See: https://github.com/intel/llvm/pull/17104 --- libsyclinterface/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libsyclinterface/CMakeLists.txt b/libsyclinterface/CMakeLists.txt index 5624f63ba8..bc9995f000 100644 --- a/libsyclinterface/CMakeLists.txt +++ b/libsyclinterface/CMakeLists.txt @@ -44,6 +44,8 @@ option(DPCTL_ENABLE_GLOG set(DPCTL_LEVEL_ZERO_INCLUDE_DIR "" CACHE STRING "Level zero header path") +set(LIBZE_DEFAULT_LOADER_FILENAME "libze_loader.so.1" CACHE STRING "Default Level Zero Loader filename") + # Minimum version requirement only when oneAPI dpcpp is used. if(DPCTL_DPCPP_FROM_ONEAPI) find_package(IntelSyclCompiler 2021.3.0 REQUIRED) @@ -74,6 +76,10 @@ if(DPCTL_ENABLE_L0_PROGRAM_CREATION) OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ) + # if libze_loader is statically linked, LIBZE_LOADER_FILENAME will be an empty string + if ("x${LIBZE_LOADER_FILENAME}" STREQUAL "x") + set(LIBZE_LOADER_FILENAME ${LIBZE_DEFAULT_LOADER_FILENAME}) + endif() set(LIBZE_LOADER_FILENAME ${LIBZE_LOADER_FILENAME} PARENT_SCOPE) endif() set(LIBZE_LOADER_FILENAME ${LIBZE_LOADER_FILENAME} PARENT_SCOPE) From 8d41b8319beadd44d0fb0e187a1ccb810d256ed4 Mon Sep 17 00:00:00 2001 From: Nikita Grigorian Date: Tue, 18 Mar 2025 20:33:45 -0700 Subject: [PATCH 2/3] Add LIBZE_SET_LOADER_FILENAME CMake variable Allows users to set Level Zero loader filename --- libsyclinterface/CMakeLists.txt | 40 +++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/libsyclinterface/CMakeLists.txt b/libsyclinterface/CMakeLists.txt index bc9995f000..e4c87f3f1f 100644 --- a/libsyclinterface/CMakeLists.txt +++ b/libsyclinterface/CMakeLists.txt @@ -44,6 +44,8 @@ option(DPCTL_ENABLE_GLOG set(DPCTL_LEVEL_ZERO_INCLUDE_DIR "" CACHE STRING "Level zero header path") +set(LIBZE_SET_LOADER_FILENAME "" CACHE STRING "User-provided Level Zero Loader filename") + set(LIBZE_DEFAULT_LOADER_FILENAME "libze_loader.so.1" CACHE STRING "Default Level Zero Loader filename") # Minimum version requirement only when oneAPI dpcpp is used. @@ -62,23 +64,27 @@ if(DPCTL_ENABLE_L0_PROGRAM_CREATION) get_level_zero_headers() endif() if (UNIX) - find_library(PI_LEVEL_ZERO_LIB - NAMES pi_level_zero ur_adapter_level_zero - HINTS ${IntelSyclCompiler_LIBRARY_DIR} - ) - find_program(READELF_PROG readelf) - find_program(GREP_PROG grep) - execute_process( - COMMAND ${READELF_PROG} -d ${PI_LEVEL_ZERO_LIB} - COMMAND ${GREP_PROG} libze_loader - COMMAND ${GREP_PROG} -Po "libze_loader[^\]]*" - OUTPUT_VARIABLE LIBZE_LOADER_FILENAME - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - # if libze_loader is statically linked, LIBZE_LOADER_FILENAME will be an empty string - if ("x${LIBZE_LOADER_FILENAME}" STREQUAL "x") - set(LIBZE_LOADER_FILENAME ${LIBZE_DEFAULT_LOADER_FILENAME}) + if ("x${LIBZE_SET_LOADER_FILENAME}" STREQUAL "x") + find_library(PI_LEVEL_ZERO_LIB + NAMES pi_level_zero ur_adapter_level_zero + HINTS ${IntelSyclCompiler_LIBRARY_DIR} + ) + find_program(READELF_PROG readelf) + find_program(GREP_PROG grep) + execute_process( + COMMAND ${READELF_PROG} -d ${PI_LEVEL_ZERO_LIB} + COMMAND ${GREP_PROG} libze_loader + COMMAND ${GREP_PROG} -Po "libze_loader[^\]]*" + OUTPUT_VARIABLE LIBZE_LOADER_FILENAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + # if libze_loader is statically linked, LIBZE_LOADER_FILENAME will be an empty string + if ("x${LIBZE_LOADER_FILENAME}" STREQUAL "x") + set(LIBZE_LOADER_FILENAME ${LIBZE_DEFAULT_LOADER_FILENAME}) + endif() + else () + set(LIBZE_LOADER_FILENAME ${LIBZE_SET_LOADER_FILENAME}) endif() set(LIBZE_LOADER_FILENAME ${LIBZE_LOADER_FILENAME} PARENT_SCOPE) endif() From 3117a9468999aa0469dd3e006298b6dff83ccd7c Mon Sep 17 00:00:00 2001 From: Nikita Grigorian Date: Sat, 29 Mar 2025 01:04:49 -0700 Subject: [PATCH 3/3] Remove redundant setting of LIBZE_LOADER_FILENAME in parent scope --- libsyclinterface/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/libsyclinterface/CMakeLists.txt b/libsyclinterface/CMakeLists.txt index e4c87f3f1f..b4331bffbb 100644 --- a/libsyclinterface/CMakeLists.txt +++ b/libsyclinterface/CMakeLists.txt @@ -86,7 +86,6 @@ if(DPCTL_ENABLE_L0_PROGRAM_CREATION) else () set(LIBZE_LOADER_FILENAME ${LIBZE_SET_LOADER_FILENAME}) endif() - set(LIBZE_LOADER_FILENAME ${LIBZE_LOADER_FILENAME} PARENT_SCOPE) endif() set(LIBZE_LOADER_FILENAME ${LIBZE_LOADER_FILENAME} PARENT_SCOPE) endif()