forked from intel/intel-xpu-backend-for-triton
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
179 lines (156 loc) · 6.44 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.24)
cmake_policy(SET CMP0135 NEW)
endif()
if(DEFINED ENV{TRITON_INTEL_LLVM_DIR})
message(STATUS "[intel_xpu_backend]: using user provide llvm path")
else()
if(DEFINED ENV{TRITON_CODEGEN_INTEL_XPU_BACKEND})
message(STATUS "[intel_xpu_backend]: using intel_llvm")
set(TRITON_INTEL_LLVM_DIR $ENV{HOME}/.triton/intel_llvm)
message(
STATUS "[intel_xpu_backend]: set intel llvm path ${TRITON_INTEL_LLVM_DIR}"
)
if(EXISTS ${TRITON_INTEL_LLVM_DIR}/lib/cmake)
message(STATUS "[intel_xpu_backend]: using previous exists llvm")
else()
include(FetchContent)
function(download_file url)
FetchContent_Declare(intel-llvm URL ${url} SOURCE_DIR
${TRITON_INTEL_LLVM_DIR})
FetchContent_Populate(intel-llvm)
endfunction(download_file)
# Default llvm package
set(LLVM_DOWNLOAD_URL
https://github.com/intel/intel-xpu-backend-for-triton/releases/download/llvm_pkg_5e5a22ca/llvm+mlir-18.0.0-x86_64-linux-gnu-ubuntu-18.04-release.tar.xz
)
set(ENV_USE_LLVM_ASSERT "false")
if(DEFINED ENV{TRITON_USE_ASSERT_ENABLED_LLVM})
set(ENV_USE_LLVM_ASSERT "$ENV{TRITON_USE_ASSERT_ENABLED_LLVM}")
string(TOLOWER ${ENV_USE_LLVM_ASSERT} ENV_USE_LLVM_ASSERT)
message(STATUS "[intel_xpu_backend]: using intel llvm with assert version for UT")
endif()
if(ENV_USE_LLVM_ASSERT STREQUAL "true")
set(LLVM_DOWNLOAD_URL
https://github.com/intel/intel-xpu-backend-for-triton/releases/download/llvm_pkg_5e5a22ca/llvm+mlir-18.0.0-x86_64-linux-gnu-ubuntu-18.04-assert.tar.xz
)
endif()
set(OS_INFO_FILE "/etc/os-release")
message(
STATUS
"[intel_xpu_backend]: downloading intel llvm for intel_xpu_backend, path ${TRITON_INTEL_LLVM_DIR}"
)
if(EXISTS ${OS_INFO_FILE})
file(STRINGS ${OS_INFO_FILE} OS_INFO_KEY_LIST REGEX "^(ID|VERSION_ID)=")
set(OS_ID "")
set(OS_VERSION_ID "")
foreach(_os_info ${OS_INFO_KEY_LIST})
if("${_os_info}" MATCHES "^(ID)=(.*)$")
string(TOLOWER "${CMAKE_MATCH_2}" OS_ID)
string(REGEX REPLACE "\"" "" OS_ID ${OS_ID})
elseif("${_os_info}" MATCHES "(VERSION_ID)=(.*)$")
string(TOLOWER "${CMAKE_MATCH_2}" OS_VERSION_ID)
string(REGEX REPLACE "\"" "" OS_VERSION_ID ${OS_VERSION_ID})
endif()
endforeach()
if("${OS_ID}" STREQUAL "centos")
if("${OS_VERSION_ID}" STREQUAL "7")
if(ENV_USE_LLVM_ASSERT STREQUAL "true")
set(LLVM_DOWNLOAD_URL
https://github.com/intel/intel-xpu-backend-for-triton/releases/download/llvm_pkg_5e5a22ca/llvm+mlir-18.0.0-x86_64-linux-gnu-centos-7-assert.tar.xz
)
else()
set(LLVM_DOWNLOAD_URL
https://github.com/intel/intel-xpu-backend-for-triton/releases/download/llvm_pkg_5e5a22ca/llvm+mlir-18.0.0-x86_64-linux-gnu-centos-7-release.tar.xz
)
endif()
message(
STATUS
"[intel_xpu_backend]: downloading intel llvm for ${OS_ID} ${OS_VERSION_ID}"
)
endif()
endif()
endif()
message(
STATUS
"[intel_xpu_backend]: downloading intel llvm from ${LLVM_DOWNLOAD_URL}"
)
download_file(${LLVM_DOWNLOAD_URL})
endif()
message(
STATUS
"[intel_xpu_backend]: Triton uses LLVM version ${LLVM_PACKAGE_VERSION} with revision ${LLVM_GIT_REVISION}"
)
message(
STATUS
"[intel_xpu_backend]: Use the LLVM version with revision to re-config for the intel_xpu_backend"
)
# Check if the the LLVM exists.
if (NOT EXISTS ${TRITON_INTEL_LLVM_DIR})
message (FATAL_ERROR "[intel_xpu_backend]: ${TRITON_INTEL_LLVM_DIR} could not be found. Check if the LLVM is correctly downloaded.")
endif()
# hints from
# https://stackoverflow.com/questions/10205986/how-to-capture-cmake-command-line-arguments
# Propagate the CMake vars to the intel xpu backend
set(CMAKE_ARGS "${CMAKE_ARGS};-DLLVM_DIR=${TRITON_INTEL_LLVM_DIR}")
set(CMAKE_ARGS
"${CMAKE_ARGS};-DLLVM_INCLUDE_DIRS=${TRITON_INTEL_LLVM_DIR}/include")
set(CMAKE_ARGS
"${CMAKE_ARGS};-DLLVM_LIBRARY_DIR=${TRITON_INTEL_LLVM_DIR}/lib")
else()
message(STATUS "[intel_xpu_backend]: using original llvm ")
set(XPU_BACKEND_RECURSIVE ON)
endif()
endif()
if(XPU_BACKEND_RECURSIVE)
set(TRITON_BUILD_PYTHON_MODULE ON)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) # Tablegen'd files
add_subdirectory(include)
add_subdirectory(lib)
add_subdirectory(python)
else()
get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(CACHE_VAR ${CACHE_VARS})
get_property(
CACHE_VAR_HELPSTRING
CACHE ${CACHE_VAR}
PROPERTY HELPSTRING)
get_property(
CACHE_VAR_TYPE
CACHE ${CACHE_VAR}
PROPERTY TYPE)
if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
set(CACHE_VAR_TYPE)
else()
set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
endif()
if(CACHE_VAR STREQUAL "TRITON_BUILD_TUTORIALS")
set(CMAKE_ARGS "${CMAKE_ARGS};-D${CACHE_VAR}${CACHE_VAR_TYPE}=OFF")
elseif(CACHE_VAR STREQUAL "TRITON_BUILD_PYTHON_MODULE")
# We still need the Python module, since there are cross-dependencies.
set(CMAKE_ARGS "${CMAKE_ARGS};-D${CACHE_VAR}${CACHE_VAR_TYPE}=ON")
elseif(CACHE_VAR STREQUAL "LLVM_LIBRARY_DIR")
continue()
elseif(CACHE_VAR STREQUAL "LLVM_DIR")
continue()
elseif(CACHE_VAR STREQUAL "LLVM_INCLUDE_DIRS")
continue()
else()
# Keep ; semantic by replacing it with \\;
string(REPLACE ";" "\\;" CACHE_VAR_VAL "${${CACHE_VAR}}")
set(CMAKE_ARGS
"${CMAKE_ARGS};-D${CACHE_VAR}${CACHE_VAR_TYPE}=${CACHE_VAR_VAL}")
endif()
endforeach()
execute_process(
COMMAND ${CMAKE_COMMAND} ${CMAKE_ARGS} -DXPU_BACKEND_RECURSIVE=ON -S
${PROJECT_SOURCE_DIR} -B ${CMAKE_CURRENT_BINARY_DIR}/triton)
add_custom_target(
intel_xpu_backend_for_triton ALL
COMMAND ${CMAKE_COMMAND} --build . -j --config ${CMAKE_BUILD_TYPE} --target
intel_xpu_backend_for_triton
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/triton
COMMENT "Building intel_xpu_backend_for_triton"
VERBATIM USES_TERMINAL)
endif()