Skip to content

Commit 46aedad

Browse files
sarnexkbenzie
authored andcommitted
Improve support for pre-installed Level Zero and simplify (#19763)
First, try finding preinstalled Level Zero using pkg-config first If that fails, try to find include/header dirs on the OS And if those both fail, fetch from github (both headers and loader). No need for variables to set the repo and commit to clone, it's highly unlikely anyone will do this and if they want to they can use the existing CMake FetchContent override infrastructure. I also removed a variable about whether to use fetchcontent or not. We should just do what everyone expects by default, try to find it on the system and if we do use it, otherwise fallback to fetching it. This was requested by NixOS developers, see the below issue. intel/llvm#19635 Signed-off-by: Sarnie, Nick <[email protected]>
1 parent e6675b1 commit 46aedad

File tree

2 files changed

+104
-106
lines changed

2 files changed

+104
-106
lines changed

cmake/FetchLevelZero.cmake

Lines changed: 98 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -3,146 +3,139 @@
33
# See LICENSE.TXT
44
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55

6-
set(UR_LEVEL_ZERO_LOADER_LIBRARY "" CACHE FILEPATH "Path of the Level Zero Loader library")
7-
set(UR_LEVEL_ZERO_INCLUDE_DIR "" CACHE FILEPATH "Directory containing the Level Zero Headers")
8-
set(UR_LEVEL_ZERO_LOADER_REPO "" CACHE STRING "Github repo to get the Level Zero loader sources from")
9-
set(UR_LEVEL_ZERO_LOADER_TAG "" CACHE STRING " GIT tag of the Level Loader taken from github repo")
10-
set(UR_COMPUTE_RUNTIME_REPO "" CACHE STRING "Github repo to get the compute runtime sources from")
11-
set(UR_COMPUTE_RUNTIME_TAG "" CACHE STRING " GIT tag of the compute runtime taken from github repo")
12-
13-
# If UR_COMPUTE_RUNTIME_FETCH_REPO is set to OFF, then UR_COMPUTE_RUNTIME_REPO should be defined and
14-
# should point to the compute runtime repo.
15-
set(UR_COMPUTE_RUNTIME_FETCH_REPO ON CACHE BOOL "Flag to indicate wheather to fetch the compute runtime repo")
16-
17-
# Copy Level Zero loader/headers locally to the build to avoid leaking their path.
18-
set(LEVEL_ZERO_COPY_DIR ${CMAKE_CURRENT_BINARY_DIR}/level_zero_loader)
19-
if (NOT UR_LEVEL_ZERO_LOADER_LIBRARY STREQUAL "")
20-
get_filename_component(LEVEL_ZERO_LIB_NAME "${UR_LEVEL_ZERO_LOADER_LIBRARY}" NAME)
21-
set(LEVEL_ZERO_LIBRARY ${LEVEL_ZERO_COPY_DIR}/${LEVEL_ZERO_LIB_NAME})
22-
message(STATUS "Level Zero Adapter: Copying Level Zero loader to local build tree")
23-
file(COPY ${UR_LEVEL_ZERO_LOADER_LIBRARY} DESTINATION ${LEVEL_ZERO_COPY_DIR} FOLLOW_SYMLINK_CHAIN)
6+
if(TARGET LevelZeroLoader)
7+
# We only need to run this once.
8+
return()
249
endif()
25-
if (NOT UR_LEVEL_ZERO_INCLUDE_DIR STREQUAL "")
26-
set(LEVEL_ZERO_INCLUDE_DIR ${LEVEL_ZERO_COPY_DIR})
27-
message(STATUS "Level Zero Adapter: Copying Level Zero headers to local build tree")
28-
file(COPY ${UR_LEVEL_ZERO_INCLUDE_DIR}/ DESTINATION ${LEVEL_ZERO_COPY_DIR})
29-
endif()
30-
31-
if (NOT DEFINED LEVEL_ZERO_LIBRARY OR NOT DEFINED LEVEL_ZERO_INCLUDE_DIR)
32-
message(STATUS "Level Zero Adapter: Download Level Zero loader and headers from github.com")
33-
34-
# Workaround warnings/errors for Level Zero build
35-
set(CMAKE_CXX_FLAGS_BAK "${CMAKE_CXX_FLAGS}")
36-
if (UNIX)
37-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-but-set-variable")
38-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pedantic")
39-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-stringop-truncation")
40-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
41-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++98-compat-extra-semi")
42-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
43-
endif()
44-
set(BUILD_STATIC ON)
4510

46-
if (UR_LEVEL_ZERO_LOADER_REPO STREQUAL "")
47-
set(UR_LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git")
48-
endif()
49-
if (UR_LEVEL_ZERO_LOADER_TAG STREQUAL "")
50-
set(UR_LEVEL_ZERO_LOADER_TAG 35c037cdf4aa9a2e6df34b6f1ce1bdc86ac5422f)
51-
endif()
52-
53-
# Disable due to a bug https://github.com/oneapi-src/level-zero/issues/104
54-
set(CMAKE_INCLUDE_CURRENT_DIR OFF)
55-
# Prevent L0 loader from exporting extra symbols
56-
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS OFF)
11+
find_package(PkgConfig QUIET)
12+
# LevelZero doesn't install a CMake config target, just PkgConfig,
13+
# so try using that to find the install and if it's not available
14+
# just try to search for the path.
15+
if(PkgConfig_FOUND)
16+
pkg_check_modules(level-zero level-zero>=1.22.3)
17+
if(level-zero_FOUND)
18+
set(LEVEL_ZERO_INCLUDE_DIR "${level-zero_INCLUDEDIR}/level_zero")
19+
set(LEVEL_ZERO_LIBRARY_SRC "${level-zero_LIBDIR}")
20+
set(LEVEL_ZERO_LIB_NAME "${level-zero_LIBRARIES}")
21+
message(STATUS "Level Zero Adapter: Using preinstalled level zero loader at ${level-zero_LINK_LIBRARIES}")
22+
endif()
23+
else()
24+
set(L0_HEADER_PATH "loader/ze_loader.h")
25+
find_path(L0_HEADER ${L0_HEADER_PATH} ${CMAKE_PREFIX_PATH} PATH_SUFFIXES "level_zero")
26+
find_library(ZE_LOADER NAMES ze_loader HINTS /usr ${CMAKE_PREFIX_PATH})
27+
if(L0_HEADER AND ZE_LOADER)
28+
set(LEVEL_ZERO_INCLUDE_DIR "${L0_HEADER}")
29+
set(LEVEL_ZERO_LIBRARY "${ZE_LOADER}")
30+
message(STATUS "Level Zero Adapter: Using preinstalled level zero loader at ${LEVEL_ZERO_LIBRARY}")
31+
add_library(ze_loader INTERFACE)
32+
endif()
33+
endif()
5734

58-
set(CMAKE_MSVC_RUNTIME_LIBRARY_BAK "${CMAKE_MSVC_RUNTIME_LIBRARY}")
59-
# UMF has not yet been able to build as static
60-
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
61-
message(STATUS "Level Zero Adapter: Will fetch Level Zero Loader from ${UR_LEVEL_ZERO_LOADER_REPO}")
62-
include(FetchContent)
63-
FetchContent_Declare(level-zero-loader
64-
GIT_REPOSITORY ${UR_LEVEL_ZERO_LOADER_REPO}
65-
GIT_TAG ${UR_LEVEL_ZERO_LOADER_TAG}
35+
if(NOT LEVEL_ZERO_LIB_NAME AND NOT LEVEL_ZERO_LIBRARY)
36+
message(STATUS "Level Zero Adapter: Download Level Zero loader and headers from github.com")
37+
38+
# Workaround warnings/errors for Level Zero build
39+
set(CMAKE_CXX_FLAGS_BAK "${CMAKE_CXX_FLAGS}")
40+
if (UNIX)
41+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-but-set-variable")
42+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pedantic")
43+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-stringop-truncation")
44+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
45+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++98-compat-extra-semi")
46+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
47+
endif()
48+
set(BUILD_STATIC ON)
49+
50+
set(UR_LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git")
51+
# Remember to update the pkg_check_modules minimum version above when updating the
52+
# clone tag
53+
set(UR_LEVEL_ZERO_LOADER_TAG 35c037cdf4aa9a2e6df34b6f1ce1bdc86ac5422f)
54+
55+
# Disable due to a bug https://github.com/oneapi-src/level-zero/issues/104
56+
set(CMAKE_INCLUDE_CURRENT_DIR OFF)
57+
# Prevent L0 loader from exporting extra symbols
58+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS OFF)
59+
60+
set(CMAKE_MSVC_RUNTIME_LIBRARY_BAK "${CMAKE_MSVC_RUNTIME_LIBRARY}")
61+
# UMF has not yet been able to build as static
62+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
63+
message(STATUS "Level Zero Adapter: Will fetch Level Zero Loader from ${UR_LEVEL_ZERO_LOADER_REPO}")
64+
include(FetchContent)
65+
FetchContent_Declare(level-zero-loader
66+
GIT_REPOSITORY ${UR_LEVEL_ZERO_LOADER_REPO}
67+
GIT_TAG ${UR_LEVEL_ZERO_LOADER_TAG}
6668
)
67-
if(MSVC)
68-
set(USE_Z7 ON)
69-
endif()
70-
FetchContent_MakeAvailable(level-zero-loader)
71-
FetchContent_GetProperties(level-zero-loader)
72-
73-
# Restore original flags
74-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BAK}")
75-
set(CMAKE_MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY_BAK}")
76-
77-
target_compile_options(ze_loader PRIVATE
78-
$<$<IN_LIST:$<CXX_COMPILER_ID>,GNU;Clang;Intel;IntelLLVM>:-Wno-error>
79-
$<$<CXX_COMPILER_ID:MSVC>:/WX- /UUNICODE>
69+
if(MSVC)
70+
set(USE_Z7 ON)
71+
endif()
72+
FetchContent_MakeAvailable(level-zero-loader)
73+
FetchContent_GetProperties(level-zero-loader)
74+
75+
# Restore original flags
76+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BAK}")
77+
set(CMAKE_MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY_BAK}")
78+
set(LEVEL_ZERO_LIBRARY ze_loader)
79+
set(LEVEL_ZERO_INCLUDE_DIR
80+
${level-zero-loader_SOURCE_DIR}/include CACHE PATH "Path to Level Zero Headers")
81+
82+
set(LEVEL_ZERO_TARGET_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
83+
84+
file(GLOB LEVEL_ZERO_LOADER_API_HEADERS "${LEVEL_ZERO_INCLUDE_DIR}/*.h")
85+
file(COPY ${LEVEL_ZERO_LOADER_API_HEADERS} DESTINATION ${LEVEL_ZERO_INCLUDE_DIR}/level_zero)
86+
87+
target_compile_options(ze_loader PRIVATE
88+
$<$<IN_LIST:$<CXX_COMPILER_ID>,GNU;Clang;Intel;IntelLLVM>:-Wno-error>
89+
$<$<CXX_COMPILER_ID:MSVC>:/WX- /UUNICODE>
8090
)
81-
82-
set(LEVEL_ZERO_LIBRARY ze_loader)
83-
set(LEVEL_ZERO_INCLUDE_DIR
84-
${level-zero-loader_SOURCE_DIR}/include CACHE PATH "Path to Level Zero Headers")
8591
endif()
8692

8793
add_library(LevelZeroLoader INTERFACE)
8894
# The MSVC linker does not like / at the start of a path, so to work around this
8995
# we split it into a link library and a library path, where the path is allowed
9096
# to have leading /.
97+
if(NOT LEVEL_ZERO_LIBRARY_SRC OR NOT LEVEL_ZERO_LIB_NAME)
9198
get_filename_component(LEVEL_ZERO_LIBRARY_SRC "${LEVEL_ZERO_LIBRARY}" DIRECTORY)
9299
get_filename_component(LEVEL_ZERO_LIB_NAME "${LEVEL_ZERO_LIBRARY}" NAME)
100+
endif()
101+
102+
if(NOT LEVEL_ZERO_TARGET_INCLUDE_DIR)
103+
set(LEVEL_ZERO_TARGET_INCLUDE_DIR ${LEVEL_ZERO_INCLUDE_DIR})
104+
endif()
105+
93106
target_link_directories(LevelZeroLoader
94107
INTERFACE "$<BUILD_INTERFACE:${LEVEL_ZERO_LIBRARY_SRC}>"
95-
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
108+
"$<INSTALL_INTERFACE:${LEVEL_ZERO_TARGET_INCLUDE_DIR}>"
96109
)
97110
target_link_libraries(LevelZeroLoader
98111
INTERFACE "${LEVEL_ZERO_LIB_NAME}"
99112
)
100113

101-
file(GLOB LEVEL_ZERO_LOADER_API_HEADERS "${LEVEL_ZERO_INCLUDE_DIR}/*.h")
102-
file(COPY ${LEVEL_ZERO_LOADER_API_HEADERS} DESTINATION ${LEVEL_ZERO_INCLUDE_DIR}/level_zero)
103114
add_library(LevelZeroLoader-Headers INTERFACE)
104115
target_include_directories(LevelZeroLoader-Headers
105-
INTERFACE "$<BUILD_INTERFACE:${LEVEL_ZERO_INCLUDE_DIR};${LEVEL_ZERO_INCLUDE_DIR}/level_zero>"
106-
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
116+
INTERFACE "$<BUILD_INTERFACE:${LEVEL_ZERO_INCLUDE_DIR}>"
117+
"$<INSTALL_INTERFACE:${LEVEL_ZERO_TARGET_INCLUDE_DIR}>"
107118
)
108-
109119
find_path(L0_COMPUTE_RUNTIME_HEADERS
110120
NAMES "ze_intel_gpu.h"
111121
PATH_SUFFIXES "level_zero"
112122
)
113-
if(NOT UR_COMPUTE_RUNTIME_REPO AND L0_COMPUTE_RUNTIME_HEADERS)
123+
if(L0_COMPUTE_RUNTIME_HEADERS)
114124
set(COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE "${L0_COMPUTE_RUNTIME_HEADERS}")
115125
set(COMPUTE_RUNTIME_REPO_PATH "${L0_COMPUTE_RUNTIME_HEADERS}")
116-
elseif (UR_COMPUTE_RUNTIME_FETCH_REPO)
117-
# Fetch only if UR_COMPUTE_RUNTIME_FETCH_REPO is set to ON.
118-
if (UR_COMPUTE_RUNTIME_REPO STREQUAL "")
119-
set(UR_COMPUTE_RUNTIME_REPO "https://github.com/intel/compute-runtime.git")
120-
endif()
121-
if (UR_COMPUTE_RUNTIME_TAG STREQUAL "")
122-
set(UR_COMPUTE_RUNTIME_TAG 25.05.32567.17)
123-
endif()
126+
else()
127+
set(UR_COMPUTE_RUNTIME_REPO "https://github.com/intel/compute-runtime.git")
128+
set(UR_COMPUTE_RUNTIME_TAG 25.05.32567.17)
124129

125130
include(FetchContent)
126131
# Sparse fetch only the dir with level zero headers for experimental features to avoid pulling in the entire compute-runtime.
127132
FetchContentSparse_Declare(exp-headers ${UR_COMPUTE_RUNTIME_REPO} "${UR_COMPUTE_RUNTIME_TAG}" "level_zero/include")
128133
FetchContent_GetProperties(exp-headers)
129134
if(NOT exp-headers_POPULATED)
130-
FetchContent_Populate(exp-headers)
135+
FetchContent_Populate(exp-headers)
131136
endif()
132-
133137
set(COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE "${exp-headers_SOURCE_DIR}")
134138
set(COMPUTE_RUNTIME_REPO_PATH "${exp-headers_SOURCE_DIR}/../..")
135-
136-
# When UR_COMPUTE_RUNTIME_FETCH_REPO is OFF, use UR_COMPUTE_RUNTIME_REPO as repo.
137-
else()
138-
139-
# Check if UR_COMPUTE_RUNTIME_REPO is set. Throw if not.
140-
if (UR_COMPUTE_RUNTIME_REPO STREQUAL "")
141-
message(FATAL_ERROR "UR_COMPUTE_RUNTIME_FETCH_REPO is set to OFF but UR_COMPUTE_RUNTIME_REPO is not set. Please set it to the compute runtime repo.")
142-
endif()
143-
144-
set(COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE "${UR_COMPUTE_RUNTIME_REPO}/level_zero/include")
145-
set(COMPUTE_RUNTIME_REPO_PATH "${UR_COMPUTE_RUNTIME_REPO}")
146139
endif()
147140

148141
message(STATUS "Using Level Zero include headers from ${COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE}")
@@ -152,5 +145,7 @@ message(STATUS "Level Zero Adapter: Using Level Zero headers from ${COMPUTE_RUNT
152145
target_include_directories(ComputeRuntimeLevelZero-Headers
153146
INTERFACE "$<BUILD_INTERFACE:${COMPUTE_RUNTIME_LEVEL_ZERO_INCLUDE}>"
154147
"$<BUILD_INTERFACE:${COMPUTE_RUNTIME_REPO_PATH}>"
155-
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
148+
"$<INSTALL_INTERFACE:${LEVEL_ZERO_TARGET_INCLUDE_DIR}>"
156149
)
150+
151+
set(LEVEL_ZERO_INCLUDE_DIR "${LEVEL_ZERO_INCLUDE_DIR}" CACHE PATH INTERNAL)

source/adapters/level_zero/CMakeLists.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,14 @@ if(UR_BUILD_ADAPTER_L0)
6464
target_compile_definitions(ur_adapter_level_zero PUBLIC UR_STATIC_LEVEL_ZERO)
6565
if(UR_STATIC_ADAPTER_L0)
6666
target_compile_definitions(ur_adapter_level_zero PUBLIC UR_STATIC_ADAPTER_LEVEL_ZERO)
67-
67+
set(ADAPTER_L0_TARGETS_TO_INSTALL ur_umf LevelZeroLoader LevelZeroLoader-Headers ComputeRuntimeLevelZero-Headers)
6868
# 'utils' target from 'level-zero-loader' includes path which is prefixed
6969
# in the source directory, this breaks the installation of 'utils' target.
70-
set_target_properties(level_zero_utils PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
71-
install(TARGETS ur_umf LevelZeroLoader LevelZeroLoader-Headers ComputeRuntimeLevelZero-Headers ze_loader level_zero_utils
70+
if(TARGET level_zero_utils)
71+
set_target_properties(level_zero_utils PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
72+
list(APPEND ADAPTER_L0_TARGETS_TO_INSTALL level_zero_utils)
73+
endif()
74+
install(TARGETS ${ADAPTER_L0_TARGETS_TO_INSTALL}
7275
EXPORT ${PROJECT_NAME}-targets
7376
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
7477
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}

0 commit comments

Comments
 (0)