From ca72b92c169d11266b16e8714b5a7e5f11c3820c Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Mon, 14 Apr 2025 15:13:23 -0700 Subject: [PATCH 1/4] [UR][L0] Build and Install the L0 Dynamic Loader for use during standalone builds Signed-off-by: Neil R. Spruit --- unified-runtime/cmake/FetchLevelZero.cmake | 36 ++++++++++++++++++- .../source/adapters/level_zero/CMakeLists.txt | 2 ++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/unified-runtime/cmake/FetchLevelZero.cmake b/unified-runtime/cmake/FetchLevelZero.cmake index 6c2cee33135c5..0ce3ef3f10434 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,8 +66,43 @@ 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) + 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 configuration + set(BUILD_STATIC OFF) + # Manually configure the dynamic build to avoid redefining the ze_loader target + 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} -DBUILD_STATIC=OFF -S ${level-zero-loader-dynamic_SOURCE_DIR}/level-zero-loader-src -B ${level-zero-loader-dynamic_BUILD_DIR}) + # Store the dynamic build directory globally for use in the level_zero UR cmake + set(LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR ${level-zero-loader-dynamic_BUILD_DIR} CACHE PATH "Path to the Level Zero dynamic loader build directory") + + message(${CMAKE_BINARY_DIR}) + if(WIN32) + add_custom_target( + LEVEL_ZERO_DYNAMIC_LOADER_INSTALL + ALL + COMMAND ${CMAKE_COMMAND} --build ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR}/bin/*.dll ${CMAKE_BINARY_DIR}/bin/ + ) + else() + add_custom_target( + LEVEL_ZERO_DYNAMIC_LOADER_INSTALL + ALL + COMMAND ${CMAKE_COMMAND} --build ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/lib/ + ) + endif() # Restore original flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BAK}") diff --git a/unified-runtime/source/adapters/level_zero/CMakeLists.txt b/unified-runtime/source/adapters/level_zero/CMakeLists.txt index 6eb08a6d93dde..1a9100bdf8ba0 100644 --- a/unified-runtime/source/adapters/level_zero/CMakeLists.txt +++ b/unified-runtime/source/adapters/level_zero/CMakeLists.txt @@ -116,6 +116,7 @@ if(UR_BUILD_ADAPTER_L0) "${CMAKE_CURRENT_SOURCE_DIR}/../../" LevelZeroLoader-Headers ) + add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER_INSTALL) endif() if(UR_BUILD_ADAPTER_L0_V2) @@ -220,4 +221,5 @@ if(UR_BUILD_ADAPTER_L0_V2) "${CMAKE_CURRENT_SOURCE_DIR}/../../ur" LevelZeroLoader-Headers ) + add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER_INSTALL) endif() From f1f9a914c4c0fb0480430206d8be447fbe52ba9e Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Tue, 15 Apr 2025 14:02:15 -0700 Subject: [PATCH 2/4] Split out install step Signed-off-by: Neil R. Spruit --- unified-runtime/cmake/FetchLevelZero.cmake | 48 +++++++++++-------- .../source/adapters/level_zero/CMakeLists.txt | 4 +- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/unified-runtime/cmake/FetchLevelZero.cmake b/unified-runtime/cmake/FetchLevelZero.cmake index 0ce3ef3f10434..851b2eefb87bb 100644 --- a/unified-runtime/cmake/FetchLevelZero.cmake +++ b/unified-runtime/cmake/FetchLevelZero.cmake @@ -78,32 +78,42 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) file(COPY ${level-zero-loader_SOURCE_DIR} DESTINATION ${level-zero-loader-dynamic_SOURCE_DIR}) endif() - # Build dynamic configuration + # Build dynamic version for runtime purposes set(BUILD_STATIC OFF) - # Manually configure the dynamic build to avoid redefining the ze_loader target 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} -DBUILD_STATIC=OFF -S ${level-zero-loader-dynamic_SOURCE_DIR}/level-zero-loader-src -B ${level-zero-loader-dynamic_BUILD_DIR}) - # Store the dynamic build directory globally for use in the level_zero UR cmake - set(LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR ${level-zero-loader-dynamic_BUILD_DIR} CACHE PATH "Path to the Level Zero dynamic loader build directory") - - message(${CMAKE_BINARY_DIR}) - if(WIN32) - add_custom_target( - LEVEL_ZERO_DYNAMIC_LOADER_INSTALL - ALL - COMMAND ${CMAKE_COMMAND} --build ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR}/bin/*.dll ${CMAKE_BINARY_DIR}/bin/ + execute_process( + COMMAND ${CMAKE_COMMAND} -DBUILD_STATIC=OFF -S ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-src/level-zero-loader-src -B ${level-zero-loader-dynamic_BUILD_DIR} + ) + + 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 + if (WIN32) + file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin) + add_custom_command( + TARGET LEVEL_ZERO_DYNAMIC_LOADER POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_loader.dll + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_validation_layer.dll + ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_tracing_layer.dll + ${CMAKE_INSTALL_PREFIX}/bin ) else() - add_custom_target( - LEVEL_ZERO_DYNAMIC_LOADER_INSTALL - ALL - COMMAND ${CMAKE_COMMAND} --build ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR} - COMMAND ${CMAKE_COMMAND} -E copy ${LEVEL_ZERO_LOADER_DYNAMIC_BUILD_DIR}/lib/*.so* ${CMAKE_BINARY_DIR}/lib/ + 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 1a9100bdf8ba0..73328c80e41cf 100644 --- a/unified-runtime/source/adapters/level_zero/CMakeLists.txt +++ b/unified-runtime/source/adapters/level_zero/CMakeLists.txt @@ -116,7 +116,7 @@ if(UR_BUILD_ADAPTER_L0) "${CMAKE_CURRENT_SOURCE_DIR}/../../" LevelZeroLoader-Headers ) - add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER_INSTALL) + add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER) endif() if(UR_BUILD_ADAPTER_L0_V2) @@ -221,5 +221,5 @@ if(UR_BUILD_ADAPTER_L0_V2) "${CMAKE_CURRENT_SOURCE_DIR}/../../ur" LevelZeroLoader-Headers ) - add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER_INSTALL) + add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER) endif() From 7e7b32825f90823eef1530610de1c54c226cb660 Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Tue, 15 Apr 2025 15:44:26 -0700 Subject: [PATCH 3/4] Correct compiler and flags for the loader build Signed-off-by: Neil R. Spruit --- unified-runtime/cmake/FetchLevelZero.cmake | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/unified-runtime/cmake/FetchLevelZero.cmake b/unified-runtime/cmake/FetchLevelZero.cmake index 851b2eefb87bb..6160bd508aa47 100644 --- a/unified-runtime/cmake/FetchLevelZero.cmake +++ b/unified-runtime/cmake/FetchLevelZero.cmake @@ -82,9 +82,16 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) 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} -DBUILD_STATIC=OFF -S ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-src/level-zero-loader-src -B ${level-zero-loader-dynamic_BUILD_DIR} - ) + + if (WIN32) + 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} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ + ) + else() + 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 + ) + endif() add_custom_target( LEVEL_ZERO_DYNAMIC_LOADER From 896f6b1bac673554898a2acdba999589694db664 Mon Sep 17 00:00:00 2001 From: "Neil R. Spruit" Date: Tue, 15 Apr 2025 16:16:00 -0700 Subject: [PATCH 4/4] Limit standalone build and install of the L0 Loader to Linux only Signed-off-by: Neil R. Spruit --- unified-runtime/cmake/FetchLevelZero.cmake | 57 +++++++------------ .../source/adapters/level_zero/CMakeLists.txt | 8 ++- 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/unified-runtime/cmake/FetchLevelZero.cmake b/unified-runtime/cmake/FetchLevelZero.cmake index 6160bd508aa47..f80f20a93a776 100644 --- a/unified-runtime/cmake/FetchLevelZero.cmake +++ b/unified-runtime/cmake/FetchLevelZero.cmake @@ -69,48 +69,33 @@ if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR) set(BUILD_STATIC ON) FetchContent_MakeAvailable(level-zero-loader) FetchContent_GetProperties(level-zero-loader) - set(BUILD_STATIC OFF) + # 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}) - # 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}) - - if (WIN32) - 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} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ - ) - else() 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 ) - endif() - 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 - if (WIN32) - file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin) - add_custom_command( - TARGET LEVEL_ZERO_DYNAMIC_LOADER POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_loader.dll - ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_validation_layer.dll - ${CMAKE_BINARY_DIR}/level-zero-loader-dynamic-build/bin/ze_tracing_layer.dll - ${CMAKE_INSTALL_PREFIX}/bin + add_custom_target( + LEVEL_ZERO_DYNAMIC_LOADER + ALL + COMMAND ${CMAKE_COMMAND} --build ${level-zero-loader-dynamic_BUILD_DIR} ) - else() + + # 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 diff --git a/unified-runtime/source/adapters/level_zero/CMakeLists.txt b/unified-runtime/source/adapters/level_zero/CMakeLists.txt index 73328c80e41cf..0dc7cddb3a77f 100644 --- a/unified-runtime/source/adapters/level_zero/CMakeLists.txt +++ b/unified-runtime/source/adapters/level_zero/CMakeLists.txt @@ -116,7 +116,9 @@ if(UR_BUILD_ADAPTER_L0) "${CMAKE_CURRENT_SOURCE_DIR}/../../" LevelZeroLoader-Headers ) - add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER) + if (NOT WIN32) + add_dependencies(ur_adapter_level_zero LEVEL_ZERO_DYNAMIC_LOADER) + endif() endif() if(UR_BUILD_ADAPTER_L0_V2) @@ -221,5 +223,7 @@ if(UR_BUILD_ADAPTER_L0_V2) "${CMAKE_CURRENT_SOURCE_DIR}/../../ur" LevelZeroLoader-Headers ) - add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER) + if (NOT WIN32) + add_dependencies(ur_adapter_level_zero_v2 LEVEL_ZERO_DYNAMIC_LOADER) + endif() endif()