Skip to content

Commit 36333e7

Browse files
author
Diptorup Deb
committed
Introduce a FindLevelZero cmake module.
1 parent 442f5ce commit 36333e7

File tree

3 files changed

+186
-15
lines changed

3 files changed

+186
-15
lines changed

CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
cmake_minimum_required(VERSION 3.13.4)
15+
cmake_minimum_required(VERSION 3.20)
1616

1717
project(mlir-extensions)
1818

@@ -30,6 +30,8 @@ if(POLICY CMP0116)
3030
cmake_policy(SET CMP0116 OLD)
3131
endif()
3232

33+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/")
34+
3335
# SDL
3436
# set(CMAKE_VERBOSE_MAKEFILE on) # enable for debug
3537
if (CMAKE_SYSTEM_NAME STREQUAL Windows)
@@ -96,17 +98,15 @@ message(STATUS "IMEX_ENABLE_TESTS ${IMEX_ENABLE_TESTS}")
9698
message(STATUS "IMEX_ENABLE_NUMBA_FE ${IMEX_ENABLE_NUMBA_FE}")
9799
message(STATUS "IMEX_ENABLE_TBB_SUPPORT ${IMEX_ENABLE_TBB_SUPPORT}")
98100

99-
100-
101101
macro(apply_llvm_compile_flags target)
102102
if (MSVC)
103103
target_compile_options(${target} PRIVATE /EHsc)
104104
endif ()
105-
106105
target_compile_definitions(${target} PRIVATE ${LLVM_DEFINITIONS})
107106
endmacro()
108107

109108
if(IMEX_ENABLE_IGPU_DIALECT)
109+
find_package(LevelZero 1.6.2 REQUIRED)
110110
add_subdirectory(dpcomp_gpu_runtime)
111111
endif()
112112

cmake/modules/FindLevelZero.cmake

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# Copyright 2022 Intel Corporation
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
#
15+
# CMake find_package() module for level-zero
16+
#
17+
# Example usage:
18+
#
19+
# find_package(LevelZero)
20+
#
21+
# If successful, the following variables will be defined:
22+
# LevelZero_FOUND
23+
# LevelZero_INCLUDE_DIR
24+
# LevelZero_LIBRARY
25+
# LevelZero_LIBRARIES_DIR
26+
# LevelZero_LIBRARIES_DIR
27+
# LevelZero_VERSION_MINOR
28+
# LevelZero_VERSION_PATCH
29+
# LevelZero_VERSION
30+
#
31+
# By default, the module searches the standard paths to locate the "ze_api.h"
32+
# and the ze_loader shared library. When using a custom level-zero installation,
33+
# the environment variable "LEVEL_ZERO_DIR" should be specified telling the
34+
# module to get the level-zero library and headers from that location.
35+
36+
include(FindPackageHandleStandardArgs)
37+
38+
if(DEFINED ENV{LEVEL_ZERO_DIR})
39+
find_path(LevelZero_INCLUDE_DIR
40+
NAMES level_zero/ze_api.h
41+
PATHS $ENV{LEVEL_ZERO_DIR}
42+
NO_DEFAULT_PATH
43+
)
44+
45+
find_library(LevelZero_LIBRARY
46+
NAMES ze_loader
47+
PATHS $ENV{LEVEL_ZERO_DIR}
48+
NO_DEFAULT_PATH
49+
)
50+
else()
51+
find_path(LevelZero_INCLUDE_DIR
52+
NAMES level_zero/ze_api.h
53+
)
54+
55+
find_library(LevelZero_LIBRARY
56+
NAMES ze_loader
57+
)
58+
endif()
59+
60+
function(compare_versions)
61+
endfunction()
62+
63+
function(get_l0_version)
64+
65+
set(L0_VERSIONEER_SRC
66+
[====[
67+
#include <iostream>
68+
#include <level_zero/loader/ze_loader.h>
69+
#include <string>
70+
int main() {
71+
ze_result_t result;
72+
std::string loader("loader");
73+
zel_component_version_t *versions;
74+
size_t size = 0;
75+
result = zeInit(0);
76+
if (result != ZE_RESULT_SUCCESS) {
77+
std::cerr << "Failed to init ze driver" << std::endl;
78+
return -1;
79+
}
80+
zelLoaderGetVersions(&size, nullptr);
81+
versions = new zel_component_version_t[size];
82+
zelLoaderGetVersions(&size, versions);
83+
for (size_t i = 0; i < size; i++) {
84+
if (loader.compare(versions[i].component_name) == 0) {
85+
std::cout << versions[i].component_lib_version.major << "."
86+
<< versions[i].component_lib_version.minor << "."
87+
<< versions[i].component_lib_version.patch;
88+
break;
89+
}
90+
}
91+
delete[] versions;
92+
}
93+
]====]
94+
)
95+
96+
set(L0_VERSIONEER_FILE ${CMAKE_BINARY_DIR}/temp/l0_versioneer.cpp)
97+
98+
file(WRITE ${L0_VERSIONEER_FILE} "${L0_VERSIONEER_SRC}")
99+
cmake_path(GET LevelZero_LIBRARY PARENT_PATH LevelZero_LIBRARIES_PATH)
100+
set(LevelZero_LIBRARIES_DIR ${LevelZero_LIBRARIES_PATH} PARENT_SCOPE)
101+
try_run(L0_VERSIONEER_RUN L0_VERSIONEER_COMPILE
102+
"${CMAKE_BINARY_DIR}"
103+
"${L0_VERSIONEER_FILE}"
104+
LINK_LIBRARIES ze_loader
105+
CMAKE_FLAGS
106+
"-DINCLUDE_DIRECTORIES=${LevelZero_INCLUDE_DIR}/level_zero"
107+
"-DLINK_LIBRARIES=${LevelZero_LIBRARIES_PATH}"
108+
RUN_OUTPUT_VARIABLE L0_VERSION
109+
)
110+
string(REPLACE "." ";" VERSION_LIST ${L0_VERSION})
111+
list(GET VERSION_LIST 0 L0_VERSION_MAJOR)
112+
list(GET VERSION_LIST 1 L0_VERSION_MINOR)
113+
list(GET VERSION_LIST 2 L0_VERSION_PATCH)
114+
115+
set(LevelZero_VERSION ${L0_VERSION} PARENT_SCOPE)
116+
set(LevelZero_VERSION_MAJOR ${L0_VERSION_MAJOR} PARENT_SCOPE)
117+
set(LevelZero_VERSION_MINOR ${L0_VERSION_MINOR} PARENT_SCOPE)
118+
set(LevelZero_VERSION_PATCH ${L0_VERSION_PATCH} PARENT_SCOPE)
119+
endfunction(get_l0_version)
120+
121+
if(LevelZero_INCLUDE_DIR AND LevelZero_LIBRARY)
122+
list(APPEND LevelZero_LIBRARIES "${LevelZero_LIBRARY}")
123+
list(APPEND LevelZero_INCLUDE_DIRS ${LevelZero_INCLUDE_DIR})
124+
if(OpenCL_FOUND)
125+
list(APPEND LevelZero_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS})
126+
endif()
127+
get_l0_version()
128+
129+
if(NOT TARGET LevelZero::LevelZero)
130+
add_library(LevelZero::LevelZero INTERFACE IMPORTED)
131+
set_target_properties(LevelZero::LevelZero
132+
PROPERTIES INTERFACE_LINK_LIBRARIES "${LevelZero_LIBRARIES}"
133+
)
134+
set_target_properties(LevelZero::LevelZero
135+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LevelZero_INCLUDE_DIRS}"
136+
)
137+
endif()
138+
endif()
139+
140+
# Check if a specific version of Level Zero is required
141+
if(LevelZero_FIND_VERSION AND (DEFINED LevelZero_VERSION))
142+
string(COMPARE
143+
LESS_EQUAL
144+
${LevelZero_FIND_VERSION}
145+
${LevelZero_VERSION}
146+
VERSION_MATCH
147+
)
148+
if(VERSION_MATCH)
149+
set(LevelZero_FOUND TRUE)
150+
else()
151+
set(LevelZero_FOUND FALSE)
152+
endif()
153+
else()
154+
set(LevelZero_FOUND TRUE)
155+
endif()
156+
157+
message(STATUS "LEVEL_ZERO_FOUND: ${LevelZero_FOUND}")
158+
message(STATUS "LevelZero_INCLUDE_DIR: ${LevelZero_INCLUDE_DIR}")
159+
message(STATUS "LevelZero_LIBRARY: ${LevelZero_LIBRARY}")
160+
message(STATUS "LevelZero_LIBRARIES_DIR: ${LevelZero_LIBRARIES_DIR}")
161+
message(STATUS "LevelZero_VERSION: ${LevelZero_VERSION}")
162+
163+
find_package_handle_standard_args(LevelZero
164+
REQUIRED_VARS
165+
LevelZero_FOUND
166+
LevelZero_INCLUDE_DIR
167+
LevelZero_LIBRARY
168+
LevelZero_LIBRARIES_DIR
169+
LevelZero_LIBRARIES_DIR
170+
LevelZero_VERSION_MINOR
171+
LevelZero_VERSION_PATCH
172+
LevelZero_VERSION
173+
HANDLE_COMPONENTS
174+
)
175+
mark_as_advanced(LevelZero_LIBRARY LevelZero_INCLUDE_DIR)

dpcomp_gpu_runtime/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,25 @@ project(dpcomp-gpu-runtime LANGUAGES CXX C)
1616

1717
include(GenerateExportHeader)
1818

19-
if(NOT LEVEL_ZERO_DIR)
20-
message(FATAL_ERROR "LEVEL_ZERO_DIR is not set")
21-
endif()
22-
2319
set(SOURCES_LIST
2420
lib/gpu_runtime.cpp
2521
lib/kernel_api_stubs.cpp
26-
)
22+
)
2723
set(HEADERS_LIST
2824
lib/level_zero_printing.hpp
2925
lib/level_zero_wrapper.hpp
30-
)
26+
)
3127

3228
add_library(${PROJECT_NAME} SHARED ${SOURCES_LIST} ${HEADERS_LIST})
3329
generate_export_header(${PROJECT_NAME})
3430

3531
target_include_directories(${PROJECT_NAME} PRIVATE
3632
${PROJECT_BINARY_DIR}
37-
${LEVEL_ZERO_DIR}/include
38-
)
33+
${LevelZero_INCLUDE_DIR}
34+
)
3935

4036
target_link_directories(${PROJECT_NAME} PRIVATE
41-
${LEVEL_ZERO_DIR}/lib
42-
)
37+
${LevelZero_LIBRARIES_DIR}
38+
)
4339

44-
target_link_libraries(${PROJECT_NAME} PRIVATE ze_loader)
40+
target_link_libraries(${PROJECT_NAME} PRIVATE ${LevelZero_LIBRARY})

0 commit comments

Comments
 (0)