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 ()
249endif ()
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" )
8591endif ()
8692
8793add_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)
9198get_filename_component (LEVEL_ZERO_LIBRARY_SRC "${LEVEL_ZERO_LIBRARY} " DIRECTORY )
9299get_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+
93106target_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)
97110target_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)
103114add_library (LevelZeroLoader-Headers INTERFACE )
104115target_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-
109119find_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} " )
146139endif ()
147140
148141message (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
152145target_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 )
0 commit comments