-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
178 lines (155 loc) · 7.79 KB
/
Copy pathCMakeLists.txt
File metadata and controls
178 lines (155 loc) · 7.79 KB
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
# SPDX-FileCopyrightText: © 2024 Tenstorrent AI ULC
#
# SPDX-License-Identifier: Apache-2.0
option(USE_CUSTOM_TT_MLIR_VERSION "Flag to use TT_MLIR_VERSION set by the user" OFF)
if (NOT DEFINED TT_MLIR_VERSION OR NOT USE_CUSTOM_TT_MLIR_VERSION)
set(TT_MLIR_VERSION "4fa8d1029ec70784478ed041cee9f6f7b090bef1")
endif()
set(LOGURU_VERSION "4adaa185883e3c04da25913579c451d3c32cfac1")
if (TOOLCHAIN STREQUAL "ON")
cmake_minimum_required(VERSION 3.20)
project(ttmlir-toolchain LANGUAGES CXX C)
execute_process(
COMMAND git clone --recursive https://github.com/tenstorrent/tt-mlir.git ${PROJECT_SOURCE_DIR}/tt-mlir/src/tt-mlir
RESULT_VARIABLE result1
OUTPUT_VARIABLE output1
ERROR_VARIABLE error_output1
)
if (NOT ${result1} EQUAL 0)
message(FATAL_ERROR "Failed to clone tt-mlir: ${error_output1}")
endif()
execute_process(
COMMAND /bin/bash -c "cd ${PROJECT_SOURCE_DIR}/tt-mlir/src/tt-mlir && git checkout ${TT_MLIR_VERSION}"
)
else()
include(ExternalProject)
include(GNUInstallDirs)
add_subdirectory(pjrt_c_api)
# ----- tt-mlir -----
set(TTMLIR_SOURCE_DIR_OVERRIDE "" CACHE PATH
"Path to an existing tt-mlir checkout. When set, bypasses the git clone/update in ExternalProject_Add; the user is responsible for keeping the checkout at a compatible revision.")
set(TTMLIR_TTMETAL_SOURCE_DIR "" CACHE PATH
"Path to an existing tt-metal checkout. When set, bypasses the git clone/update in ExternalProject_Add; the user is responsible for keeping the checkout at a compatible revision.")
if(TTMLIR_SOURCE_DIR_OVERRIDE)
message(STATUS "Using override tt-mlir source: ${TTMLIR_SOURCE_DIR_OVERRIDE}")
set(TTMLIR_BUILD_DIR "${TTMLIR_SOURCE_DIR_OVERRIDE}/build")
set(TTMLIR_SOURCE_ARGS
SOURCE_DIR ${TTMLIR_SOURCE_DIR_OVERRIDE}
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
)
# Many scripts (venv/activate, install_ttmlir_requirements.sh, bisect_*.sh,
# CI workflows, tracy include path) hardcode third_party/tt-mlir/src/tt-mlir.
# Symlink the canonical location to the override so those continue to work.
set(TTMLIR_CANONICAL_LINK "${CMAKE_CURRENT_SOURCE_DIR}/tt-mlir/src/tt-mlir")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tt-mlir/src")
if(IS_SYMLINK "${TTMLIR_CANONICAL_LINK}")
file(READ_SYMLINK "${TTMLIR_CANONICAL_LINK}" _existing_link_target)
if(NOT "${_existing_link_target}" STREQUAL "${TTMLIR_SOURCE_DIR_OVERRIDE}")
file(REMOVE "${TTMLIR_CANONICAL_LINK}")
file(CREATE_LINK "${TTMLIR_SOURCE_DIR_OVERRIDE}" "${TTMLIR_CANONICAL_LINK}" SYMBOLIC)
message(STATUS "Repointed ${TTMLIR_CANONICAL_LINK} -> ${TTMLIR_SOURCE_DIR_OVERRIDE}")
endif()
elseif(EXISTS "${TTMLIR_CANONICAL_LINK}")
message(FATAL_ERROR
"TTMLIR_SOURCE_DIR_OVERRIDE is set, but a real directory exists at\n"
" ${TTMLIR_CANONICAL_LINK}\n"
"(likely a leftover clone from a prior non-override configure). "
"Remove it so cmake can replace it with a symlink to the override:\n"
" rm -rf ${TTMLIR_CANONICAL_LINK}")
else()
file(CREATE_LINK "${TTMLIR_SOURCE_DIR_OVERRIDE}" "${TTMLIR_CANONICAL_LINK}" SYMBOLIC)
message(STATUS "Symlinked ${TTMLIR_CANONICAL_LINK} -> ${TTMLIR_SOURCE_DIR_OVERRIDE}")
endif()
else()
set(TTMLIR_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tt-mlir")
set(TTMLIR_BUILD_DIR "${TTMLIR_SOURCE_DIR}/src/tt-mlir/build")
set(TTMLIR_SOURCE_ARGS
GIT_REPOSITORY https://github.com/tenstorrent/tt-mlir.git
GIT_TAG ${TT_MLIR_VERSION}
GIT_PROGRESS ON
)
endif()
if(TTMLIR_TTMETAL_SOURCE_DIR)
set(TTMLIR_TTMETAL_SOURCE_DIR "-DTTMLIR_TTMETAL_SOURCE_DIR=${TTMLIR_TTMETAL_SOURCE_DIR}")
endif()
set(WITH_METAL_RUNTIME_ROOT_SET "")
if(NOT DEFINED ENV{TT_METAL_RUNTIME_ROOT})
set(WITH_METAL_RUNTIME_ROOT_SET "TT_METAL_RUNTIME_ROOT=${TTPJRT_SOURCE_DIR}/third_party/tt-mlir/src/tt-mlir/third_party/tt-metal/src/tt-metal")
endif()
message(STATUS "ttmlir runtime debugging is set to: ${TT_RUNTIME_DEBUG}")
ExternalProject_Add(
tt-mlir
PREFIX ${TTPJRT_SOURCE_DIR}/third_party/tt-mlir
# Installing the python dependencies before the build
PATCH_COMMAND mkdir -p ${TTMLIR_BUILD_DIR}
COMMAND TTPJRT_SOURCE_DIR=${TTPJRT_SOURCE_DIR} bash ${TTPJRT_SOURCE_DIR}/venv/install_ttmlir_requirements.sh
CMAKE_GENERATOR Ninja
BINARY_DIR ${TTMLIR_BUILD_DIR}
BUILD_COMMAND env ${WITH_METAL_RUNTIME_ROOT_SET} ${CMAKE_COMMAND} --build <BINARY_DIR>
INSTALL_COMMAND ${CMAKE_COMMAND} --install <BINARY_DIR> --component SharedLib
COMMAND ${CMAKE_COMMAND} --install <BINARY_DIR> --component DistributedRuntime
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=${TTMLIR_BUILD_TYPE}
-DCMAKE_CXX_FLAGS=-Wno-error=pass-failed # Uplift hack, manylinux build threw because stablehlo autogenerated source had a failed loop unroll.s
-DCMAKE_C_COMPILER=clang
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
-DTT_RUNTIME_ENABLE_TTNN=ON
-DTTMLIR_ENABLE_STABLEHLO=ON
-DTTMLIR_ENABLE_RUNTIME=ON
-DTT_RUNTIME_DEBUG=${TT_RUNTIME_DEBUG}
-DTTMLIR_ENABLE_BINDINGS_PYTHON=${TTMLIR_ENABLE_BINDINGS_PYTHON}
-DCMAKE_INSTALL_PREFIX=${TTMLIR_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
-DTT_RUNTIME_ENABLE_PERF_TRACE=${TTMLIR_ENABLE_PERF_TRACE}
-DTTMLIR_ENABLE_OPMODEL=ON
-DTTMLIR_ENABLE_EXPLORER=${TTXLA_ENABLE_EXPLORER}
-DTTMLIR_ENABLE_TESTS=OFF
-DTTMLIR_ENABLE_TOOLS=${TTXLA_ENABLE_TOOLS}
-DTTMLIR_ENABLE_DOCS=OFF
-DTTMLIR_ENABLE_TTRT=OFF
-DTT_USE_SYSTEM_SFPI=${TT_USE_SYSTEM_SFPI}
${TTMLIR_TTMETAL_SOURCE_DIR}
${TTMLIR_SOURCE_ARGS}
)
if(TTXLA_ENABLE_EXPLORER)
ExternalProject_Add_Step(tt-mlir build_explorer
COMMAND env ${WITH_METAL_RUNTIME_ROOT_SET} ${CMAKE_COMMAND} --build <BINARY_DIR> -- explorer
DEPENDEES build
WORKING_DIRECTORY ${TTMLIR_BUILD_DIR}
)
endif()
set_target_properties(tt-mlir PROPERTIES EXCLUDE_FROM_ALL TRUE)
install(DIRECTORY ${TTMLIR_INSTALL_PREFIX}/ DESTINATION "${CMAKE_INSTALL_PREFIX}" USE_SOURCE_PERMISSIONS)
# Expose all tt-mlir .so files as shared imported libraries.
message(STATUS "Linking to TTMLIR libraries in ${TTMLIR_LIB_DIR}")
file(GLOB TTMLIR_LIBRARIES "${TTMLIR_LIB_DIR}/*.so")
foreach(TTMLIR_LIBRARY ${TTMLIR_LIBRARIES})
# Remove `lib` prefix and `.so` extention from shared lib name.
get_filename_component(lib_name ${TTMLIR_LIBRARY} NAME_WE)
string(REPLACE "lib" "" lib_name ${lib_name})
add_library(${lib_name} SHARED IMPORTED GLOBAL)
set_target_properties(${lib_name} PROPERTIES
EXCLUDE_FROM_ALL TRUE
IMPORTED_LOCATION ${TTMLIR_LIBRARY}
)
add_dependencies(${lib_name} tt-mlir)
endforeach()
set(FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-undef -Wno-unsafe-buffer-usage -Wno-disabled-macro-expansion")
ExternalProject_Add(
loguru
PREFIX ${TTPJRT_SOURCE_DIR}/third_party/loguru
CMAKE_GENERATOR Ninja
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER=clang
-DCMAKE_CXX_COMPILER=clang++
-DCMAKE_CXX_FLAGS=${FLAGS}
-DCMAKE_INSTALL_PREFIX=${LOGURU_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
GIT_REPOSITORY https://github.com/emilk/loguru.git
GIT_TAG ${LOGURU_VERSION}
GIT_PROGRESS ON
)
endif()