diff --git a/unified-runtime/cmake/FetchLevelZero.cmake b/unified-runtime/cmake/FetchLevelZero.cmake index 6c2cee33135c5..f80f20a93a776 100644 --- a/unified-runtime/cmake/FetchLevelZero.cmake +++ b/unified-runtime/cmake/FetchLevelZero.cmake @@ -41,7 +41,6 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++98-compat-extra-semi") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option") endif() - set(BUILD_STATIC ON) if (UR_LEVEL_ZERO_LOADER_REPO STREQUAL "") set(UR_LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git") @@ -67,9 +66,46 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) if(MSVC) set(USE_Z7 ON) endif() + set(BUILD_STATIC ON) FetchContent_MakeAvailable(level-zero-loader) FetchContent_GetProperties(level-zero-loader) - + # Allow build and install of the dynamic loader on Linux for Runtime Use. + # Windows cannot install the L0 Loader custom due to security which requires the Loader to be installed to System32. + if (NOT WIN32) + set(BUILD_STATIC OFF) + # Create a second copy of the repository for the second configuration + set(level-zero-loader-dynamic_SOURCE_DIR "${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-src") + + if(NOT EXISTS ${level-zero-loader-dynamic_SOURCE_DIR}) + file(COPY ${level-zero-loader_SOURCE_DIR} DESTINATION ${level-zero-loader-dynamic_SOURCE_DIR}) + endif() + + # Build dynamic version for runtime purposes + set(BUILD_STATIC OFF) + set(level-zero-loader-dynamic_BUILD_DIR ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build) + file(MAKE_DIRECTORY ${level-zero-loader-dynamic_BUILD_DIR}) + + execute_process( + COMMAND ${CMAKE_COMMAND} -G Ninja -DBUILD_STATIC=OFF -S ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-src/level-zero-loader-src -B ${level-zero-loader-dynamic_BUILD_DIR} -Wno-error + ) + + add_custom_target( + LEVEL_ZERO_DYNAMIC_LOADER + ALL + COMMAND ${CMAKE_COMMAND} --build ${level-zero-loader-dynamic_BUILD_DIR} + ) + + # Ensure the install directory exists or create it + file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib) + add_custom_command( + TARGET LEVEL_ZERO_DYNAMIC_LOADER POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/lib/libze_loader.so.1 + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/lib/libze_validation_layer.so.1 + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/lib/libze_tracing_layer.so.1 + ${CMAKE_INSTALL_PREFIX}/lib + ) + endif() # Restore original flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BAK}") set(CMAKE_MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY_BAK}") diff --git a/unified-runtime/source/adapters/level_zero/CMakeLists.txt b/unified-runtime/source/adapters/level_zero/CMakeLists.txt index 6eb08a6d93dde..0dc7cddb3a77f 100644 --- a/unified-runtime/source/adapters/level_zero/CMakeLists.txt +++ b/unified-runtime/source/adapters/level_zero/CMakeLists.txt @@ -116,6 +116,9 @@ if(UR_BUILD_ADAPTER_L0) "${CMAKE_CURRENT_SOURCE_DIR}/../../" LevelZeroLoader-Headers ) + if (NOT WIN32) + add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER) + endif() endif() if(UR_BUILD_ADAPTER_L0_V2) @@ -220,4 +223,7 @@ if(UR_BUILD_ADAPTER_L0_V2) "${CMAKE_CURRENT_SOURCE_DIR}/../../ur" LevelZeroLoader-Headers ) + if (NOT WIN32) + add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER) + endif() endif()